事件类型
大约 7 分钟
事件类型
WebCAD 提供丰富的事件系统,用于监听和响应各类操作。
在线示例
| 示例 | 描述 | 链接 |
|---|---|---|
| 实体添加事件 | EntityAdded 事件监听 | 在线演示{target="_blank"} |
| 实体修改事件 | EntityModified 事件监听 | 在线演示{target="_blank"} |
| 选择变化事件 | SelectionChanged 事件监听 | 在线演示{target="_blank"} |
| 命令事件 | CommandStarted 和 CommandEnded 事件 | 在线演示{target="_blank"} |
| 文档事件 | DocumentOpened 和 DocumentSaved 事件 | 在线演示{target="_blank"} |
| 多段线点位与事件时序 | PLINE 绘制中 EntityAdded/EntityModified/CommandEnded 的区别 | 在线演示{target="_blank"} |
CadEvents 枚举
enum CadEvents {
// ===== 文档事件 =====
DocumentCreating = 'DocumentCreating', // 新建前(可取消)
DocumentCreated = 'DocumentCreated', // 新建后
DocumentOpening = 'DocumentOpening', // 打开前(可取消)
DocumentOpened = 'DocumentOpened', // 打开后
DocumentClosing = 'DocumentClosing', // 关闭前(可取消)
DocumentClosed = 'DocumentClosed', // 关闭后
DocumentSaving = 'DocumentSaving', // 保存前(可取消)
DocumentSaved = 'DocumentSaved', // 保存后
DocumentModified = 'DocumentModified', // 修改后
DocumentSwitched = 'DocumentSwitched', // 切换文档后
// ===== 实体事件 =====
EntityAdding = 'EntityAdding', // 添加前(可取消)
EntityAdded = 'EntityAdded', // 添加后
EntitiesAdding = 'EntitiesAdding', // 批量添加前
EntitiesAdded = 'EntitiesAdded', // 批量添加后
EntityModified = 'EntityModified', // 修改后
EntityErasing = 'EntityErasing', // 删除前(可取消)
EntityErased = 'EntityErased', // 删除后
EntitiesErasing = 'EntitiesErasing', // 批量删除前
EntitiesErased = 'EntitiesErased', // 批量删除后
// ===== 命令事件 =====
CommandStarting = 'CommandStarting', // 开始前(可取消)
CommandStarted = 'CommandStarted', // 开始后
CommandEnded = 'CommandEnded', // 结束后
CommandCancelled = 'CommandCancelled', // 取消后
// ===== 图层事件 =====
LayerAdding = 'LayerAdding', // 添加前(可取消)
LayerAdded = 'LayerAdded', // 添加后
LayerDeleting = 'LayerDeleting', // 删除前(可取消)
LayerDeleted = 'LayerDeleted', // 删除后
LayerModified = 'LayerModified', // 修改后
CurrentLayerChanged = 'CurrentLayerChanged', // 当前图层变更
// ===== 选择事件 =====
SelectionChanged = 'SelectionChanged', // 选择集变化
SelectionCleared = 'SelectionCleared', // 选择集清空
// ===== 视图事件 =====
ViewZoomed = 'ViewZoomed', // 缩放后
ViewPanned = 'ViewPanned', // 平移后
ViewRegenerated = 'ViewRegenerated', // 重绘后
// ===== 块事件 =====
BlockAdding = 'BlockAdding', // 添加前(可取消)
BlockAdded = 'BlockAdded', // 添加后
BlockDeleting = 'BlockDeleting', // 删除前(可取消)
BlockDeleted = 'BlockDeleted', // 删除后
BlockModified = 'BlockModified', // 修改后
// ===== 协作与版本控制事件 =====
// 服务端同步事件
DocumentUploading = 'DocumentUploading', // 上传文档前(可取消)
DocumentUploaded = 'DocumentUploaded', // 上传文档后
DocumentDownloading = 'DocumentDownloading', // 下载文档前(可取消)
DocumentDownloaded = 'DocumentDownloaded', // 下载文档后
DocumentSyncStatusChanged = 'DocumentSyncStatusChanged', // 同步状态变化
// 本地存储事件
DocumentCaching = 'DocumentCaching', // 保存到本地缓存前(可取消)
DocumentCached = 'DocumentCached', // 保存到本地缓存后
DocumentRestoring = 'DocumentRestoring', // 从本地缓存恢复前(可取消)
DocumentRestored = 'DocumentRestored', // 从本地缓存恢复后
DocumentCacheCleared = 'DocumentCacheCleared', // 本地缓存清理后
// 分支事件
BranchCreating = 'BranchCreating', // 创建分支前(可取消)
BranchCreated = 'BranchCreated', // 创建分支后
BranchSwitching = 'BranchSwitching', // 切换分支前(可取消)
BranchSwitched = 'BranchSwitched', // 切换分支后
BranchMerging = 'BranchMerging', // 合并分支前(可取消)
BranchMerged = 'BranchMerged', // 合并分支后
BranchDeleting = 'BranchDeleting', // 删除分支前(可取消)
BranchDeleted = 'BranchDeleted', // 删除分支后
// Patch 事件
PatchCreating = 'PatchCreating', // 创建 Patch 前(可取消)
PatchCreated = 'PatchCreated', // 创建 Patch 后
PatchApplying = 'PatchApplying', // 应用 Patch 前(可取消)
PatchApplied = 'PatchApplied', // 应用 Patch 后
PatchReverting = 'PatchReverting', // 撤销 Patch 前(可取消)
PatchReverted = 'PatchReverted', // 撤销 Patch 后
// 冲突事件
ConflictDetected = 'ConflictDetected', // 检测到冲突
ConflictResolving = 'ConflictResolving', // 解决冲突前(可取消)
ConflictResolved = 'ConflictResolved', // 解决冲突后
ConflictSkipped = 'ConflictSkipped', // 冲突被跳过
// ===== 插件事件 =====
PluginLoading = 'PluginLoading', // 插件开始加载
PluginLoaded = 'PluginLoaded', // 插件加载完成
PluginActivating = 'PluginActivating', // 插件开始激活
PluginActivated = 'PluginActivated', // 插件激活完成
PluginDeactivating = 'PluginDeactivating', // 插件开始停用
PluginDeactivated = 'PluginDeactivated', // 插件停用完成
PluginUnloading = 'PluginUnloading', // 插件开始卸载
PluginUnloaded = 'PluginUnloaded', // 插件卸载完成
PluginError = 'PluginError', // 插件发生错误
// ===== 右键菜单事件 =====
ContextMenuOpening = 'ContextMenuOpening', // 右键菜单打开前(可取消、可自定义)
ContextMenuOpened = 'ContextMenuOpened', // 右键菜单打开后
ContextMenuItemClicked = 'ContextMenuItemClicked', // 菜单项点击
// ===== UI 事件 =====
RibbonConfigChanged = 'RibbonConfigChanged' // Ribbon 配置变更
}事件分类
文档事件
| 事件 | 说明 | 可取消 |
|---|---|---|
DocumentCreating | 新建文档前 | 是 |
DocumentCreated | 新建文档后 | 否 |
DocumentOpening | 打开文档前 | 是 |
DocumentOpened | 打开文档后 | 否 |
DocumentClosing | 关闭文档前 | 是 |
DocumentClosed | 关闭文档后 | 否 |
DocumentSaving | 保存文档前 | 是 |
DocumentSaved | 保存文档后 | 否 |
DocumentModified | 文档修改后 | 否 |
DocumentSwitched | 切换当前文档后 | 否 |
实体事件
| 事件 | 说明 | 可取消 |
|---|---|---|
EntityAdding | 添加实体前 | 是 |
EntityAdded | 添加实体后 | 否 |
EntitiesAdding | 批量添加实体前 | 是 |
EntitiesAdded | 批量添加实体后 | 否 |
EntityModified | 实体修改后 | 否 |
EntityErasing | 删除实体前 | 是 |
EntityErased | 删除实体后 | 否 |
EntitiesErasing | 批量删除实体前 | 是 |
EntitiesErased | 批量删除实体后 | 否 |
命令事件
| 事件 | 说明 | 可取消 |
|---|---|---|
CommandStarting | 命令开始前 | 是 |
CommandStarted | 命令开始后 | 否 |
CommandEnded | 命令结束后 | 否 |
CommandCancelled | 命令取消后 | 否 |
图层事件
| 事件 | 说明 | 可取消 |
|---|---|---|
LayerAdding | 添加图层前 | 是 |
LayerAdded | 添加图层后 | 否 |
LayerDeleting | 删除图层前 | 是 |
LayerDeleted | 删除图层后 | 否 |
LayerModified | 图层属性修改后 | 否 |
CurrentLayerChanged | 当前图层切换后 | 否 |
选择事件
| 事件 | 说明 |
|---|---|
SelectionChanged | 选择集变化后 |
SelectionCleared | 选择集清空后 |
SelectionChangedEventArgs
| 属性 | 类型 | 说明 |
|---|---|---|
document | CadDocument | 所属文档 |
previousSelection | EntityBase[] | 之前的选择集 |
currentSelection | EntityBase[] | 当前的选择集 |
selections | EntityBase[] | 当前选择集(currentSelection 的别名) |
added | EntityBase[] | 新增的实体 |
removed | EntityBase[] | 移除的实体 |
视图事件
| 事件 | 说明 |
|---|---|
ViewZoomed | 视图缩放后 |
ViewPanned | 视图平移后 |
ViewRegenerated | 视图重绘后 |
块事件
| 事件 | 说明 | 可取消 |
|---|---|---|
BlockAdding | 添加块定义前 | 是 |
BlockAdded | 添加块定义后 | 否 |
BlockDeleting | 删除块定义前 | 是 |
BlockDeleted | 删除块定义后 | 否 |
BlockModified | 块定义修改后 | 否 |
协作与版本控制事件
这些事件用于处理多人协作、云端同步和版本管理场景。
服务端同步事件
| 事件 | 说明 | 可取消 |
|---|---|---|
DocumentUploading | 上传文档到服务端前 | 是 |
DocumentUploaded | 上传文档到服务端后 | 否 |
DocumentDownloading | 从服务端下载文档前 | 是 |
DocumentDownloaded | 从服务端下载文档后 | 否 |
DocumentSyncStatusChanged | 文档同步状态变化 | 否 |
本地存储事件
| 事件 | 说明 | 可取消 |
|---|---|---|
DocumentCaching | 保存到本地缓存前 | 是 |
DocumentCached | 保存到本地缓存后 | 否 |
DocumentRestoring | 从本地缓存恢复前 | 是 |
DocumentRestored | 从本地缓存恢复后 | 否 |
DocumentCacheCleared | 本地缓存清理后 | 否 |
分支事件
| 事件 | 说明 | 可取消 |
|---|---|---|
BranchCreating | 创建分支前 | 是 |
BranchCreated | 创建分支后 | 否 |
BranchSwitching | 切换分支前 | 是 |
BranchSwitched | 切换分支后 | 否 |
BranchMerging | 合并分支前 | 是 |
BranchMerged | 合并分支后 | 否 |
BranchDeleting | 删除分支前 | 是 |
BranchDeleted | 删除分支后 | 否 |
Patch 事件
| 事件 | 说明 | 可取消 |
|---|---|---|
PatchCreating | 创建 Patch 前 | 是 |
PatchCreated | 创建 Patch 后 | 否 |
PatchApplying | 应用 Patch 前 | 是 |
PatchApplied | 应用 Patch 后 | 否 |
PatchReverting | 撤销 Patch 前 | 是 |
PatchReverted | 撤销 Patch 后 | 否 |
冲突事件
| 事件 | 说明 | 可取消 |
|---|---|---|
ConflictDetected | 检测到冲突 | 否 |
ConflictResolving | 解决冲突前 | 是 |
ConflictResolved | 解决冲突后 | 否 |
ConflictSkipped | 冲突被跳过 | 否 |
插件事件
| 事件 | 说明 |
|---|---|
PluginLoading | 插件开始加载 |
PluginLoaded | 插件加载完成 |
PluginActivating | 插件开始激活 |
PluginActivated | 插件激活完成 |
PluginDeactivating | 插件开始停用 |
PluginDeactivated | 插件停用完成 |
PluginUnloading | 插件开始卸载 |
PluginUnloaded | 插件卸载完成 |
PluginError | 插件发生错误 |
右键菜单事件
| 事件 | 说明 | 可取消 |
|---|---|---|
ContextMenuOpening | 右键菜单打开前,可自定义菜单项 | 是 |
ContextMenuOpened | 右键菜单打开后 | 否 |
ContextMenuItemClicked | 菜单项被点击 | 否 |
详细用法请参考 右键菜单。
UI 事件
| 事件 | 说明 |
|---|---|
RibbonConfigChanged | Ribbon 配置变更,通知 RibbonBar 重新渲染 |
事件命名规范
WebCAD 事件遵循以下命名规范:
- Before 事件(以
-ing结尾):在操作执行前触发,通常可取消 - After 事件(以
-ed结尾):在操作完成后触发,不可取消 - Changed 事件:状态变化后触发
// Before 事件示例 - 可以取消操作
eventManager.on(CadEvents.DocumentSaving, (args) => {
if (!validateDocument()) {
args.cancel = true; // 取消保存操作
Engine.writeMessage('文档验证失败,取消保存');
}
});
// After 事件示例 - 用于通知或后续处理
eventManager.on(CadEvents.DocumentSaved, (args) => {
console.log('文档已保存:', args.document.name);
});下一步
- 事件使用 - 监听和处理事件