overview
本文回答:vjcad 的核心层由
Engine(运行时入口)、pcanvas(画布控制器)、CadDocument+currentSpace(文档与当前空间)、trans坐标转换 五块构成;命令 / 实体 / 事件 / 插件等系统模块都通过Engine.*获取这些核心对象。
一、组件关系
Engine(单例 / 全局入口)
├── pcanvas 画布控制器(addEntity/regen/redraw/zoomExtents/drawControl)
│ └── trans 坐标转换(CanvasToWcs / WcsToCanvas)
├── currentDoc 当前文档
│ ├── currentSpace 当前空间(ModelSpace / PaperSpace)
│ │ ├── items 所有实体
│ │ ├── addEntities 批量入库(不记 undo,业务代码用 Engine.addEntities)
│ │ └── erase 删除
│ ├── layers 图层集合
│ ├── blocks 块集合
│ ├── layouts 布局集合
│ ├── textStyles 文字样式
│ ├── dimensionStyles 标注样式(字段名是 dimensionStyles,不是 dimStyles)
│ └── linetypeDefinitions 线型定义(不是 lineTypes)
├── editor 编辑控制器(命令调度、输入处理)
│ ├── executerWithOp 触发命令
│ └── contextMenu 右键菜单(挂在 editor 上,非 Engine 直属)
├── eventManager 事件管理器(on/off/once/offAll/suspend/resume)
├── undoManager 撤销管理器
└── view 视图相关(coordsBar / openDbDoc / ...)
MCP 参考:vjcad/doc/guide/architecture.md、vjcad/doc/command/api-reference.md。
二、按子主题挑
| 想问的 | 去读 |
|---|---|
| Engine 全部能干什么 / 系统变量 | engine |
| pcanvas 的 regen/redraw/render 区别 / 高亮 / 预览图 | pcanvas |
| 当前文档与当前空间,怎么取实体 | document-space |
| 屏幕 ↔ 图纸坐标怎么转 | coordinate |
vjcad 包对外导出哪些类 / 函数 |
public-api |
三、生命周期
Engine 在 await cadView.onLoad() 之后才组装好;只有 onLoad 之后才能访问 Engine.pcanvas / Engine.currentDoc / Engine.eventManager / Engine.undoManager / Engine.editor / Engine.view。详见 setup/onload-lifecycle。
参考(官方文档 MCP)
- 文档:
vjcad/doc/guide/architecture.md、vjcad/doc/command/api-reference.md - 示例:
vjcad/example/basic/01init.js、vjcad/example/basic/02onload.js