## CAD Viewer 组件说明 该组件旨在提供一个Viewer以预览、下载、编辑、打开DWG等通用格式的CAD文件。 ### 快速开始 ```vue ` ``` ### Prop解读 详见`/@/components/CADViewer/src/CADViewer.vue` ### 实现原理 通过iframe嵌入即成的主体应用,编写客制化的操作栏并下发指令对其进行操作。可以通过[前期文档](https://mxcad.github.io/mxcad_docs/zh/7.%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/1.MxCAD%20APP%E5%BA%94%E7%94%A8%E9%9B%86%E6%88%90.html)了解更多。 有了主体应用(mxcad app)后,使用 postMessage 技术与其通信以下达指令即可完成操作。需要额外说明的,预设的某些指令可能不足以满足需求,此时需要在 mxcad app 中修改源码以添加客制化指令。本组件中的 MKY_Download_DWG、MKY_Open_DWG 即是客制化指令,具体细节参考[实现细节](#关于操作配置及其实现细节)。 对于操作栏,使用时首先应该向`/@/components/CADViewer/src/operationMap.ts`里注册操作配置。具体说明见`/@/components/CADViewer/src/types`和`/@/components/CADViewer/src/operationMap.ts` ### 关于操作配置及其实现细节 阅读完[实现原理](#实现原理)里操作相关的内容后,我们了解了如何注册操作配置,但对于如何完整的实现还不清楚,那么它的细节如下: 1. 所支持的mxcad app指令在`/public/mxcad/mxQuickCommand.json`中可以查阅。 2. 如果没有发现可用的指令,需要自行在 mxcad app 的源码中实现指令。 3. 实现指令后,使用`MxFun.addCommand`添加指令到 mxcad app 中。 4. 配合着该指令的实现,在对应操作里实现业务。 这里以 MKY_Open_DWG 举例,这个指令不在 mxcad app 的默认指令集中,我们需要手动添加它,步骤如下: 1. 在 mxcad app 的源码中,找到添加 cadfile 相关指令的文件 `mxcad_app/2d/MxCAD/src/cadfile.ts`。 2. 添加指令,该指令将打开一个 .mxweb 文件,需要提供文件的网络路径作为参数,代码就像这样: ```ts /** 打开指定的文件 */ export async function MKY_Open_Mxweb({ param }: { param: string }) { MxCpp.getCurrentMxCAD().openWebFile(param); } ``` 3. 为 mxcad app 注册该指令: ```ts MxFun.addCommand('MKY_Open_Mxweb', MKY_Open_Mxweb); ``` 4. 在项目中更新 mxcad app,即将其打包后把新的文件`mxcad_app/2d/dist/plugins/test.js`、`mxcad_app/2d/dist/plugins/test.js.map`替换到项目的`public/mxcad/plugins`中。 5. 注册操作配置,使用该指令: ```ts operationMap.set('MKY_Open_Mxweb', { name: 'MKY_Open_Mxweb', alias: '打开DWG文件', component: OpenFile, on: { select: (file: File) => { processFile(file).then((path) => { postMessage('MKY_Open_Mxweb', path); }); }, }, }); ``` ### 关于钩子方法 钩子方法本质上和操作配置的实现细节一致,就是在 mxcad_app 中发送消息,我们接受到消息后执行钩子函数。目前仅支持为事件注册单个钩子 ### 其他 上文中提到的 mxcad app 在[前期文档](https://mxcad.github.io/mxcad_docs/zh/7.%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/1.MxCAD%20APP%E5%BA%94%E7%94%A8%E9%9B%86%E6%88%90.html)中下载(不会读到这还没看这个文档吧?)。 关于客制化指令的实现未在git上同步。需要添加了客制化指令的项目源码的可以联系@houzekong。 全文到此结束。