批注插件
大约 4 分钟
批注插件
批注插件(annotation-plugin)为 WebCAD 提供完整的图纸审阅标注工具集,所有批注实体放在独立图层 _ANNOTATION 上,支持一键显隐和清除,不影响原始图纸。
功能概览
| 工具 | 命令 | 说明 |
|---|---|---|
| 云线 | ANNO_CLOUD | 修订云线标注,弧长自适应图纸范围 |
| 箭头 | ANNO_ARROW | 支持单向、双向、折线三种箭头 |
| 矩形 | ANNO_RECT | 矩形标记框 |
| 椭圆 | ANNO_ELLIPSE | 椭圆标记(多段线近似,支持加粗) |
| 文字 | ANNO_TEXT | 文字批注(委托 MTEXT) |
| 引线 | ANNO_LEADER | 引线批注(委托 MLEADER) |
| 自由线 | ANNO_FREEHAND | 自由手绘线条 |
| 图章 | ANNO_STAMP | 预定义图章(批准/驳回/审核/修改/作废/草稿) |
| 高亮 | ANNO_HIGHLIGHT | 半透明矩形区域高亮 |
| 显示 | ANNO_SHOW | 显示批注图层 |
| 隐藏 | ANNO_HIDE | 隐藏批注图层 |
| 清除 | ANNO_CLEAR | 清除所有批注实体 |
| 列表 | ANNO_LIST | 打开批注列表侧边栏面板 |
安装与加载
批注插件构建产物为 vcad-plugin-annotation.js,可通过以下方式加载:
// 通过 PluginManager 加载
const pm = PluginManager.getInstance();
await pm.loadFromUrl('./plugins/vcad-plugin-annotation.js');也可在插件市场中安装。
使用方式
1. 打开批注工具栏
执行 ANNOTATION 命令(或点击 Ribbon「审阅」标签下的「批注」按钮),弹出浮动工具栏:
ANNOTATION工具栏包含所有批注工具,点击图标即可开始相应的批注操作。
2. 云线批注
ANNO_CLOUD绘制修订云线。弧长根据当前视图范围自动计算,也可手动指定。支持闭合(C)和撤销(U)操作。
3. 箭头批注
ANNO_ARROW支持三种箭头样式:
- S(单向):终点带箭头
- D(双向):两端都有箭头
- P(折线):多段折线,末端带箭头
4. 图章批注
ANNO_STAMP输入数字选择预定义图章:
| 编号 | 图章 |
|---|---|
| 1 | 批准 |
| 2 | 驳回 |
| 3 | 审核 |
| 4 | 修改 |
| 5 | 作废 |
| 6 | 草稿 |
选择后点击放置位置,自动创建居中文字 + 矩形边框。
5. 批注管理
ANNO_SHOW # 显示所有批注
ANNO_HIDE # 隐藏所有批注
ANNO_CLEAR # 清除所有批注(支持撤销)
ANNO_LIST # 打开批注列表面板批注列表面板中双击某条记录可自动缩放定位到该批注位置。
技术设计
批注图层
所有批注实体放在 _ANNOTATION 图层上,图层颜色为红色(ACI 1)。批注命令执行时自动切换到该图层,结束后恢复。
// 批注命令的标准模式
const svc = AnnotationLayerService.getInstance();
const prev = svc.setAsCurrentLayer(); // 切换到 _ANNOTATION
try {
// 绘制批注实体...
} finally {
svc.restoreLayer(prev); // 恢复原图层
}自适应线宽
批注使用多段线 globalWidth 实现加粗显示,而非 lineWeight:
globalWidth始终可见,不依赖LWDISPLAY开关- 根据当前视图 WCS 对角线自动计算线宽(
diag / 500) - 大坐标图(如 GIS 坐标 ~10⁸)和小坐标图(~10²)都能正确显示
import { getAnnoLineWidth } from './services/AnnotationLayerService';
const lw = getAnnoLineWidth(); // 自动计算
entity.globalWidth = lw;云线弧长同理自适应(diag / 30),确保不同尺度图纸上云线形态正常。
命令委托
文字批注(ANNO_TEXT)和引线批注(ANNO_LEADER)委托给内建的 MTEXT / MLEADER 命令。由于 WebCAD 命令系统不支持嵌套执行,采用 setTimeout 延迟调度:
// 先切换图层,让 main() 结束释放命令系统
setTimeout(async () => {
await Engine.editor.executerWithOp('MTEXT');
svc.restoreLayer(prev);
}, 50);注意
不能在命令的 main() 中直接 await Engine.editor.executerWithOp(),这会导致命令嵌套执行,破坏命令系统状态。
插件结构
annotation-plugin/
├── package.json
├── vite.config.ts
├── tsconfig.json
└── src/
├── index.ts # 入口:注册命令、图标、Ribbon、菜单
├── constants.ts # 图层名、颜色、图章预设
├── icons.ts # SVG 图标
├── commands/
│ ├── AnnotationCommand.ts # 主命令 — 打开浮动工具栏
│ ├── AnnoCloudCommand.ts # 云线批注
│ ├── AnnoArrowCommand.ts # 箭头批注(单向/双向/折线)
│ ├── AnnoRectCommand.ts # 矩形标记
│ ├── AnnoEllipseCommand.ts # 椭圆标记
│ ├── AnnoTextCommand.ts # 文字批注
│ ├── AnnoLeaderCommand.ts # 引线批注
│ ├── AnnoFreehandCommand.ts# 自由线
│ ├── AnnoStampCommand.ts # 图章
│ ├── AnnoHighlightCommand.ts # 高亮
│ ├── AnnoShowCommand.ts # 显示
│ ├── AnnoHideCommand.ts # 隐藏
│ ├── AnnoClearCommand.ts # 清除
│ └── AnnoListCommand.ts # 列表面板
├── services/
│ └── AnnotationLayerService.ts # 图层管理 + 自适应计算
└── ui/
└── AnnoListPanel.ts # 批注列表侧边栏面板Ribbon 与菜单
插件激活后自动添加:
- Ribbon:「审阅」标签页,包含「批注」工具组和「管理」工具组
- 菜单:「审阅」菜单,包含批注工具栏、显示/隐藏/清除/列表
// Ribbon 注册示例
context.addRibbonTab({ id: 'review', label: '审阅', groups: [] }, 'plugins');
context.addRibbonGroup('review', {
id: 'annotation-tools',
label: '批注',
primaryButtons: [
{ icon: 'annotation', cmd: 'ANNOTATION', prompt: '批注工具栏', type: 'large' },
],
moreButtons: [
{ icon: 'anno_cloud', cmd: 'ANNO_CLOUD', prompt: '云线批注' },
{ icon: 'anno_arrow', cmd: 'ANNO_ARROW', prompt: '箭头批注' },
// ...
],
});下一步
- 插件基础 — 了解插件接口与生命周期
- 插件上下文 — PluginContext API 详解
- 菜单与 Ribbon — UI 扩展方法
- 插件示例 — 更多插件开发示例