QQ登录

只需一步,快速开始

快捷登录

登录 或者 注册 请先

UG爱好者

查看: 674|回复: 2
打印 上一主题 下一主题

[经典资料] 在线CAD中根据图框拆分DWG图纸和转成pdf打印

[复制链接]

中尉

Rank: 5Rank: 5

295

主题

314

帖子

3882

积分

活跃会员

跳转到指定楼层
楼主
发表于 2023-8-31 09:38:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前言
1.有的CAD图纸中有许多的图框,用户需要将图纸按图框进行拆分成,或拆分完成再自动转成PDF进行打印,桌面端的CAD软件可以实现,但WebCAD中如何根据图框拆分DWG图纸并转成pdf打印呢?
启动云图开发包Node服务
1.要将图纸框选的部分打印成pdf或者保存为dwg文件,就需要使用到云图开发包中提供的Node服务,首先下载云图开发包: https://www.mxdraw.com/download.html
2.启动梦想云图Node.JS服务: https://help.mxdraw.com/?pid=115
3.DWG图纸要在网页上显示需要安装转换程序,如果不熟悉原理,请查看快速入门(https://help.mxdraw.com/?pid=32)中的《如何在自己系统中浏览dwg文件》章节,如下图所示:
4.如果还有疑问可以查看:https://help.mxdraw.com/?pid=107中《mxdraw前端库预览图纸》章节,如下图:
前端选框选取
首先我们通过mxdraw库来预览图框,并且可以绘制一个选框来选择需要裁剪的内容,然后通过梦想云图NodeJS服务中对应的API接口进行处理,得到一个裁剪后的图纸或者pdf文件,前端代码如下:
  1. <font size="3" face="微软雅黑"><div style="height: 80vh; overflow: hidden;">

  2.     <canvas id="mxcad"></canvas>

  3. </div>



  4. import { MrxDbgUiPrPoint, MxFun, MxDbRect } from "mxdraw"

  5. MxFun.setIniset({

  6.   "EnableGripEidt": true,

  7. })



  8. MxFun.createMxObject({

  9.   canvasId: "mxcad", // canvas元素的id

  10.   // 转换后的cad图纸文件 实际访问的是../../demo/buf/$hhhh.dwg.mxb[index].wgh

  11.   cadFile: "./buf/hhhh.dwg"

  12. })

  13. // 绘制临时的选框, 然后通过回调函数 根据框选的CAD坐标 请求云图Node服务对于API完成本地的转PDF功能

  14. drawSelectBox((pt1, pt2) => {

  15.   const params = new URLSearchParams();

  16.   params.append('cmd', 'cutcad');

  17.   // file 参数对应的是要拆分的目标图纸文件, 这里D:/hhhh.dwg是指的后台服务 部署的主机D盘下的hhhh.dwg文件; out参数同理

  18.   params.append('param', `file=D:/hhhh.dwg out=D:/hhhh_1.pdf lbx=${pt1.x} lby=${pt1.y} rtx=${pt2.x} rty=${pt2.y}`);

  19.   fetch('http://localhost:1337/users/tools', {

  20.     method: 'POST',

  21.     headers: {

  22.       'Content-Type': 'application/x-www-form-urlencoded'

  23.     },

  24.     body: params.toString()

  25.   }).then(async (res) => {

  26.     const { code } = await res.json()

  27.     if(code === 0) {

  28.       alert("剪切成功")

  29.     }else {

  30.       alert("剪切失败")

  31.     }

  32.   }).catch((err) => {

  33.     console.error(err)

  34.   })

  35. })

  36. // 临时绘制一个选择框用于选择可以剪切的部分内容

  37. async function drawSelectBox(callback: (pt1, pt2) => void) {

  38.   const getPoint = new MrxDbgUiPrPoint()

  39.   getPoint.go(() => {

  40.     const pt1 = getPoint.value()

  41.     // 需要将THREE.JS坐标转文档坐标.

  42.     const cadPt1 = MxFun.docCoord2Cad(pt1.x, pt1.y, pt1.z)

  43.     getPoint.setBasePt(pt1);

  44.     const rect = new MxDbRect()

  45.     rect.color = "#f00"

  46.     rect.pt1 = pt1

  47.     getPoint.setUserDraw((currentPoint, pWorldDraw) => {

  48.       rect.pt2 = currentPoint

  49.       pWorldDraw.drawCustomEntity(rect)

  50.     })

  51.     getPoint.go(async () => {

  52.       const pt2 = getPoint.value()

  53.       const cadPt2 = MxFun.docCoord2Cad(pt2.x, pt2.y, pt2.z)

  54.       await callback(cadPt1, cadPt2)

  55.     })

  56.   })

  57. }</font>
复制代码
调用MxWebDwg2Jpg.exe 程序剪切图纸
我们把测试的图纸放在D盘下,该文件在demo示例(zip下载地址)的public 目录下,要对CAD图纸剪切,并将剪切结果输出为 pdf和 dwg 格式,需要用到云图开发包中名称为MxWebDwg2Jpg.exe的程序,具体位置如下:
MxDrawCloudServer\Bin\Release\tool\MxWebDwg2Jpg.exe

要正确启动它需要对应的参数首先需要一个cmd 这里我们的cmd就是 cutcad其次还需要一些参数, 这些参数统一存放在一个txt文件中, 比如现在在D盘创建一个叫cutcad_param.txt的文件内容如下:
file=D:/hhhh.dwg out=D:/1.pdf lbx=60009.152793 lby=42457.503649 rtx=120145.567345 rty=85507.693766

这里out参数可.dwg的图纸文件, 那么就会剪切成图纸,如下图:
现在我们直接进入到MxDrawCloudServer\Bin\Release\tool目录, 运行如下命令:
  1. <font size="3" face="微软雅黑">MxWebDwg2Jpg.exe cutcad fileparam=D:/cutcad_param.txt</font>
复制代码
cutcad_param.txt可以是任意格式的文件, 执行后如果命令行返回的结果中code0, 则说明执行成功, 否则失败.无论成功或者失败cutcad_param.txt都将被自动删除,如下图:
NodeJS后端实现拆分剪切pdf打印和dwg图纸
篇幅限制,更多的内容请查询梦想CAD控件

剪切后的实际效果图
篇幅限制,更多的内容请查询梦想CAD控件
需要注意的事项
* 部分图纸裁剪可能无效, 有问题的图纸可以反馈给我们
* 前端mxdraw库实现裁剪需要将坐标转成CAD文档坐标, 然后后端通过转换前的原图纸进行裁剪
* 云图开发包Node服务中的API接口只是简单的测试一下功能是可以正常使用的, 具体使用的时候需要根据实际需求进行修改
* 剪切的内容可以通过out参数 来存放在一个pdf格式或者dwg格式的文件中

Demo源码:

有奖推广贴子: 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

 
 
QQ:1359218528
工作时间:
9:00-17:00
 
微信公众号
手机APP
机械社区
微信小程序

手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )    论坛管理员QQ:1359218528

本站信息均由会员发表,不代表本网站立场,如侵犯了您的权利请联系管理员,邮箱:1359218528@qq.com  

Powered by UG爱好者 X3.2  © 2001-2014 Comsenz Inc. GMT+8, 2024-4-28 10:53

返回顶部