Skip to content

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_height PDF 尺寸(默认 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 字段指定实际执行的命令,其余字段即该命令的参数。

六、二开指引 ​

  1. 新增命令:在 src/sample/ 下新建 .ts 编写处理函数(接收 param 对象,返回 JSON 对象),在 src/MxCommand.ts 的 ReginstCommand() 中 MxProcessor.addCommand("命令名", 函数) 注册,然后 npm run build 重新编译
  2. 全部绘图/数据 API 见《Mx2DNode二开API参考.md》
  3. 运行环境、日志、测试脚本见《部署与启动说明.md》