首页 > 编程语言 >JAVA在线看CAD图纸快速入门

JAVA在线看CAD图纸快速入门

时间:2022-12-28 10:31:26浏览次数:59  
标签:JAVA String MxDraw mxdraw test null 在线看 CAD


前言

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

在线演示网址1:

​梦想CAD控件_CAD看图,DWG网页,安卓CAD,CAD网页,CAD控件​

在线演示网址2:

​embedmxcad​

开发包下载:

点击 ​​产品下载_梦想CAD控件​​下载开发包,界面如下图所示:

JAVA在线看CAD图纸快速入门_加载

安装开发包

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

安装完成

桌面图标:

JAVA在线看CAD图纸快速入门_控件_02

启动开始程序,界面如下:

JAVA在线看CAD图纸快速入门_控件_03

按照提示启动demo,查看demo运行效果。

详细内容,可以参考:​​MxDraw帮助


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文件格式,代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class MyTest {
// 后面java程序,调用我们exe程序转换dwg文件格式.
public static String CallMxFileConvert(String sDwgFile){
// 我们转所程序路径.
String command = "C:/Users/MxDrawDEV/Documents/MxKd/MxDrawCloudServer/Bin/Release/MxFileConvert.exe";
Runtime rn = Runtime.getRuntime();
Process process = null;

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

try {
// 启动一个进程序,调用转换程序。
process = rn.exec(new String[]{command,sJsonParam});
final InputStream ins = process.getInputStream();
final InputStream errs = process.getErrorStream();
//确保子进程与主进程之间inputStream不阻塞
new Thread() {
@Override
public void run() {
BufferedReader inb = null;
String line = null;
try {
inb = new BufferedReader(new InputStreamReader(ins,"gbk"));
while ((line = inb.readLine()) != null) {
sRetJson[0] = line;
//System.out.println("executeMxExe - InputStream : " + line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(null != inb)
inb.close();
if(null != ins){
ins.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
//确保子进程与主进程之间ErrorStream不阻塞
new Thread() {
@Override
public void run() {
BufferedReader errb = null;
String line = null;
try {
errb = new BufferedReader(new InputStreamReader(errs,"gbk"));
while ((line = errb.readLine()) != null) {
System.out.println("executeMxExe - ErrorStream : " + line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(null!=errb)
errb.close();
if(null != errs){
errs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start();
int retCode = process.waitFor();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally{
if(null !=process ){
OutputStream out = process.getOutputStream();
if(null != out){
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
process.destroy();
}
}

// 返回转换结果。
return sRetJson[0];
}

public static void main(String[] args) {
String sDwg = "e:/1.dwg";
String sRetJson = CallMxFileConvert(sDwg);
System.out.println(sRetJson);
}
};

比如: ​​D:/test/test.dwg​​​  转换后,生成文件:  ​​D:/test/buf/$test.dwg.xxx.wgh1,2..​​ 文件,如下图:

JAVA在线看CAD图纸快速入门_加载_04

转换程序,生成一堆的文件,相当于把一个比较大的DWG文件,分成多个小的文件,方便前台JS程序加载显示。

把这些生成的文件放到java的Web服务的目录下,必须前台网页可以直接下载这些文件,如下效果:

​​http://localhost:3000/test/buf/$test.dwg.mxb1.wgh​​

JAVA在线看CAD图纸快速入门_加载_05

JAVA在线看CAD图纸快速入门_开发语言_06

到目前为止,后台的工作已经准备完成。

前台使用MxDraw插件,加载CAD图纸

A.新建一个Vue工程

详细见:​​help.mxdraw.com/?pid=107​

B.安装mxdraw npm插件


yarn add mxdraw 或 npm install mxdraw


yarn add mxdraw 或 npm install mxdraw

C. 修改main.ts加载,初始化MxDraw插件

import { loadCoreCode } from "mxdraw"
loadCoreCode()

如下图:

JAVA在线看CAD图纸快速入门_后端_07

D. 修改HelloWorld.vue,加载MxDraw

增加canvas画布

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

引用MxDraw,创建MxDraw对象

import Mx from "mxdraw"
@Options({
props: {
msg: String
}
})
export default class HelloWorld extends Vue {
msg!: string
mounted() {
// 启用MxDraw的静态文件加载功能
Mx.MxFun.enablStaticLoad();
// 静态文件加载时,静态在服务上的路径.
Mx.MxFun.setStaticServer("http://localhost:3000/test");
// 创建MxDraw对像,打开test.dwg图纸
Mx.MxFun.createMxObject({
canvasId: "mxdraw",
drawName:"test.dwg",
callback(mxobj,{canvas,canvasParent}) {
return;
}
});
}
}

如下图的修改:

JAVA在线看CAD图纸快速入门_后端_08

E. 设置禁用Chrome浏览器的跨域访问

// 如下代码,禁用跨域访问安全判断
"runtimeArgs": [
"--disable-web-security",
"--user-data-dir=${workspaceRoot}\\UserDataDir",
],

配置launch.json
{

"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"runtimeArgs": [
"--disable-web-security",
"--user-data-dir=${workspaceRoot}\\UserDataDir",
],
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}

F. 启动运行,效果如下:

JAVA在线看CAD图纸快速入门_加载_09

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

​https://mxtmpweb.mxdraw.f3322.net:3562/mxdraw-test-vue3.7z​

标签:JAVA,String,MxDraw,mxdraw,test,null,在线看,CAD
From: https://blog.51cto.com/u_10455293/5973873

相关文章

  • JAVA17使用JS ScriptEngine
    JAVA动态运算符判断要借用 js 当我写下下面代码ScriptEngineManagermanager=newScriptEngineManager();//创建脚本执行引擎Scrip......
  • Java千问05:Java语言中为byte和short类型变量赋值为啥会报错?
    咱们先来看一段很简单的Java代码这段代码非常简单,没有任何技术含量。但是,如果我们把这段代码改成下面的样子大家可以看到,我们只是用一个变量a代替了原来赋值表达式当中的常......
  • Java 提供给第三方使用接口方法
    前言相信有很多小伙伴,在日常的开发中都有遇到过需要调用第三方接口的需求吧,但是自己有没有写过接口提供给第三方使用呢,常规的都是我们调用别人的接口,但是自己需要开发接口提......
  • Java千问06:Java语言中最大的整数再加1等于多少?看完秒懂!
    ​已知Java语言中int类型所能表示的最大整数为2147483647,请问以下代码执行结果是什么?一部分人都会认为这段程序压根就无法通过编译,也有人认为,这段程序能够通过编译,但在运行......
  • Java HashMap原理
    HashMap是Java中用于实现映射关系的一种数据结构。它允许将一个对象(称为键)映射到另一个对象(称为值)。当需要访问值时,可以使用键来查找值。HashMap的实现原理是使用散列函数......
  • Java千问07:你真的会用Java的int型变量吗?有些坑你真的不知道!
    ​我们在进行Java编程的时候,使用最频繁的数据类型基本上就是int型了。平时在使用这种数据类型的过程中,我们似乎也并没有感觉到有什么太多需要注意的地方,其实int类型的变量在......
  • Java千问08:关于Java语言复合赋值运算符的两个问题,快来瞧瞧!
    ​我们知道,在Java以及很多高级编程语言当中,都有一种运算符叫做复合赋值运算符。复合赋值运算符由两个符号组成,它所能完成的运算操作也分为两步:第一步是运算,第二步是赋值。比......
  • JAVA代码审计_若依管理系统
    若依管理系统代码审计该项目使用Mybatis作为数据库持久化框架。全局搜索${、关注xxxmapper.xml文件寻找SQL注入。1)后台角色管理处SQL注入漏洞点“SysRoleMapper.x......
  • windows配置java17
    最近重置系统了,所有东西都得重装一遍。但是为了能继续撸树盖房子,java又是必不可少的,先把java搞回来再说。jdk下载地址https://www.oracle.com/java/technologies/javase......
  • Loki Promtail 使用 multiline 对Java 堆栈日志进行多行处理的示例
    promtail使用multiline处理java多行日志文本的示例Environment:promtail_version:v2.7.1originJavalogcontent:logfilecontentstdout-a.log:2022-Dec-270......