网页CAD开发包服务器后台处理图纸(MxServiceCode)

网页CAD开发包服务器后台处理图纸(MxServiceCode)
一、引言什么是 MxServiceCode在开发 Web CAD 应用时我们经常会遇到一些需要在服务器后台处理图纸的需求比如批量转换格式、提取图纸数据等。这时候云图开发包中的MxServiceCode就派上大用场了。简单来说MxServiceCode 是一个典型的 CAD 后端服务层它位于云图开发包中的MxDrawCloudServer\Bin\MxServiceCode目录下。它不是一个完整的 Web 前端应用而是以 Node.js 命令行CLI的形式对底层的 DWG 处理能力进行了轻量化的封装。它的核心技术由三大基石构成MxFun 核心引擎、Native Addon原生 C 扩展插件以及 mxcad 对象模型。这种底层架构设计保证了它在处理复杂 CAD 数据时的高性能与稳定性。而在应用层面上它非常灵活所有的后端功能都是由基于该核心的“命令模块”来提供的。这意味着开发者可以像搭积木一样通过编写或调用不同的命令模块轻松定制和扩展服务器端的图纸处理逻辑。二、MxServiceCode 项目结构介绍为了让大家在二次开发时能“找对门”我们结合实际的工程目录结构对 MxServiceCode 主要部分进行详细拆解。该项目采用标准的 Node.js TypeScript 工程规范核心分为以下几个板块1. bin 原生依赖与资源bin目录是整个项目的“动力心脏”它并非普通的脚本文件夹而是包含了项目运行所必需的底层二进制文件和资源。MxServiceCode 之所以能处理复杂的 DWG 图纸完全依赖于该目录提供的原生环境支持。Mx2DNode.node核心的 Native 模块真正执行 DWG 解析与转换的底层引擎。fontsDWG 字体文件确保后台转换时文字不乱码。2. src 核心源码层这是项目的逻辑处理中心包含了从底层引擎封装到具体业务功能的所有 TypeScript 代码。根据职责不同可划分为以下三个部分(1) mxcad 数据模型层这个文件夹是 CAD 对象模型的封装将底层的 Native DWG 对象包装成了 JavaScript 可访问的实体。里面包含了大量的核心类例如McDbDatabase.ts图纸数据库。McDbEntity.ts、McDbPolyline.ts、McDbText.ts各类图纸实体如多段线、文字、圆等。McDbLayerTable.ts图层表用于管理图纸的图层信息。(2) sample 业务实现层这里是编写实际业务逻辑的地方每个文件通常对应一个特定的图纸处理功能如格式转换、图框切割等。若需新增功能只需在此添加脚本并在MxCommand.ts中注册即可模块化设计使得扩展非常灵活。(3) 其他核心 TS 文件除了上述子文件夹外src根目录下的文件构成了程序的骨架与控制中枢ini.js初始化脚本。通常在程序启动最早期执行用于设置环境变量或加载基础配置确保后续模块正常加载。MxFun.ts底层桥梁。负责加载bin目录下的原生 C 扩展Mx2DNode.node初始化 CAD 引擎环境并提供日志记录、路径处理等通用工具函数。MxProcessor.ts命令调度中枢。负责解析外部传入的命令行参数并将任务精准分发给对应的业务处理函数。MxCommand.ts命令注册表。在这里定义所有可用的指令名称如convert、frameCut与具体实现函数的映射关系。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 资源可以直接被外部访问。三、命令执行链路理解了项目结构后我们需要深入探究 MxServiceCode 是如何处理一次完整请求的。它的命令执行链路非常清晰核心逻辑可以概括为命令行输入 → MxProcessor 调度 → 业务实现 → 底层处理 → JSON 输出。具体流程如下1. 程序启动与参数读取当我们在终端输入命令时Node.js 首先会执行入口文件mxapp.ts。程序启动后会立即调用MxFun.init()来初始化底层的 C 运行环境。随后它会通过process.argv.slice(2)获取用户在命令行传入的所有参数。如果此时没有传入任何命令程序会直接输出版本信息和日志路径并结束运行。2. 命令分发与注册当检测到有效参数后程序会进入MxProcessor.do(args)进行命令分发。在分发之前MxProcessor会先调用ReginstCommand()完成命令的注册。这个函数位于MxCommand.ts中它的作用是将具体的命令名称如convert、frameCut、margeDwg等与sample目录下的具体实现函数一一映射。3. 参数解析与执行MxProcessor支持两种参数解析模式一种是标准的命令 名称值形式另一种是通过fileparam filepath...读取外部 JSON 文件的形式。解析出命令名和参数后MxProcessor会在已注册的命令表中查找对应的处理函数。如果找不到会直接返回“命令没定义”的错误如果找到则立即执行该函数。4. 业务逻辑与底层交互位于sample目录下的命令实现函数被触发后会开始处理具体的业务逻辑。它们通常会调用MxBackstageConvert或Mx2DDraw等模块来操作图纸。而这些模块在接收到指令后会将请求传递给真正的底层核心——由MxFun加载的 Native 模块Mx2DNode.node。Native 模块负责执行最耗时的 DWG 文件打开、实体遍历、数据转换等底层操作。5. 统一结果输出当 Native 层完成所有图纸处理任务后结果会逐层向上返回给命令实现函数。命令函数会将处理结果封装成一个标准的对象例如包含success和message字段。最后MxProcessor.do()会使用console.log(JSON.stringify(...))将这个对象统一输出为 JSON 格式。这种标准化的输出方式使得外部的 Web 服务或调用程序能够极其方便地读取和处理执行结果。四、 功能测试在正式体验 MxServiceCode 强大的图纸处理能力之前有一个关键的前置步骤如果需要通过 HTTP 接口来调用这些功能必须先启动云图开发包中的web服务确保 1337 端口处于正常运行状态。1. 启动 1337 端口服务前置准备MxDraw 云图开发包提供了极其简便的一键启动方式您无需手动配置复杂的后台环境Windows 系统直接双击运行MxDrawCloudServer/Mx3dServer.exe在弹出的窗口中点击“开始Web服务”。程序会自动启动 1337 端口的 CAD 核心引擎服务由Bin/MxDrawServer/Windows/app.js驱动。Linux 系统在终端执行启动脚本./start_demo.sh该脚本会自动拉起 1337 端口的 CAD 核心服务。便捷提示服务启动后您可以直接在浏览器访问http://localhost:1337/servertest。这是一个官方提供的可视化测试页面您可以在页面上直接点击按钮来测试 DWG 转换、PDF 导出等核心接口无需编写任何代码。2. 核心功能与参数详解1获取DWG文件基础数据读取 DWG 图纸的实体数据、版本、范围等元信息并输出为标准 JSON 文件便于前端解析与展示。命令行调用./bin/node mxapp.js getcaddata filet1.dwg outfilet1.dwg.json接口调用var data { cmd:getcaddata, file:t1.dwg, outfile:t1.dwg.json }; axios({ method: post, url: http://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 文件名 文件路径MxDrawCloudServer\Bin\MxServiceCode\MxServiceCodeoutfile生成的 JSON 数据文件名 文件保存路径MxDrawCloudServer\Bin\MxServiceCode\MxServiceCode2后台参数化绘图无需人工干预程序打开空白模板根据预设逻辑执行绘图操作如绘制特定图形、标注等并生成新的 DWG 文件。命令行调用./bin/node mxapp.js testParamDraw outfiletestdraw.dwg debug1接口调用var data { cmd:testParamDraw, //cmd:testParamDrawTk, outfile:testdraw.dwg, }; axios({ method: post, url: http://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 fileD:/Test/testcut.dwg tknameAAA outtype.pdf width5000 height3000接口调用var data { cmd:frameCut2, file:D:/Test/testcut.dwg, tkname:1横20200521, outtype:.pdf, //colorPolicy:mono //width:1000 //height:1000 }; axios({ method: post, url: http://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 fileD:/Test/A.dwg接口调用var data { cmd:getAllLayer, file:t1.dwg, }; axios({ method: post, url: http://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 fileD:/Test/mB.dwg marge_fileD:/Test/mA.dwg out_fileD:/Test/mC.dwg marge_layer[2306,2307] debug1接口调用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: http://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]