> **本文回答**：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](engine.md) |
| pcanvas 的 regen/redraw/render 区别 / 高亮 / 预览图 | [pcanvas](pcanvas.md) |
| 当前文档与当前空间，怎么取实体 | [document-space](document-space.md) |
| 屏幕 ↔ 图纸坐标怎么转 | [coordinate](coordinate.md) |
| `vjcad` 包对外导出哪些类 / 函数 | [public-api](public-api.md) |

## 三、生命周期

`Engine` 在 `await cadView.onLoad()` 之后才组装好；只有 `onLoad` 之后才能访问 `Engine.pcanvas / Engine.currentDoc / Engine.eventManager / Engine.undoManager / Engine.editor / Engine.view`。详见 [setup/onload-lifecycle](../setup/onload-lifecycle.md)。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/guide/architecture.md`、`vjcad/doc/command/api-reference.md`
- 示例：`vjcad/example/basic/01init.js`、`vjcad/example/basic/02onload.js`
