明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 989|回复: 0

JAVA在线看CAD图纸快速入门

[复制链接]
发表于 2022-2-24 16:50:27 | 显示全部楼层 |阅读模式


前言
梦想云图开发包,支持所有DWG/CAD图纸的在线浏览、批注、坐标提取、对象选择、编辑等功能,下面讲解如何从零开始使用梦想云图开发包。



开发包下载:
点击 http://www.mxdraw.com/download.html下载开发包,界面如下图所示:



安装开发包
2.安装开发包
首先退出杀毒软件,双击安装包MxDrawCloudServer1.0(20220127)TryVersion.exe开始安装,里面包含所有例子、帮助、demo工程,所以安装比较慢,请耐心等待。



安装完成
桌面图标: ,启动开始程序,界面如下:
按照提示启动demo,查看demo运行效果。
详细内容,可以参考:https://help.mxdraw.com/?pid=32

java语言后台调用
在线看CAD图纸的原理是:CAD图纸文件上传到服务后台后,调用我们的提供的格式转换程序,把CAD图纸文件做一个格式转换,生成新的格式文件,然后该格式文件转到前台JS加载显示CAD图纸。
软件安装目录下:C:\Users\MxDraw\Documents\MxKd\MxDrawCloudServer\Bin\Release\MxFileConvert.exe有一个MxFileConvert.exe程序,使用它对CAD图纸做格式转换。后台JAVA程序如何调用MxFileConvert.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 = "C:/Users/MxDrawDEV/Documents/MxKd/MxDrawCloudServer/Bin/Release/MxFileConvert.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. };
复制代码

比如: D:/test/test.dwg  转换后,生成文件:  D:/test/buf/$test.dwg.xxx.wgh1,2.. 文件,如下图:
转换程序,生成一堆的文件,相当于把一个比较大的DWG文件,分成多个小的文件,方便前台JS程序加载显示。
把这些生成的文件放到java的Web服务的目录下,必须前台网页可以直接下载这些文件,如下效果:
http://localhost:3000/test/buf/$test.dwg.mxb1.wgh
到目前为止,后台的工作已经准备完成。

前台使用MxDraw插件,加载CAD图纸
A.新建一个Vue工程
详细见:help.mxdraw.com/?pid=107
B.安装mxdraw npm插件
  1. yarn add mxdraw 或 npm install mxdraw
复制代码

C. 修改main.ts加载,初始化MxDraw插件
  1. import { loadCoreCode } from "mxdraw"
  2. loadCoreCode()
复制代码

如下图:
D. 修改HelloWorld.vue,加载MxDraw
增加canvas画布
  1. <canvas id="mxcad">
  2. </canvas>
复制代码

引用MxDraw,创建MxDraw对象

  1. import Mx from "mxdraw"
  2. @Options({
  3.   props: {
  4.     msg: String
  5.   }
  6. })
  7. export default class HelloWorld extends Vue {
  8.   msg!: string
  9.   mounted() {
  10.     // 启用MxDraw的静态文件加载功能
  11.     Mx.MxFun.enablStaticLoad();
  12.     // 静态文件加载时,静态在服务上的路径.
  13.     Mx.MxFun.setStaticServer("http://localhost:3000/test");
  14.     // 创建MxDraw对像,打开test.dwg图纸
  15.     Mx.MxFun.createMxObject({
  16.       canvasId: "mxdraw",
  17.       drawName:"test.dwg",
  18.       callback(mxobj,{canvas,canvasParent}) {
  19.         return;  
  20.       }
  21.       });
  22.   }
  23. }
复制代码

如下图的修改:

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. 启动运行,效果如下:

G. 该文章完整例子代码下载:







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

本版积分规则

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

GMT+8, 2024-11-22 14:02 , Processed in 0.189052 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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