唯杰地图 logo唯杰地图
VJMAP
EN

engine

vjcad/references/core/engine.md 4.2 KB103 行
原文

本文回答: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