明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 571|回复: 0

[CAD梦想画图] 在线CAD,网页直接浏览编辑CAD(WEB CAD SDK)

[复制链接]
发表于 2020-12-21 17:25 | 显示全部楼层 |阅读模式
本帖最后由 MxDraw 于 2023-10-7 16:19 编辑

简介
提示:目前提供两种在网页中浏览编辑CAD图纸方案,详细说明见:https://help.mxdraw.com/?pid=46
提示:MxDraw云图在线API教程https://demo.mxdraw3d.com:3562/mxdrawcloud/index.html
提示:MxDraw云图github:https://github.com/mxcad
全新在线CAD平台,基于JavaScript、WebGL、C++、Node.js、Three.js技术,前台使用html5方式,在线处理二维、三维CAD图纸。可用于图纸管理、交流、批注、信息提取、三维展示等场景,支持dwg,dxf,dwf等文件格式,后台使用高效C++程序开发,异步多线程、多进程架构。平台前后台都提供js语言开发接口,开发人员就只需要会JS语言,就可以快速搭建自己的在线CAD绘图平台。该系统可以在Windows、Linux、Android、iOS等系统上使用,真正一份代码,全平台支持。
重要提示:使用最新的chrome浏览器,或edge浏览器访问如下网址

1)在线演示网址1:
https://www.mxdraw3d.com/sample/vuebrowse/
2)在线MxCAD
https://demo.mxdraw3d.com:3000/mxcad/  
3)CAD与GIS结合演示网址,请使用chrome,或edge浏览器:
https://www.mxdraw3d.com/sample/mx-vuemap/?cmd=Mx_CADGISDemo
4)MxCAD云图:
https://www.mxdraw3d.com/
5)MxCAD云图图库:
https://www.mxdraw3d.com/drawinglibrary.html
6)MxDraw npm 包在线帮助:
https://mxcadx.gitee.io/mxdraw_docs/start/abstract.html#%E6%A6%82%E8%BF%B0
7)MxCAD npm 包在线帮助:
https://mxcadx.gitee.io/mxcad_docs/zh/
MxDraw与MxCAD区别:
MxDraw包是一个前端基于three.js的绘图平台,如果不需要编辑浏览CAD图纸,可以只使用MxDraw包用于前端绘图
MxCAD包是在MxDraw的基础上,增加了CAD功能,它相对于MxDraw更加复杂,需要CAD功能,就使用MxCAD包


主要功能
支持AutoCAD R14 到AutoCAD 2021的所有dwg图纸格式,未来也将支持新出现的AutoCAD文件格式。
三维支持:创建锥、柱、环等基本几何体, 对几何体进行布尔操作(相加、相减、相交运算)、倒角、斜切、镂空、偏移、扫视,、几何空间关系计算(法线、点积、叉积、投影、拟合等)、几何体分析(质心、体积、曲率等)、空间变换(平移、缩放、旋转)等功能。
二维支持:CAD图纸信息搜索提取、测距离、算面积、批注、捕捉、正交、曲线离散、偏移、打断、阵列、扩展数据读写、扩展记录读写、构造选择集、动画、自定义实体、组、超连接、Undo、Redo、字典、图层、标注样式、线型样式、文字样式、视口、布局、用户坐标系、系统变量、图纸比较、动态提示等。
主要实体有:直线、圆弧、Polyline、样条线、圆、椭圆、椭圆弧、IMAGE、点、块引用、外部块参照、射线、云线、文本、多行文本、对齐标注、旋转标注、半径标注、直径标注、角度标注、布局、视口、图层、线型、文字样式、命名字典、标注、自定义实体、代理实体、反应器等。
主要编辑有:移动、夹点拉伸、偏移、删除、复制、粘贴、旋转、缩放、镜向、离散、图案填充、实心填充、打碎、计算曲线长、面积、最近点、交点、导角、文字变线条等。
几何运算:面积、夹角、向量、矩阵、旋转、缩放、最近点、最近距离、垂足、参数、镜向、平移、交点、打断、延伸、最短路径、最长路径。



下载开发包

点击 http://www.mxdraw.com/download.html下载开发包,界面如下图所示:
下载后的文件是压缩包,使用解压软件解压,建议解压位置的路径使用英文,路径不要太长
注意:开发包的内容很多,解压需要一些时间,请耐心等待!

解压目录内容如下:



运行演示
双击解压目录Mx3dServer.exe 程序, 启动界面如下:
按照界面操作,点击按钮,启动服务。
注意:一定要防火墙允许我们的服务程序访问网络。

设置防火墙,允许这两个程序能访问网格:Bin\Release\node.exe和SRC\TsWeb\nodejs\node.exe,如下图:
启动后的效果如下:
1. 后台网站服务程序,如果用户有自己网站服务,可以不需要启动该程序。

