标注命令
本页介绍标注命令在 cad-viewer 中如何实现,包括命令层和 UI 交互层。
其设计紧密围绕类 AutoCAD 的概念,例如系统变量、当前图层和实体绘制样式。
概览
cad-viewer 中的标注(例如标注圆、矩形、云线矩形、草图等)实现方式如下:
- 派生自通用基类的专用命令
- 在专用标注图层上动态创建的实体
- 由系统变量而非图层样式控制的绘制样式
- 在命令执行期间修改系统变量的临时 UI 工具栏
这种方式确保了:
- 所有标注命令行为一致
- 可轻松显示/隐藏所有标注
- 用户熟悉 AutoCAD 风格的工作流程
命令部分
基础命令类
所有与标注相关的命令都继承自同一个基类:
该基类集中处理通用行为,例如:
- 标注图层管理
- 系统变量备份与恢复
- 命令生命周期处理(开始 / 结束 / 取消)
通过继承 AcApBaseRevCmd,所有标注命令都遵循相同的执行模式和系统变量行为。
标注图层管理
所有标注实体都创建在专用标注图层上,该图层:
- 如果不存在,则动态创建
- 仅在标注命令执行期间使用
在底层,这是通过操作系统变量实现的:
clayer(当前图层)
工作流程
在创建标注实体之前:
- 保存
clayer的原始值 - 将
clayer切换到标注图层
- 保存
创建标注实体
命令结束后(或被取消后):
- 将
clayer恢复为原始值
- 将
这保证了:
- 标注始终位于正确的图层上
- 用户的图层状态不会被永久修改
显示 / 隐藏标注
隐藏或显示标注的实现非常简单:
- 隐藏或显示标注图层
无需逐实体的可见性逻辑。
这使标注可见性管理既高效又一致。
实体绘制样式解析
标注实体不使用图层样式决定外观。
相反,它们的绘制样式由系统变量解析,包括:
cecolor— 当前实体颜色celweight— 当前实体线宽
这种设计允许:
- 每个标注在创建时保留其视觉样式
- 图层样式变化不会影响已有标注
UI 部分
实体绘制样式工具栏
创建标注实体时,会显示以下 UI 组件:
行为
显示在查看器的顶部居中位置
允许用户修改:
- 颜色
- 线宽
- 其他实体绘制样式
由于该工具栏与文件名显示区域重叠:
- 工具栏可见时,文件名会被临时隐藏
系统变量绑定
用户与 MlEntityDrawStyleToolbar 的交互会直接修改系统变量,例如:
cecolorcelweight
随后标注实体在创建时会使用这些系统变量,从而确保:
- 用户在工具栏中看到的内容与绘制结果一致
- 标注行为与 AutoCAD 风格的工作流程一致
系统变量恢复
标注命令结束(无论成功与否)后:
- 被修改的系统变量(
cecolor、celweight等)会恢复为原始值
这确保了:
- 标注命令不会永久影响全局图纸状态
- 用户可以在标注命令和普通绘图命令之间安全切换
总结
cad-viewer 中的标注系统围绕三个关键理念构建:
命令继承
- 所有标注命令共享同一个基础实现
基于图层的组织方式
- 所有标注都位于动态管理的标注图层上
系统变量驱动的样式
- 绘制样式由系统变量控制,而非图层样式
这一架构提供了:
- 可预测的命令行为
- 便捷的标注管理
- 熟悉的类 CAD 用户体验