CAD 图纸操作 · 后端 MxServiceCode 指南
适用范围:服务端处理 CAD 图纸(Node.js 命令行:格式转换、数据提取、参数化绘图生成、切分合并、批量导出)。 路由规则见 入口指引;前端操作见 前端 mxcad 指南。
目录
一、MxServiceCode 是什么
MxServiceCode 是一个独立的 Node.js 命令行工程,用于在后台处理 CAD 图纸文件:打开/保存 DWG、格式转换、数据提取、参数化绘图生成新图纸、按图框批量切图、合并比较、导出 PDF 等。
工作方式:命令行调用,执行完即退出,无守护进程,无需启动任何服务。入口是 mxapp.js,每次执行一个命令,stdout 输出一行 JSON 结果;工程内置 Node 运行时,不依赖系统 Node。
后端服务 zip 的内容(同时含后端服务与格式转换程序 mxcadassembly,即完整超集;若只需转换程序可改下单独 MxConvert 包,见 入口指引"链接清单"):
Windows(后端服务包解压后只有一个顶层目录 MxServiceCode_TryVersion\,其下两个子目录):
MxServiceCode_TryVersion\ ← 解压后的顶层目录(与 zip 同名)
├── MxServiceCode\
│ ├── NODE.JS后台程序开发.doc ← 官方教程:教如何基于本工程做后台开发(不是 API 文档)
│ ├── MxServiceCode.sln ← 解决方案文件
│ └── MxServiceCode\ ← 工程目录(所有命令在此目录执行)
│ ├── bin\node.exe ← 内置 Node 运行时
│ ├── Mx2DNode.node ← 原生模块(核心 CAD 能力)
│ ├── mxapp.js ← 入口(命令行)
│ ├── package.json ← npm run build 编译
│ ├── src\ ← TS 源码(mxcad\ 为 API 类,sample\ 为功能示例,MxCommand.ts 为命令注册)
│ ├── test.bat ← 测试脚本
│ ├── empty_template.dwg ← 空白模板
│ ├── A3.dwg / BT.DWG ← 图框 / 图签示例图块
│ └── t1.dwg / tree.dwg ← 测试图纸
└── MxCAD\
└── Release\ ← 格式转换程序目录(mxcadassembly.exe + fonts\ + 运行依赖等)Linux(后端服务包解压后只有一个顶层目录 MxServiceCode_TryVersion\,其下两个子目录):
MxServiceCode_TryVersion\ ← 解压后的顶层目录(与 zip 同名)
├── MxServiceCode\
│ ├── NODE.JS后台程序开发.doc ← 官方教程
│ └── MxServiceCode\ ← 工程目录(无 .sln;内置运行时为 node 而非 bin\node.exe,
│ 另含 start_demo_MxServiceCode.sh、start_demo_systemlib_MxServiceCode.sh、Linux启动说明.txt)
└── Linux\
└── MxCAD\ ← 格式转换程序目录(mxcadassembly + fonts\ + 运行依赖等)二、程序获取与目录结构
2.1 下载与放置(固定临时路径,只下载一次,跨会话复用)
下载地址以 入口指引 的"链接清单"为准(按目标机器平台取"后端服务"对应行;Linux 包为 Ubuntu 20.04 x86_64 构建)。试用版,注意授权有效期。
固定临时路径:Windows = %TEMP%\MxCAD\,Linux = /tmp/MxCAD/。按 入口指引 的排查步骤执行:先判断任务需要什么(仅转换程序 / 需要后端服务),再查看临时路径下有什么——什么都没有 → 按需要下载对应 zip(只需转换程序 → 单独 MxConvert 包;需要后端服务 → MxServiceCode 包,内含转换程序)解压到临时路径;只有转换程序 → 仅需转换程序时做过期检测(见《部署与启动说明.md》)即可用,需要后端时清空重下后端包;已解包后端包 → 做过期检测 + 完整性验证,不完整清空重下。重新下载前必须先清空临时路径(各包目录结构固定,后端包是完整超集)。不要扫描用户机器其他目录;系统清理临时目录后重新下载即可。
所有命令都在临时路径下的 MxServiceCode\MxServiceCode(工程目录)中执行。
2.2 基本用法(Linux 首次使用需先配置权限)
chmod 777 start_demo_MxServiceCode.sh
./start_demo_MxServiceCode.sh # 脚本内已完成 node、Mx2DNode.node、mxcadassembly 等的 chmod出错时改用 ./start_demo_systemlib_MxServiceCode.sh(使用 systemLib 目录下的原生库)。
⚠️ 内置 Node 版本限制(实测):
bin\node.exe为 v10.9.0,仅支持 CommonJS——ESM(import语法 /.mjs)直接报SyntaxError;也没有fetch、可选链等新特性。用内置 node 写辅助脚本一律用 CommonJS(require)+.js;需要 ESM 时改用系统 Node。
三、本地参考文档(必读)
| 文档 | 内容 | 何时读 |
|---|---|---|
| MxServiceCode命令参考.md | 12 个 CLI 命令完整参考(参数/返回值/调用示例)+ fileparam JSON 传参 + 新命令注册方法 | 调用现成命令时 |
| Mx2DNode二开API参考.md | 后台参数化绘图/数据提取全部 API(Mx2DDraw、MxBackstage、McDbDatabase、McDb* 实体、选择集、几何对象) | 二开新命令/定制逻辑时 |
| 部署与启动说明.md | 目录结构、调用方式、Linux 权限、mxcadassembly 独立调用与有效期检测、日志、二开工作流 | 部署/排错时 |
四、任务→命令选型速查
调用任何现成命令前,先对照本表确认"该命令的契约是否覆盖需求"——命令名不是选型依据。 现成命令不覆盖时直接走二开(见《Mx2DNode二开API参考.md》第九节范例),不要拿功能不符的命令"跑一下试试"。
| 想做的事 | 走哪条路 | 备注 |
|---|---|---|
| 提取文字 / 块属性 | getcaddata(现成) | ⚠️ 仅 TEXT + INSERT 属性,不含任何几何实体 |
| 提取指定图层的多段线顶点 | getPolylineTheSpecifiedLayer(现成) | ⚠️ 图层名硬编码在 GetDwgData.ts,跨图纸使用必须先改源码重编译 |
| 提取直线 / 圆 / 其他几何实体数据 | 二开 | 无现成命令;范例见《Mx2DNode二开API参考.md》第九节(modelSpace().getAllEntity() + instanceof McDbXxx) |
| 提取图层清单 | getAllLayer(现成) | 输出 <文件名>_layers.json |
| DWG→mxweb 转换 | mxcadassembly 独立调用 | ⚠️ convert 命令已废弃不可用;outpath 目录必须预先存在 |
| 切图(按图框批量) | frameCut2(现成) | ⚠️ frameCut(v1)依赖 1337 服务,独立版不可用 |
| 整图导出 PDF | Mx_Custom_ExportPdf(现成) | 自动按图幅缩放 |
| 合并多张 DWG | margeDwg(现成) | 可按图层过滤 |
| 比较两图纸图块表 | compare_dwg(现成) | |
| 参数化绘图(生成新图纸) | 二开(testParamDraw 可当起点模板) | 见《Mx2DNode二开API参考.md》第二、九节 |
| 读/写扩展数据(xdata) | 二开 | mxtest_getxdata 仅调试示例(硬编码路径,勿用于生产) |
五、任务→文档检索指引
| 任务类型 | 应读文档 |
|---|---|
| 调用现成命令(转换/提取数据/切图/合并/导出 PDF/图层/比较图纸) | 《MxServiceCode命令参考.md》 |
| 二开:新增命令或定制处理逻辑 | 《Mx2DNode二开API参考.md》+ 工程 src\sample\ 示例代码 |
| 环境部署 / 启动失败 / Linux 权限 / 日志排查 | 《部署与启动说明.md》 |
| 格式转换参数(DWG/DXF/MXWEB/PDF/JPG、cut_dwg、print_to_pdf) | 官方《图纸转换程序使用教程》:链接 |
| 后台开发入门 | 随包附带的 NODE.JS后台程序开发.doc(教如何基于本工程开发,非 API 文档) |
六、能力边界说明(基于 1.0 试用版实测)
已具备能力
- DWG/DXF 打开与保存
- 格式转换:DWG→mxweb 等(经
mxcadassembly独立调用,见《部署与启动说明.md》第三节) - 参数化绘图:线、圆弧、圆、椭圆、点、文字、多行文字、图片、填充、图块、图框图签、五种标注
- 数据提取:文字、块属性、多段线、图层、xdata 扩展数据
- 选择集与过滤(按类型/图层/窗口/交越)
- 实体编辑:属性、xdata、分解(explode)、求交(intersectWith)、面积(getArea)
- 图纸合并(可按图层过滤)、按图框批量切图、图纸比较
- 导出:PDF、JPG、mxweb(前端显示格式)
- 系统变量读写(LTSCALE 等)
开发模式约定
- 后续新增 CAD 接口功能:由 AI 基于本工程开发(
src\sample\模式 + Mx2DNode API) - 修改源码后必须
npm run build重新编译(运行的是 .js)
限制
convert命令不可用:其输出的 wgh 格式已废弃,原生模块已移除writeWebGLFile(运行报code:-4)。mxcad 前端只认 mxweb,DWG→mxweb 直接用mxcadassembly(见《MxServiceCode命令参考.md》详解 1)frameCut(v1)命令依赖 1337 端口服务,独立版 MxServiceCode 不提供该服务,请使用frameCut2(直接调用 mxcadassembly,功能等价)- 试用版(TryVersion):注意授权有效期与打开次数限制
mxtest_getxdata等调试命令含硬编码路径,不可直接用于生产getPolylineTheSpecifiedLayer的图层过滤值硬编码在源码中,使用前需按目标图纸修改
