Skip to content

标注命令 ​

本页介绍标注命令在 cad-viewer 中如何实现,包括命令层和 UI 交互层。
其设计紧密围绕类 AutoCAD 的概念,例如系统变量、当前图层和实体绘制样式。

概览 ​

cad-viewer 中的标注(例如标注圆、矩形、云线矩形、草图等)实现方式如下:

  • 派生自通用基类的专用命令
  • 在专用标注图层上动态创建的实体
  • 由系统变量而非图层样式控制的绘制样式
  • 在命令执行期间修改系统变量的临时 UI 工具栏

这种方式确保了:

  • 所有标注命令行为一致
  • 可轻松显示/隐藏所有标注
  • 用户熟悉 AutoCAD 风格的工作流程

命令部分 ​

基础命令类 ​

所有与标注相关的命令都继承自同一个基类:

该基类集中处理通用行为,例如:

  • 标注图层管理
  • 系统变量备份与恢复
  • 命令生命周期处理(开始 / 结束 / 取消)

通过继承 AcApBaseRevCmd,所有标注命令都遵循相同的执行模式和系统变量行为。

标注图层管理 ​

所有标注实体都创建在专用标注图层上,该图层:

  • 如果不存在,则动态创建
  • 仅在标注命令执行期间使用

在底层,这是通过操作系统变量实现的:

  • clayer(当前图层)

工作流程 ​

  1. 在创建标注实体之前:

    • 保存 clayer 的原始值
    • 将 clayer 切换到标注图层
  2. 创建标注实体

  3. 命令结束后(或被取消后):

    • 将 clayer 恢复为原始值

这保证了:

  • 标注始终位于正确的图层上
  • 用户的图层状态不会被永久修改

显示 / 隐藏标注 ​

隐藏或显示标注的实现非常简单:

  • 隐藏或显示标注图层

无需逐实体的可见性逻辑。
这使标注可见性管理既高效又一致。

实体绘制样式解析 ​

标注实体不使用图层样式决定外观。

相反,它们的绘制样式由系统变量解析,包括:

  • cecolor — 当前实体颜色
  • celweight — 当前实体线宽

这种设计允许:

  • 每个标注在创建时保留其视觉样式
  • 图层样式变化不会影响已有标注

UI 部分 ​

实体绘制样式工具栏 ​

创建标注实体时,会显示以下 UI 组件:

行为 ​

  • 显示在查看器的顶部居中位置

  • 允许用户修改:

    • 颜色
    • 线宽
    • 其他实体绘制样式

由于该工具栏与文件名显示区域重叠:

  • 工具栏可见时,文件名会被临时隐藏

系统变量绑定 ​

用户与 MlEntityDrawStyleToolbar 的交互会直接修改系统变量,例如:

  • cecolor
  • celweight

随后标注实体在创建时会使用这些系统变量,从而确保:

  • 用户在工具栏中看到的内容与绘制结果一致
  • 标注行为与 AutoCAD 风格的工作流程一致

系统变量恢复 ​

标注命令结束(无论成功与否)后:

  • 被修改的系统变量(cecolor、celweight 等)会恢复为原始值

这确保了:

  • 标注命令不会永久影响全局图纸状态
  • 用户可以在标注命令和普通绘图命令之间安全切换

总结 ​

cad-viewer 中的标注系统围绕三个关键理念构建:

  1. 命令继承

    • 所有标注命令共享同一个基础实现
  2. 基于图层的组织方式

    • 所有标注都位于动态管理的标注图层上
  3. 系统变量驱动的样式

    • 绘制样式由系统变量控制,而非图层样式

这一架构提供了:

  • 可预测的命令行为
  • 便捷的标注管理
  • 熟悉的类 CAD 用户体验