2. MxDrawNodeJS服务,后台上传文件 ,文件格式转换的服务

3.  MxCAD文件上传保存服务,CAD图纸编辑后,保存到服务器的服务

4. 前台演示效果:

5. 选择文件后:
6. 打开DWG图纸:
7. Browse模式运行效果:
8. MxCAD运行效果:
9. MxGIS运行效果:

10. Mx3D运行效果:



如何在线浏览编辑dwg文件
如何在线浏览编辑CAD图纸的原理是:CAD图纸文件上传到服务后台后,调用我们的格式转换程序,把CAD图纸文件转换成我们的CAD格式mxweb文件,然后把该文件传给前台JS程序加载显示CAD图纸。
DWG文件格式转换有两个方法:
方法1:调用我们后面服务转换,详细参考:https://help.mxdraw.com/?pid=115
方法2:调用mxcadassembly.exe转换,软件所在目录:Bin\MxCAD\Release\mxcadassembly.exe
调用命令:
mxcadassembly.exe {'srcpath':'D:/Test/test.dwg'} 或 mxcadassembly.exe 'D:/Test/test.dwg'
后台JAVA程序如何调用mxcadassembly.exe转换CAD文件格式,代码如下:
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStream;
  6. public class MyTest {
  7.     // 后面java程序,调用我们exe程序转换dwg文件格式.
  8. public static String CallMxFileConvert(String sDwgFile){
  9.         // 我们转所程序路径.
  10. String command = "Bin/MxCAD/Release/mxcadassembly.exe";
  11. Runtime rn = Runtime.getRuntime();
  12. Process process = null;

  13.         // 转换参数。
  14. String sJsonParam = "{"srcpath":"" + sDwgFile + ""}";
  15. String [] sRetJson = new String[1];

  16. try {
  17.             // 启动一个进程序,调用转换程序。
  18. process = rn.exec(new String[]{command,sJsonParam});
  19. final InputStream ins = process.getInputStream();
  20. final InputStream errs = process.getErrorStream();
  21. //确保子进程与主进程之间inputStream不阻塞
  22. new Thread() {
  23. @Override
  24. public void run() {
  25. BufferedReader inb = null;
  26. String line = null;
  27. try {
  28. inb = new BufferedReader(new InputStreamReader(ins,"gbk"));
  29. while ((line = inb.readLine()) != null) {
  30. sRetJson[0] = line;
  31. //System.out.println("executeMxExe - InputStream : " + line);
  32. }
  33. } catch (IOException e) {
  34. e.printStackTrace();
  35. } finally {
  36. try {
  37. if(null != inb)
  38. inb.close();
  39. if(null != ins){
  40. ins.close();
  41. }
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. }
  47. }.start();
  48. //确保子进程与主进程之间ErrorStream不阻塞
  49. new Thread() {
  50. @Override
  51. public void run() {
  52. BufferedReader errb = null;
  53. String line = null;
  54. try {
  55. errb = new BufferedReader(new InputStreamReader(errs,"gbk"));
  56. while ((line = errb.readLine()) != null) {
  57. System.out.println("executeMxExe - ErrorStream : " + line);
  58. }
  59. } catch (IOException e) {
  60. e.printStackTrace();
  61. } finally {
  62. try {
  63. if(null!=errb)
  64. errb.close();
  65. if(null != errs){
  66. errs.close();
  67. }
  68. } catch (IOException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. }
  73. }.start();
  74. int retCode = process.waitFor();
  75. } catch (Exception e) {
  76. // TODO: handle exception
  77. e.printStackTrace();
  78. } finally{
  79. if(null !=process ){
  80. OutputStream  out = process.getOutputStream();
  81. if(null != out){
  82. try {
  83. out.close();
  84. } catch (IOException e) {
  85. // TODO Auto-generated catch block
  86. e.printStackTrace();
  87. }
  88. }
  89. process.destroy();
  90. }
  91. }

  92.         // 返回转换结果。
  93. return sRetJson[0];
  94. }

  95.     public static void main(String[] args) {   
  96.      String sDwg = "e:/1.dwg";
  97.      String sRetJson = CallMxFileConvert(sDwg);
  98.      System.out.println(sRetJson);
  99.     }
  100. };
复制代码

后台JAVA程序调用代码:https://demo.mxdraw3d.com:3562/MxFileConvert.java.7z
Node.js后台调用代码如下:
  1. /* POST upload listing. */router.post('/', upload.single('file'), function (req, res, next) {   
  2.      // 得到上传文件   
  3.       var file = req.file;        
  4.      // MxFileConvert.exe在服务器的路径   
  5.       var pathConvertExt = '"' + __dirname + "/../../../Bin/MxCAD/Release/mxcadassembly.exe" + '"';   
  6.      // 准备调用参数,json格式,srcpath是dwg在服务器上的路径.  
  7.       var param: any = {};
  8.             param.srcpath = file;
  9.             var cmd = pathConvertExt + ' "' + JSON.stringify(param) + '"';
  10.       const exec = child_process.exec;      
  11.      //调用MxFileConvert.exe进程,进行文件格式转换.   
  12.       exec(cmd, (err, stdout, stderr) => {      
  13.            if (err) {           
  14.               res.json('{"code": 1, "message": "exec cmd failed"}');     
  15.               }     
  16.               else {     
  17.                   // 转换成功,通过命令输出json格式字符串.      
  18.                   res.json(stdout);   
  19.               }  
  20.       });
  21.     });
复制代码

比如: D:/test/test.dwg  转换后,生成文件:  D:/test/test.mxweb文件
把这些生成的文件放到Web服务的目录下,必须前台网页可以直接下载这些文件,像如下这样:
https://demo.mxdraw3d.com:3000/mxcad/test3.mxweb
到目前为止,后台的工作已经准备完成。

如何在网页中浏览CAD图纸:
A. 参考开发包解压目录sample\Browse\2d\Browse的Demo代码
B. 进入sample\Browse\2d\Browse 安装依赖包,建议使用yarn安装
yarn
C. 使用vscode打开sample\Browse\2d\Browse目录并启动服务,如下图:
D. 浏览器访问http://localhost:8089/,效果如下:

E. 如果出现跨域访问,可以临时如下设置禁用Chrome浏览器的跨域检查
  1. // 如下代码,禁用跨域访问安全判断
  2. "runtimeArgs": [
  3.                 "--disable-web-security",
  4.                 "--user-data-dir=${workspaceRoot}\\UserDataDir",
  5.             ],

  6. 配置launch.json
  7. {
  8.    
  9.     "version": "0.2.0",
  10.     "configurations": [
  11.         {
  12.             "type": "chrome",
  13.             "request": "launch",
  14.             "runtimeArgs": [
  15.                 "--disable-web-security",
  16.                 "--user-data-dir=${workspaceRoot}\\UserDataDir",
  17.             ],
  18.             "name": "Launch Chrome against localhost",
  19.             "url": "http://localhost:8080",
  20.             "webRoot": "${workspaceFolder}"
  21.         }
  22.     ]
  23. }
复制代码

F. 建议打包的网页程序,使用iframe引用到实际项目工程,这个方法最简单
参考:sample\Browse\2d\Browseiframe工程,当然你也可以使用mxdraw,mxcad npm包开发

如何在网页中编辑CAD图纸:
A. 参考开发包解压目录sample\Edit\2d\MxCAD的Demo代码
B. 进入sample\Edit\2d\MxCAD 安装依赖包,建议使用yarn安装
yarn
C. 使用vscode打开sample\Edit\2d\MxCAD目录并启动服务,如下图:
D. 浏览器访问http://localhost:3366/,效果如下:
E. 建议打包的网页程序,使用iframe引用到实际项目工程,这个方法最简单
参考:sample\Edit\2d\MxCADiframe工程,当然你也可以使用mxdraw,mxcad npm包开发
完整的demo代码下载
https://demo.mxdraw3d.com:3562/MxCADCode.7z

在线CAD原理说明

前台网页使用JS+html5开发,不需要安装任何插件,建议使用最新Chrome浏览器,CAD图形的渲染基于WebGL,使用Three.js三维开源平台。
后台使用Node.js,TS,c++语言开发,后台把DWG图纸格式解析成我们的mxweb文件格式后,传送给前台编辑,在线编辑CAD详细教程:快速入门 | mxcad (gitee.io),编辑模式原理说明如下:

CAD文件转成编辑格式mxweb
1)Windows系统使用Bin\MxCAD\Release\mxcadassembly.exe转换;Linux系统使用Bin\Linux\BinMxCAD\mxcadassembly转换,如下图:

2)也可以直接调用我们梦想云图Node.JS服务转换,详见:https://help.mxdraw.com/?pid=115中的A条说明。


Linux转换CAD文件到mxweb格式

Linux版本的转换程序,在安装目录的:Bin\Linux\BinMxCAD路径下,如下图:
把该目录下的文件,拷到 Linux系统上,执行如下命令,增加文件的执行权限
sudo chmod -R 777 mxcadassembly
sudo chmod -R 777 ./mx/so/*
sudo  cp -r -f ./mx/locale /usr/local/share/locale

执行命令把dwg转成mxweb格式:./mxcadassembly 1.dwg
如下图:







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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-1 07:58 , Processed in 1.249923 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表