唯杰地图 logo唯杰地图
VJMAP
EN

overview

vjcad/references/event/overview.md 4.0 KB77 行
原文

本文回答:vjcad 事件系统 = Engine.eventManager(即 CadEventManager.getInstance()) + CadEvents 枚举。命名规范 = -ing 前置可取消 / -ed 后置不可取消 / -Changed 状态变更。常用事件分实体、文档、命令、图层、选择、视图、块、协作、UI 等大类。枚举里约一半事件当前版本没有派发点(订阅永不触发),见第三节"未派发"清单。

一、按子主题挑

想做的 子主题
监听 / 取消 / 暂停事件、查询监听器 listen
实体类事件(Adding/Added/Modified/Erasing/Erased) entity-events
文档类事件(Creating/Created/Modified/Switched 可用;Opening/Opened/Saving/Saved/Closing/Closed 未派发) document-events
命令类事件(CommandStarting/Started/Ended;Cancelled 未派发) command-events
PLINE / SPLINE 等交互式命令的事件时序 pline-timing

二、最小用法

import { Engine, CadEvents } from 'vjcad';

Engine.eventManager.on(CadEvents.EntityAdded, (args) => {
  console.log('实体已添加:', args.entity.type, 'id=', args.entity.id);
});

Engine.eventManager.on(CadEvents.SelectionChanged, (args) => {
  console.log('选择变化:', args.currentSelection.length, '个实体');
});

// DocumentSaving 不派发;阻止保存要在命令层拦截
Engine.eventManager.on(CadEvents.CommandStarting, (args) => {
  if (['QSAVE', 'SAVEAS', 'SAVESERVER', 'SAVELOCAL'].includes(args.commandName)
      && Engine.getEntities(e => e.isAlive).length === 0) {
    args.cancel = true;        // 阻止保存
  }
});

MCP 参考:vjcad/doc/event/index.md、vjcad/doc/event/event-usage.md。

三、事件大类速查

类别 当前版本会派发 枚举里有但未派发(订阅永不触发)
文档 DocumentCreating/Created/Modified/Switched DocumentOpening/Opened/Closing/Closed/Saving/Saved
实体 EntityAdding/Added、EntitiesAdding/Added、EntitiesErasing/Erased、EntityModified EntityErasing/EntityErased(删除只发批量版)
命令 CommandStarting/Started/Ended CommandCancelled(Esc 退出同样只发 CommandEnded)
图层 LayerAdding/Added/Deleting/Deleted、CurrentLayerChanged LayerModified
选择 SelectionChanged/Cleared —
视图 ViewZoomed/Regenerated ViewPanned
块 — BlockAdding/Added/Deleting/Deleted/Modified
协作 / 同步 — DocumentUploading/Uploaded/Downloading/Downloaded/SyncStatusChanged
本地存储 — DocumentCaching/Cached/Restoring/Restored/CacheCleared
分支 / Patch — Branch*、Patch*
冲突 — ConflictDetected/Resolving/Resolved/Skipped
输入 PointerDown/Move/Up/Cancel KeyDown/KeyUp/Wheel
插件 PluginLoading/Loaded/Activating/Activated/Deactivating/Deactivated/Unloading/Unloaded/Error —
右键菜单 ContextMenuOpening/Opened ContextMenuItemClicked
UI RibbonConfigChanged —
撤销栈 UndoStackChanged(undo/description) —

"会派发"一列以发布包 vjcad-lib.umd.js 中实际 emit(CadEvents.*) 的成员为准;其余成员只出现在枚举定义里。阻止保存/关闭在命令层用 CommandStarting 拦截 QSAVE/SAVEAS/SAVESERVER/SAVELOCAL/CLOSE;阻止删除用 EntitiesErasing。

MCP 参考:vjcad/doc/event/event-types.md。

四、命名规范

后缀 含义 可取消
-ing 操作前 是(设 args.cancel = true)
-ed 操作后 否
-Changed 状态变化后 否

MCP 参考:vjcad/doc/event/event-types.md。

参考(官方文档 MCP)

  • 文档:vjcad/doc/event/index.md、vjcad/doc/event/event-types.md、vjcad/doc/event/event-usage.md
  • 示例:vjcad/example/event/01entityadded.js ~ 06plinepoints.js