游乐游手机版
首页/AI教程/文章详情

网页CAD开发包支持后台处理DWG图纸与在线预览

时间:2026-08-06 14:51
MxServiceCode是基于Node js的CAD后端服务层,用于服务器端批量处理DWG文件。它由MxFun核心引擎、原生C++扩展及mxcad对象模型构成,通过命令模块实现灵活扩展。支持命令行和HTTP接口调用,可完成图纸数据提取、参数化绘图、图框裁剪、图层信息获取及图纸合并等操作,输出标准化JSON结果。

一、引言:什么是 MxServiceCode?

在Web CAD后台图纸处理场景中,许多开发者首先面临的核心难题是:如何在服务器端高效批量处理DWG文件?无论是格式转换、数据提取,还是批量操作,都离不开一个关键角色——MxServiceCode。

先梳理几个关键要点。MxServiceCode本质上是一个CAD后端服务层,位于云图开发包的MxDrawCloudServerBinMxServiceCode目录下。它并非一个完整的Web前端应用,而是以Node.js命令行(CLI)的形式,对底层DWG处理能力进行了轻量化封装。背后的技术支撑由三大核心模块构成:MxFun核心引擎、Native Addon(原生C++扩展插件),以及mxcad对象模型。

这种底层架构设计,确保了它在处理复杂CAD数据时兼具高效性与稳定性。在应用层面,其灵活性同样突出——所有后端功能均通过基于核心的“命令模块”来实现。这意味着,开发者可以像搭积木一样,通过编写或调用不同的命令模块,轻松定制并扩展服务器端的图纸处理逻辑。

二、MxServiceCode 项目结构详解

image-20260608115739107.png

为了方便二次开发时快速定位,下面结合实际工程目录结构,对MxServiceCode的主要模块进行详细拆解。项目采用标准的Node.js + TypeScript工程规范,核心板块如下:

1. bin 原生依赖与资源

bin目录是整个项目的“动力核心”。它并非普通的脚本文件夹,而是包含了项目运行所必需的底层二进制文件和资源。MxServiceCode之所以能够处理复杂的DWG图纸,完全依赖于该目录提供的原生环境支持。

  • Mx2DNode.node:核心的Native模块,是真正执行DWG解析与转换的底层引擎。
  • fonts:DWG字体文件,确保后台转换时文字显示正常,避免乱码问题。

2. src 核心源码层

这是项目的逻辑处理中枢,包含了从底层引擎封装到具体业务功能的所有TypeScript代码。根据职责不同,可划分为以下三个部分:

(1) mxcad 数据模型层

image-20260608151307159.png
该文件夹是对CAD对象模型的封装,将底层的Native DWG对象包装为Ja vaScript可访问的实体。其中包含大量核心类,例如:

  • McDbDatabase.ts:图纸数据库,用于管理图纸数据。
  • McDbEntity.tsMcDbPolyline.tsMcDbText.ts:各类图纸实体(多段线、文字、圆等)。
  • McDbLayerTable.ts:图层表,用于管理图纸的图层信息。

(2) sample 业务实现层

image-20260608152435467.png
这里是编写实际业务逻辑的地方,每个文件通常对应一个特定的图纸处理功能(如格式转换、图框切割等)。

如需新增功能,只需在此添加脚本并在MxCommand.ts中注册即可,模块化设计让扩展变得非常灵活。

(3) 其他核心 TS 文件

image-20260608153909205.png

除了上述子文件夹,src根目录下的文件构成了程序的骨架与控制中枢:

  • ini.js:初始化脚本。通常在程序启动最早期执行,用于设置环境变量或加载基础配置,确保后续模块正常加载。
  • MxFun.ts:底层桥梁。负责加载bin目录下的原生C++扩展(Mx2DNode.node),初始化CAD引擎环境,并提供日志记录、路径处理等通用工具函数。
  • MxProcessor.ts:命令调度中枢。负责解析外部传入的命令行参数,并将任务精准分发给对应的业务处理函数。
  • MxCommand.ts:命令注册表。在此定义所有可用指令名称(如convertframeCut)与具体实现函数的映射关系。
  • MxUtility.ts:通用工具库。提供项目中各模块复用的高频辅助方法,有效减少重复代码。
  • MxBackstageConvert.ts:图纸文件后台处理接口。封装底层DWG后台处理接口,负责打开/保存图纸、生成WebGL输出并提供后台数据库访问。

3. 根目录与基础配置

这是项目的入口和配置中心,决定了程序如何启动和运行。

  • mxapp.ts:程序的绝对入口。Node.js启动时首先执行此文件,负责初始化底层环境、解析命令行参数并触发命令执行。
  • package.json / tsconfig.json:项目的依赖管理清单与TypeScript编译配置文件。
  • test.bat / testlinux.sh:跨平台的测试脚本。分别用于Windows和Linux环境下快速验证功能是否正常。
  • .dwg (A3.dwg, BT.DWG, tree.dwg 等):项目自带的测试图纸文件,用于开发调试时的输入源。

