engine
本文回答:
Engine是 vjcad 的全局静态对象;提供文档访问(currentDoc / pcanvas / undoManager / eventManager / editor / activeDocument / currentSpace / trans / view)、系统变量(CECOLOR / CLAYER / CELTSCALE / OSMODE / ORTHOMODE / GRIDMODE / OFFSETDIST)、实体操作(addEntities / eraseEntities)、用户输入(getPoint / getSelections / getReal / getInteger / getString / getKeyword)、视图(zoomExtents / zoomToEntities / regen)以及命令调度(editor.executerWithOp)。
一、常用属性
import { Engine } from 'vjcad';
Engine.pcanvas // 画布控制器
Engine.currentDoc // 当前文档
Engine.currentSpace // 当前空间(doc.currentSpace 的快捷)
Engine.activeDocument // 活动文档
Engine.undoManager // 撤销管理器
Engine.eventManager // 事件管理器
Engine.editor // 编辑器(命令调度)
Engine.trans // 坐标转换
Engine.view // 视图组件(coordsBar、openDbDoc 等)
Engine.editor.contextMenu // 右键菜单(挂在 editor 上,非 Engine 直属)
MCP 参考:vjcad/doc/command/api-reference.md、vjcad/doc/guide/architecture.md。
二、系统变量
Engine.CECOLOR // 当前绘图颜色(ACI 索引)
Engine.CELTSCALE // 当前线型比例
Engine.currentDoc.CLAYER // 当前图层名(⚠️ Engine.CLAYER 不存在;值是字符串)
Engine.OSMODE // 对象捕捉模式
Engine.ORTHOMODE // 正交模式(0/1,与 F8 状态栏按钮联动)
Engine.GRIDMODE // 栅格显示(0/1,与 F7 联动)
Engine.OFFSETDIST // 偏移距离
设置后状态栏按钮自动同步,例如 Engine.ORTHOMODE = 1 会让 Engine.view.coordsBar.funcButtons.orthomodeButton.isOn === true。MCP 参考:vjcad/example/ui/08statusbar.js、vjcad/doc/guide/architecture.md。
三、实体操作
Engine.addEntities(entities) // 推荐:自动记录撤销(勿再手动 added_undoMark)
Engine.eraseEntities(entities) // 删除(自动 undo)
Engine.addEntities(entities, { recordUndo: false }) // 不记撤销(第二参 EntityOperationOptions)
Engine.eraseEntities(entities, { recordUndo: false })
MCP 参考:vjcad/doc/command/api-reference.md、vjcad/doc/guide/architecture.md。
四、用户输入
Engine.getPoint(options) // PointInputOptions
Engine.getSelections(options) // SelectionInputOptions
Engine.getReal(options) // RealInputOptions
Engine.getInteger(options) // IntegerInputOptions
Engine.getString(options) // StringInputOptions
Engine.getKeyword(options) // KeywordInputOptions
详见 input/。
五、视图操作
Engine.zoomExtents() // 缩放到全图
Engine.zoomToEntities([entity1, entity2]) // 缩放到指定实体
Engine.regen() // 局部重生成(已修改实体)
Engine.regen(true) // 完全重绘
regen / redraw / render 区别详见 pcanvas。
六、命令调度
Engine.editor.executerWithOp('LINE') // 等价用户输入 LINE 回车
Engine.editor.executerWithOp('CIRCLE')
注册命令 + 字符串脚本调度详见 command/。
七、撤销
Engine.startUndoRecord('我的操作')
try {
// 多步操作
} finally {
Engine.endUndoRecord()
}
详见 undo/。
反例
- 在
await cadView.onLoad()之前调Engine.*:pcanvas得null(addEntities此时静默丢弃实体不报错),editor/trans/view得undefined,currentDoc得懒创建的孤儿文档——唯独eventManager是真单例提前可用。细分见 setup/onload-lifecycle。 - 大量循环里逐个
Engine.regen():性能差,应批量改完后调一次Engine.regen()。 - 把
Engine.pcanvas.addEntity(ent)当Engine.addEntities(ent)用:前者不会自动记录撤销,需要自己Engine.undoManager.added_undoMark([ent])。
参考(官方文档 MCP)
- 文档:
vjcad/doc/command/api-reference.md、vjcad/doc/guide/architecture.md - 示例:
vjcad/example/basic/02onload.js、vjcad/example/ui/08statusbar.js