MxServiceCode CLI 命令参考
基于工程源码(
src/MxCommand.ts、src/sample/*.ts)整理。MxServiceCode 是 Node.js 命令行工程,入口mxapp.js,每次执行一个命令后进程退出(无守护进程)。
一、调用格式
<node可执行文件> mxapp.js <命令名> 参数1=值1 参数2=值2 [debug=1]- 内置运行时:Windows
bin\node.exe、Linux./node(位于工程目录下) - Linux 上可加
linux=1强制按 Linux 模式运行 - 输出:stdout 打印一行 JSON,成功时
code或ret为 0
二、命令总览(12 个)
| 命令 | 功能 |
|---|---|
| convert | ⚠️ 不可用(wgh 格式已废弃,见详解 1);DWG→mxweb 请直接调用 mxcadassembly |
| getcaddata | 提取图纸上的文字/块属性数据为 JSON |
| getPolylineTheSpecifiedLayer | 提取指定图层上所有多段线的顶点数据为 JSON |
| testParamDraw | 参数化绘图:线条/虚线/图块/图签/文字/填充 |
| testParamDrawTk | 参数化绘图:插入图框(A3)+ 图签(BT) |
| compare_dwg | 比较两个 DWG 文件的图块表内容是否一致 |
| frameCut | 按图框图块批量切图(⚠️ 依赖 1337 服务,独立版不提供,请用 frameCut2) |
| frameCut2 | 按图框图块批量切图(直接调用 mxcadassembly,推荐) |
| getAllLayer | 获取图纸全部图层信息为 JSON |
| margeDwg | 合并多张 DWG 到目标 DWG(可按图层过滤) |
| mxtest_getxdata | 调试示例:读取扩展数据、几何计算、求交(硬编码路径,勿用于生产) |
| Mx_Custom_ExportPdf | 整图导出 PDF(自动按图幅缩放,含图框定位信息) |
另有通用入口 fileparam(JSON 文件传参,见第五节)。
三、命令详解
1. convert —— DWG 转前端显示文件(不可用)
bin\node.exe mxapp.js convert file=t1.dwg- 参数:
file源 DWG 路径(相对路径相对于工程目录)
⚠️ 实测不可用:返回
{"code":-4,"message":"js程序异常,详细见日志"},日志为TypeError: this.imp.writeWebGLFile is not a function。原因:writeWebGLFile输出的 wgh 格式已废弃,新版原生模块已移除该函数;mxcad 前端只认 mxweb。替代方案(推荐):直接调用
mxcadassembly(见《部署与启动说明.md》第三节):js// 用工程内置 node 执行(CommonJS);源图纸放在转换程序目录下 const { execFileSync } = require('child_process'); const jsonStr = JSON.stringify({ srcpath: 't1.dwg', outname: 't1.mxweb', outpath: './out' }); const enc = encodeURIComponent(jsonStr); // 百分号编码,不是纯十六进制! const out = execFileSync('mxcadassembly.exe', ['[' + enc + ']'], { cwd: '<转换程序所在目录>', encoding: 'utf8', timeout: 180000 }); // 输出 {"code":0,"message":"ok"},生成 out\t1.mxweb(相对转换程序目录)注意:① 源码中该命令直接拼接
curPath + param.file,传绝对路径会拼出非法路径;替代方案用srcpath传绝对路径即可。②outpath目录必须预先存在(程序不自动创建,否则返回{"code":2,"message":"write file error"})。
2. getcaddata —— 图纸数据提取
bin\node.exe mxapp.js getcaddata file=t1.dwg outfile=t1.json- 参数:
file源 DWG;outfile输出 JSON 路径 - 行为:提取图中所有文字(TEXT)与块属性(INSERT 的 attributes),每项含文字内容、坐标(posx/posy)、所属图层
- 返回:
{"ret":0,"resultfile":"<输出文件>"} - ⚠️ 限制:仅提取 TEXT 与块属性,不含任何几何实体(直线/多段线/圆等)。需要几何数据请二开(见《Mx2DNode二开API参考.md》第九节范例)。输出为数组,每项含
layer等字段
3. getPolylineTheSpecifiedLayer —— 指定图层多段线提取
bin\node.exe mxapp.js getPolylineTheSpecifiedLayer file=t1.dwg outfile=t1.json [debug=1]- 行为:提取 LWPOLYLINE 实体中图层名匹配的多段线顶点序列(x/y/z/bulge)。图层名过滤值硬编码在
GetDwgData.ts中,使用前需按目标图纸修改 - 返回:
{"ret":0,"resultfile":"<输出文件>"} - ⚠️ 限制:① 只提取 LWPOLYLINE,不含 LINE 等其他几何;② 图层过滤值硬编码在
GetDwgData.ts,跨图纸使用前必须改源码并npm run build重新编译
4. testParamDraw —— 参数化绘图
bin\node.exe mxapp.js testParamDraw outfile=testdraw.dwg [debug=1]- 行为:基于空白模板绘制直线、虚线(自定义线型)、图块引用(tree.dwg)、文字(黑体)、图案填充(矩形路径)。绘图逻辑在
sample/ParamDraw.ts的TestDraw类,二开时替换此处绘图代码 - 返回:
{"ret":0}
5. testParamDrawTk —— 图框图签生成
bin\node.exe mxapp.js testParamDrawTk outfile=testdrawtk.dwg [debug=1]- 行为:插入图框(A3.dwg 的 A3 块)+ 图签(BT.DWG 的 BT 块)并填写图签属性文字。图框/图签 DWG 需与工程目录同级
- 返回:
{"ret":0}
6. compare_dwg —— 图纸比较
bin\node.exe mxapp.js compare_dwg file1=t1.dwg file2=t2.dwg- 行为:双向比较两图纸图块表中所有实体的对象差异(通过 handle 对齐)
- 返回:
{"ret":0}一致;非 0 表示存在差异(负值为对象缺失) - ⚠️ 限制:只比较图块表内容(块定义),不是整图几何比较
7. frameCut —— 按图框切图(1337 服务版,独立版不可用)
bin\node.exe mxapp.js frameCut file=testcut.dwg tkname="1横20200521" outtype=.pdf [debug=1]- 参数:
file源 DWG;tkname图框图块名前缀;outtype输出格式后缀(.pdf/.dwg);可选savefile输出前缀、colorPolicy - 行为:筛选块名以 tkname 开头的图块 → 按 Y 方向分行排序 → 逐个按外包矩形调用 1337 端口服务切图
- 独立版 MxServiceCode 不提供 1337 服务,此命令不可用;请使用
frameCut2(功能等价,见详解 8) - 返回(如有服务时):
{"code":0,"cutnum":n,"errornum":0}
8. frameCut2 —— 按图框切图(mxcadassembly 版,推荐)
bin\node.exe mxapp.js frameCut2 file=testcut.dwg tkname="1横20200521" outtype=.pdf width="5000" height="3000" [colorPolicy=mono]- 参数:
file、tkname、outtype(.pdf/.dwg/.mxweb);width/height输出尺寸;colorPolicy颜色策略 - 行为:同 frameCut 的筛选与排序,但直接本地调用
mxcadassembly执行cut_dwg切图,不依赖 1337 服务;outtype=.mxweb时先切 DWG 再转 mxweb - 返回:
{"code":0,"cutnum":n,"errornum":0,"out_files":[...]}
9. getAllLayer —— 图层信息提取
bin\node.exe mxapp.js getAllLayer file="A.dwg"- 行为:输出
<源文件名>_layers.json,包含每个图层的 name、colorIndex、color、off(是否关闭) - 返回:
{"ret":0,...} - ⚠️ 限制:只输出图层表信息,不含图层上的实体
10. margeDwg —— 图纸合并
bin\node.exe mxapp.js margeDwg file="mB.dwg" marge_file="mA.dwg" out_file="mC.dwg" marge_layer="['2306','2307']" [debug=1]- 参数:
file目标 DWG(被打开保留);marge_file要合并进来的 DWG(单个,或多个用 JSON 数组字符串['a.dwg','b.dwg']);out_file输出文件;marge_layer可选,只合并指定图层(JSON 数组字符串) - 返回:
{"code":0,"message":"ok"}
11. mxtest_getxdata —— 扩展数据调试
bin\node.exe mxapp.js mxtest_getxdata- 调试用示例:打开硬编码路径的 DWG,演示 xdata 读写、
explode分解、曲线面积(getArea)、两实体求交(intersectWith)。文件路径硬编码在源码中,仅作参考。 - ⚠️ 限制:文件路径硬编码,不可直接用于生产;仅作为 API 用法示例
12. Mx_Custom_ExportPdf —— 整图导出 PDF
bin\node.exe mxapp.js Mx_Custom_ExportPdf file="TkPdf.dwg" outfile="TkPdf22.pdf" pdf_width=1500 pdf_height=2500- 参数:
file源 DWG;outfile输出 PDF;pdf_width/pdf_heightPDF 尺寸(默认 1500x2500) - 行为:整图按图幅比例缩放输出 PDF(黑白),并计算图框(基于"版本/设计/制图"文字定位)在 PDF 中的坐标区间
- 返回:print_to_pdf 结果 +
tk、x1/y1/x2/y2坐标 - ⚠️ 限制:图框定位依赖图签内"版本/设计/制图"文字,图签不符时
tk定位可能失效
四、通用参数说明
- 路径参数:相对路径相对于 MxServiceCode 工程目录(
mxapp.js所在目录)。统一做法:把目标文件放工程目录、传相对路径 - ⚠️ 不要传绝对路径(实测):部分命令源码直接写
curPath + param.file字符串拼接(如getcaddata、getPolylineTheSpecifiedLayer),传绝对路径会拼出非法路径 colorPolicy取值:noPolicy(默认,保留原色)、mono(黑白)- 错误码约定:
0成功;1~8参数/文件错误;-1~-5程序/文件打开错误
五、fileparam —— JSON 文件传参模式
命令可用一个 JSON 文件代替命令行参数(适合参数复杂或含特殊字符的场景):
bin\node.exe mxapp.js fileparam filepath="testcut.dwg_param.json"JSON 文件内容:
json
{
"cmd": "frameCut2",
"file": "testcut.dwg",
"tkname": "1横20200521",
"outtype": ".pdf",
"width": "5000",
"height": "3000"
}cmd 字段指定实际执行的命令,其余字段即该命令的参数。
六、二开指引
- 新增命令:在
src/sample/下新建 .ts 编写处理函数(接收param对象,返回 JSON 对象),在src/MxCommand.ts的ReginstCommand()中MxProcessor.addCommand("命令名", 函数)注册,然后npm run build重新编译 - 全部绘图/数据 API 见《Mx2DNode二开API参考.md》
- 运行环境、日志、测试脚本见《部署与启动说明.md》
