量化教育软件:使用 CCanvas 类绘制刻度表盘

介绍

这一切的开始, 是当赫兹量化通过 CCanvas 类首次认清自我。当使用它进行实践时, 我偶然间想到利用它绘制一个指示器表盘。我的第一个表盘计相当粗糙, 但最终它们都补充了新的元素, 变得赏心悦目。结果就是, 我现在拥有了一个小型程序库, 可用一种简单易行的方式为一款指标或 EA 加入刻度表盘。在此文中, 赫兹量化将兼顾表盘的结构, 熟悉绘制和设置视觉外观的必要函数, 并评估资源强度。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图例.1. 刻度表盘

编辑切换为居中

添加图片注释,不超过 140 字(可选)

1. 坐标和锚点

表盘在图表上的定位有两种类型: 绝对和相对。

在 绝对 定位情况下, 坐标代表自锚点边角沿 X 和 Y 数轴的像素距离。

在 相对 定位情况下, 坐标原点根据指定相对定位类型创建。当选择了垂直类型, 原点位于参考对象之下或之上 (如果分别选择了锚点上边角或下边角)。当选择了垂直类型, 它位于锚点边角方向的左侧或右侧。在此种情况下, 指定的坐标表示距其原点的偏移。正偏移量导致物体远离参考对象。当负偏移量的情况, 则物体侵占参照对象。

参照对象可以表示为另一个表盘对象。至关重要的是, 这两个对象将具有相同的锚点边角。

图例. 2 描绘相对定位的一个示例。

编辑

添加图片注释,不超过 140 字(可选)

图例.2. 表盘的相对定位

让我们回顾一下每一个表盘的设置:

  • 表盘 "gg01": 相对定位被禁止。水平偏移 — 40, 垂直偏移 — 40。

  • 表盘 "gg02": 相对定位 — 水平, 参考对象 — "gg01"。自坐标原点 (点 A) 的水平偏移— 15, 垂直偏移 — 0。

  • 表盘 "gg03": 相对定位 — 垂直, 参照对象 — "gg01"。自坐标原点 (点 B) 的水平偏移— 0, 垂直偏移 — 15。

  • 表盘 "gg04": 相对定位 — 垂直, 参照对象 — "gg02"。自坐标原点 (点 C) 的水平偏移— 50, 垂直偏移 — 15。

如果图表上有若干指标含有表盘, 则相对定位有利于输入设置。如果您决定改变某一个表盘的大小, 其它表盘的坐标将会自动重新计算。

函数 GaugeCreate() 设置定位类型和坐标。

2. 表盘元素

刻度表盘由两类图形对象组成。其一称为 刻度层, 另一个称为 表针层。两类图形对象都有相同的坐标。表针层位于刻度层之上。再输入参数里设置的表盘名作为这两类对象的前缀。例如, 如果表盘名是 "Gauge01", 则刻度层将被称为 "Gauge01_s", 而表针层将名为 "Gauge01_n"。

图例.3 描绘表盘结构。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图例.3. 表盘结构

刻度层 包括:

  • 边框 (1)

  • 刻度标记 (5, 6, 7)

  • 刻度标签 (4)

  • 高亮范围 (2, 12)

  • 图解 (3, 10, 11)

图解是以用途区分:

  • 表盘描述 (3)

  • 测量单位 (11)

  • 当前数值 (10)

  • 刻度标签倍数 (省略)

刻度划分为:

  • 主要 (7)

  • 中等 (5)

  • 次要 (6)

只有主要刻度点有标签。刻度步长设定为一个数字值。中等刻度步长依据指定的主要刻度之间的中等标记数量计算。次要刻度步长依据指定的中等刻度之间的次要标记数量计算。次要和中等刻度可以省略。

表针层 包括:

  • 表针 (8)

  • 表针中心 (9)

2.1. 大小

图例.3 描绘一些表盘元素的大小:

  • d — 表盘大小, 其与表盘外轮廓线的直径相对应

  • b — 边框大小

  • g — 边框与刻度元素之间的空间大小

  • c — 表针中心的大小。

注释。只有表盘直径以像素为单位设置大小 (图例.3 中的 "d")。所有其它元素和字体依照条件单位设置, 且它们的大小以直径的百分比计算。这样便于缩放。改变直径, 则所有其它尺寸将被按比例重新计算。计算系数已列于 宏替换 章节, 且可由用户修改。

2.2. 实体形状

表盘的形状有两种类型: 圆形和扇形。如果 刻度范围 角度小于 180 度, 扇形更加便利。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图例.4. 表盘形状

图例.4 描绘一个圆形表盘 (a) 和两个扇形表盘 (b, c)。函数 GaugeSetCaseParameters() 用于设置期望的实体形状。

2.3. 刻度

这是表盘十分重要的元素。数据可读性依据其显示。刻度不应过于复杂, 但在同一时间, 它必须能足够体现信息。选择刻度极值, 以及主要标记的步长, 需要特别注意。函数 GaugeSetScaleParameters() 允许设置刻度范围, 它的旋转和极值 (最小值和最大值)。最小值可以在左侧 (顺时针) 或右侧 (逆时针)。

刻度范围 是两个刻度极值间由半径向量构成的扇形所包含的夹角。它的示范在图例.5.

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图例.5. 刻度范围

刻度旋转 是自表盘中心的向上垂直线, 与刻度范围的平分点的偏离角度。它的示范在图例.6.

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图利.6. 刻度旋转角度

结合刻度范围角度和旋转角度可以帮助您以十分灵活方式的设置表盘的外观。图例.4(c) 示范一个 90 度范围和 45 度旋转的表盘。

最大和最小刻度值 是重要参数, 它们应依据显示变化的允许数值范围进行选择。零标记为方便起见可以省略。如果您的变化范围从 400 到 600, 那么刻度零不会绘制任何点。图例.7 描绘最大和最小刻度值的例子。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图例.7. 最大和最小刻度值

  • a) 数值从 0 到 500, 顺时针

  • b) 数值从 -200 到 400, 顺时针

  • c) 数值从 -400 到 0, 顺时针

  • d) 数值从 500 到 0, 逆时针

  • e) 数值从 200 到 800, 顺时针

  • f) 数值从 0 到 -800, 逆时针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值