4. doc 与 public 目录

  • doc:存放相关的技术文档或API说明,方便开发者查阅。
  • public:静态资源目录。如果MxServiceCode启动了简单的HTTP服务,这里的文件(如HTML预览页、CSS/JS资源)可以直接被外部访问。

三、命令执行链路

image-20260608163831986.png
理论部分介绍完毕,接下来看看实际运行流程。MxServiceCode的命令执行链路非常清晰,核心逻辑可概括为:命令行输入 → MxProcessor调度 → 业务实现 → 底层处理 → JSON输出。具体流程如下:

1. 程序启动与参数读取

在终端输入命令时,Node.js首先执行入口文件mxapp.ts。程序启动后,会立即调用MxFun.init()来初始化底层的C++运行环境。随后,它通过process.argv.slice(2)获取用户在命令行传入的所有参数。如果此时没有传入任何命令,程序会直接输出版本信息和日志路径并结束运行。

2. 命令分发与注册

检测到有效参数后,程序进入MxProcessor.do(args)进行命令分发。在分发之前,MxProcessor会先调用ReginstCommand()完成命令的注册。这个函数位于MxCommand.ts中,作用是将具体的命令名称(如convertframeCutmargeDwg等)与sample目录下的具体实现函数一一映射。

3. 参数解析与执行

MxProcessor支持两种参数解析模式:一种是标准的命令 名称=值形式,另一种是通过fileparam filepath=...读取外部JSON文件的形式。解析出命令名和参数后,MxProcessor会在已注册的命令表中查找对应的处理函数。如果找不到,直接返回“命令没定义”的错误;如果找到,则立即执行该函数。

4. 业务逻辑与底层交互

位于sample目录下的命令实现函数被触发后,开始处理具体的业务逻辑。它们通常会调用MxBackstageConvertMx2DDraw等模块来操作图纸。而这些模块在接收到指令后,会将请求传递给真正的底层核心——由MxFun加载的Native模块(Mx2DNode.node)。Native模块负责执行最耗时的DWG文件打开、实体遍历、数据转换等底层操作。

5. 统一结果输出

当Native层完成所有图纸处理任务后,结果会逐层向上返回给命令实现函数。命令函数会将处理结果封装成一个标准的对象(例如包含successmessage字段)。最后,MxProcessor.do()会使用console.log(JSON.stringify(...))将这个对象统一输出为JSON格式。这种标准化的输出方式,使得外部的Web服务或调用程序能够极其方便地读取和处理执行结果。

四、功能测试

在正式体验MxServiceCode强大的图纸处理能力之前,有一个关键的前置步骤。如果需要通过HTTP接口来调用这些功能,必须先启动云图开发包中的web服务,确保1337端口处于正常运行状态。

1. 启动 1337 端口服务(前置准备)

image-20260609112317507.png

MxDraw云图开发包提供了一键启动方式,无需手动配置复杂的后台环境:

  • Windows 系统:直接双击运行MxDrawCloudServer/Mx3dServer.exe,在弹出的窗口中点击“开始Web服务”。程序会自动启动1337端口的CAD核心引擎服务(由Bin/MxDrawServer/Windows/app.js驱动)。
  • Linux 系统:在终端执行启动脚本./start_demo.sh,该脚本会自动拉起1337端口的CAD核心服务。

2. 核心功能与参数详解

(1)获取DWG文件基础数据

读取DWG图纸的实体数据、版本、范围等元信息,并输出为标准JSON文件,便于前端解析与展示。

命令行调用

./bin/node mxapp.js getcaddata file=t1.dwg outfile=t1.dwg.json

接口调用

var data = {cmd:"getcaddata", file:"t1.dwg", outfile:"t1.dwg.json"};axios({method: "post", url: "localhost:1337/users/mxservicecode", data }).then((ret) => {console.log(ret.data) alert(JSON.stringify(ret.data))// 输出文件位置:Bin/MxServiceCode/MxServiceCode/t1.dwg.json}).catch((err)=>{ alert("网络错误") })
参数说明
cmd目标命令名
file源DWG文件名
文件路径:MxDrawCloudServerBinMxServiceCodeMxServiceCode
outfile生成的JSON数据文件名
文件保存路径:MxDrawCloudServerBinMxServiceCodeMxServiceCode

(2)后台参数化绘图

无需人工干预,程序打开空白模板,根据预设逻辑执行绘图操作(如绘制特定图形、标注等),并生成新的DWG文件。

命令行调用

./bin/node mxapp.js testParamDraw outfile=testdraw.dwg debug=1

接口调用

var data = {cmd:"testParamDraw", //cmd:"testParamDrawTk", outfile:"testdraw.dwg",};axios({method: "post", url: "localhost:1337/users/mxservicecode", data }).then((ret) => {console.log(ret.data) alert(JSON.stringify(ret.data))// 输出文件位置:Bin/MxServiceCode/MxServiceCode/testdraw.dwg}).catch((err)=>{ alert("网络错误") })
参数说明
cmd目标命令名
outfile生成的新DWG文件的保存路径
debug可选,调试模式开关。值为1时表示开启调试模式(通常会输出更多日志信息)

(3)根据图框名裁剪 DWG 到 PDF

这是非常实用的出图功能。程序会自动在图纸中搜索指定名称的图框(Block),识别其范围,并将图框内的图形内容批量导出为PDF、图片或其他格式。

命令行调用

./bin/node mxapp.js frameCut2 file=D:/Test/testcut.dwg tkname="AAA" outtype=.pdf

接口调用

var data = {cmd:"frameCut2", file:"D:/Test/testcut.dwg", tkname:"AAA", outtype:".pdf", //width:"1000" //height:"1000"};axios({method: "post", url: "localhost:1337/users/mxservicecode", data }).then((ret) => {console.log(ret.data) alert(JSON.stringify(ret.data))}).catch((err)=>{ alert("网络错误") })
参数说明
cmd目标命令名
file源DWG文件路径
tkname需要裁剪的图框名称(即Block的名字)
outtype指定输出文件的格式,例如.pdf.mxweb
width / height指定输出pdf的宽度和高度
colorPolic颜色策略。例如设置为mono表示输出黑白

(4)获取 DWG 文件图层信息

专门用于分析图纸结构,读取DWG的图层表(LayerTable),提取所有图层的名称、颜色、线型等属性,并输出图层列表,默认输出文件名为原文件名_layers.json

命令行调用

./bin/node mxapp.js getAllLayer file="D:/Test/A.dwg"

接口调用

var data = {cmd:"getAllLayer", file:"t1.dwg",};axios({method: "post", url: "localhost:1337/users/mxservicecode", data }).then((ret) => {console.log(ret.data) alert(JSON.stringify(ret.data))// 输出文件位置:Bin/MxServiceCode/MxServiceCode/t1.dwg_layers.json}).catch((err)=>{ alert("网络错误") })
参数说明
cmd目标命令名
file源DWG文件的路径

(5)合并图纸

读取多张DWG图纸的数据库,并将读取到的数据库合并到目标图纸数据库中,实现图纸的批量合并与拼接。

命令行调用

./bin/node mxapp.js margeDwg file="D:/Test/mB.dwg" marge_file="D:/Test/mA.dwg" out_file="D:/Test/mC.dwg" marge_layer="['2306','2307']" debug=1

接口调用

var data = {cmd:"margeDwg", file:"D:/Test/mB.dwg", marge_file:"['D:/Test/mA.dwg']", out_file:"D:/Test/mC.dwg", marge_layer:"['2306','2307']",};axios({method: "post", url: "localhost:1337/users/mxservicecode", data }).then((ret) => {console.log(ret.data) alert(JSON.stringify(ret.data))}).catch((err)=>{ alert("网络错误") })
参数说明
cmd目标命令名
file目标DWG文件(被合并到的主文件)
marge_file要合并的DWG文件,支持单个路径或JSON数组
out_file合并后输出DWG文件
marge_layer(可选)要合并的图层数组,格式类似['layer1','layer2']
来源:https://developer.aliyun.com/article/1752393
上一篇OSS对象标签、保留状态与生命周期规则清理AI临时文件 下一篇程序员自救转型:从PHP到AI+Golang前端远程下拉输入组件
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CAD零基础入门教程:坐标输入、图层管理与基础绘图命令
AI教程 · 2026-09-01

CAD零基础入门教程:坐标输入、图层管理与基础绘图命令

本文面向CAD零基础学习者,系统讲解坐标输入、图层管理与基础绘图命令的核心用法。通过分步实操与常见问题排查,帮助新手建立精确绘图习惯,掌握规范出图的基础能力。

CAD从入门到项目交付:绘图、标注、图块与实战工作流
AI教程 · 2026-09-01

CAD从入门到项目交付:绘图、标注、图块与实战工作流

掌握CAD的核心在于建立“画得准、标得清、复用快、交付稳”的工作流。本文提供从环境设置、高频命令组合、标注规范、图块标准化到项目分阶段交付的完整路径,帮助初学者避免常见返工陷阱,独立完成可检查、可复用、可打印的工程图纸。

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤
AI教程 · 2026-09-01

Claude Code 登录指南:个人、Teams 与企业账号区分与授权步骤

本文详细解析 Claude Code 登录前的账号类型区分方法,涵盖个人订阅、Teams 席位与企业 Enterprise 席位的授权路径差异。提供终端登录命令、环境变量排查及常见异常处理步骤,帮助用户快速完成正确授权并避免登录路径混淆。

Claude Code 文件修改前的权限模式配置与命令审批指南
AI教程 · 2026-09-01

Claude Code 文件修改前的权限模式配置与命令审批指南

本文详细介绍Claude Code在修改文件前的权限模式配置方法,包括defaultMode可选值、permissions allow与deny规则设置、多层级配置文件管理以及 status验证技巧,帮助开发者安全高效地使用AI编程助手。

Claude Code接入VS Code后先测扩展和终端命令
AI教程 · 2026-09-01

Claude Code接入VS Code后先测扩展和终端命令

在VS Code中接入Claude Code后,建议优先验证扩展面板与集成终端两条入口。本文提供标准检查顺序、关键命令与常见故障排查路径,帮助你快速确认环境就绪,避免后续开发受阻。