(在线预览CAD图纸)网页CAD SDK集成的方法

简介: 基于mxcad创建的在线CAD项目,支持图纸预览、编辑与数据库操作,提供iframe和mxcad-app插件两种集成方式。本文重点介绍mxcad-app在vite/webpack中的集成方法,支持自定义容器、构建配置及二次开发,便于快速嵌入并扩展功能。

前言

我们基于mxcad创建了一个在线的CAD项目,该项目中包含了预览、编辑图纸、操作图纸数据库等多种CAD功能。用户集成后支持二次开发。当前我们提供了两种集成方式,方案1:通过iframe集成mxcad项目;方案2:直接在项目中集成mxcad-app插件。
下面我们详细讲解第2种mxcad-app的集成方式,这种方式与iframe嵌套集成相比更加方便,集成后也只需要维护当前一个系统项目。
MxCAD项目初始化界面如下:
image-20250910111451263.png

一、基础集成步骤

1.1、基于vite集成mxcad-app

第一步,在main.js中引入mxcad项目所需要的样式文件,创建初始MxCAD项目

   // 引入mxcad-app样式
   import "mxcad-app/style";
   // 引入MxCADView
   import {
    MxCADView } from "mxcad-app";
   // 创建默认mxcad项目
   new MxCADView().create();

第二步,在vite.config.js中加入MxCAD项目相关的资源配置

   import {
    defineConfig } from "vite";
   import {
    mxcadAssetsPlugin } from "mxcad-app/vite";
   export default defineConfig({
   
     plugins: [
         ...
         mxcadAssetsPlugin(),
         ...
     ],
   });

1.2、基于webpack集成mxcad-app

第一步,在main.js中引入mxcad项目所需要的样式文件,创建初始MxCAD项目

   // 引入mxcad-app样式
   import "mxcad-app/style";
   // 引入MxCADView
   import {
    MxCADView } from "mxcad-app";
   // 创建默认mxcad项目
   new MxCADView().create();

第二步,在vite.config.js中加入MxCAD项目相关的资源配置

   npm install style-loader css-loader
const {
    MxCadAssetsWebpackPlugin } = require("mxcad-app/webpack");
   // webpack.config.js
   const webpack = require("webpack");
   module.exports = {
   
     // ...
     mode: "development",
     module: {
   
       rules: [
         {
   
           test: /\.css$/, // 匹配所有 .css 文件
           use: [
             "style-loader", // 第二步:将 CSS 代码注入到 DOM 的 <style> 标签中
             "css-loader", // 第一步:解析 CSS 文件,处理 @import 和 url()
           ],
           include: [path.resolve(__dirname, "src"), path.resolve(__dirname, "node_modules/mxcad-app")], // 可选:只处理 src 下的 css
         },
       ],
     },
     plugins: [
       new webpack.ContextReplacementPlugin(
         /mxcad-app/, // 匹配包含 mxcad-app 的模块路径
         path.resolve(__dirname, "src") // 限制上下文查找范围
       ),
       new MxCadAssetsWebpackPlugin(),
     ],
     // ...
     devServer: {
   
       static: "./dist",
       port: 3000,
     },
   };

二、高阶调用

2.1、自定义界面容器

mxcad-app如果不指定页面的容器元素,会默认直接在项目界面创建一个宽高为100vw,100vh的容器,mxcad项目也将全屏展示。在某些情境下,我们需要动态控制mxcad项目的显隐或显示范围,因此,我们设置如下相关配置来指定mxcad-app的特定界面容器。

   <div id="myMxCAD" style="width: 50vw; height: 50vh"></div>
// 自定义容器
   import {
    MxCADView, mxcadApp } from "mxcad-app";
   /**
    * openFile:需要打开的文件路径
    * rootContainer:mxcad项目容器名
    * map:是否显示地图模式
    */
   new MxCADView({
   
   // mxcadApp.getStaticAssetPath()).toString() 获取mxcad-app的静态资源路径,默认使用的静态资源为nodemodules/mxcad-app/dist/mxcadAppAssets
     openFile: new URL("test.mxweb", mxcadApp.getStaticAssetPath()).toString(),
     rootContainer: "#myMxCAD",
   }).create();

如果需要修改MxCAD项目内部的静态资源路径,可以通过调用setStaticAssetPath()方法修改。

   import {
    mxcadApp } from "mxcad-app";
   mxcadApp.setStaticAssetPath("https://unpkg.com/mxcad-app/dist/mxcadAppAssets");

2.2、构建配置设置

mxcad-app插件内提供了mxcadAssetsPlugin方法对MxCAD项目的加载wasm方式、第三方依赖、资源存放的子目录名、界面UI、快捷命令、服务配置、主题样式等进行设置,用户可以根据自己的需求在不同的场景里修改MxCAD项目的内部配置,基于vite的配置:

  import {
    mxcadAssetsPlugin } from "mxcad-app/vite";
   // vite.config.js
   export default {
   
     plugins: [
       mxcadAssetsPlugin({
   
         isWasmSt:true,
         libraryNames: ["vue"],
         outputDir:'testName',
               // 修改UI配置
         transformMxUiConfig: (config) => {
   
           config.title = "我的CAD"; // 修改标题
           return config;
         },
         // 修改服务器配置  
         transformMxServerConfig: (config) => {
   
           config.serverUrl = "/api/cad"; // 修改API地址
           return config;
         },
         // 修改快捷命令(命令别名)
         // transformMxQuickCommand: (config) => config

         // 修改草图与注释UI模式的配置
         // transformMxSketchesAndNotesUiConfig: (config) => config

         // 修改Vuetify主题配置
         // transformVuetifyThemeConfig: (config) => config
       }),
     ],
   };

基于webpack的配置:

 import {
    MxCadAssetsWebpackPlugin } from "mxcad-app/webpack";
   module.exports = {
   
     plugins: [
       new MxCadAssetsWebpackPlugin({
   
         isWasmSt:true,
         libraryNames: ["vue"],
         outputDir:'testName',
         transformMxServerConfig: (config) => {
   
           if (process.env.NODE_ENV === 'production') {
   
             config.serverUrl = 'https://api.prod.com/cad';
           }
           return config;
         }
           ...
       })
    ]
   };

设置加载wasm方式
MxCAD项目内部默认使用多线程加载wasm资源,如果需要设置单线程加载,可以设置mxcadAssetsPlugin方法中的isWasmSt属性。

  /** 是否单线程加载wasm (默认使用多线程及加载) */
  isWasmSt:true

第三方依赖
用户可以直接引入使用mxcad-app内部使用的mxcad和mxdraw模块,如果用户有需要使用mxcad-app内的其他依赖可以直接在mxcadAssetsPlugin方法中的libraryNames属性中添加这些外部依赖的npm库,然后直接使用。

目前支持的依赖映射的库有vue, axios, vuetify, vuetify/components, mapboxgl, pinia 你也可以访问window.MXCADAPP_EXTERNALLIBRARIES获取到所有提供的依赖库,从而不依赖与构建工具的使用。

  libraryNames: ["vue","axios"...]
  // 在配置文件中添加后,就可以正常使用mxcad-app中的vue模块(mxcad-app打包的内部vue模块)
  import {
    ref } from "vue";
  const n = ref(1);

构建打包后mxcad-app静态资源存放的子目录名。

在自己的项目中安装mxcad-app导入MxCAD项目后,构建打包的时候会默认创建名为 mxcadAppAssets 的文件夹来存放 MxCAD 相关的所有静态资源。如果用户需要修改放置静态资源的文件夹名,可以直接调用mxcadAssetsPlugin方法中的outputDir属性值。

  outputDir:'testName'

修改界面UI、CAD快捷命令、服务配置、主题样式等

调用mxcadAssetsPlugin方法中的提供的transform方法深度设置MxCAD项目。

   // 修改UI配置
  /** 更多UI配置可点击config内部查看 */
  transformMxUiConfig: (config) => {
   
      config.title = "我的CAD"; // 修改标题
      config.mTopButtonBarData.push({
   
          "icon": "textIcon",
          "prompt": "test",
          "cmd": "Mx_test"
      });// 添加顶部按钮栏按钮
      ...
      return config;
  }
  // 修改草图与注释UI模式的配置同上
     // transformMxSketchesAndNotesUiConfig: (config) => config
     // 修改CAD快捷命令(命令别名)
     /** 更多修改CAD快捷命令配置可点击config内部查看 */
     transformMxQuickCommand: (config) => {
   
         // 添加命令Mx_test的别名'_test'、't'
         // config 为MxCAD内部命名别名数组对象
         config.push(['Mx_test','_test','t'])
      return config
     }
     // 修改服务器配置  
     /** 更多修改服务器配置可点击config内部查看 */
     transformMxServerConfig: (config) => {
   
         config.serverUrl = "/api/cad"; // 修改API地址
         config.font.push('txt.shx', 'gdt.shx');// 添加MxCAD项目初始需要加载的字体文件
         ...
      return config;
     }
     // 修改Vuetify主题配置
     /** 更多修改Vuetify主题配置可点击config内部查看 */
     transformVuetifyThemeConfig: (config) => {
   
         config.defaultTheme = 'light';//dark或者light
      return config
     }

2.3、核心依赖库

mxcad-app内置了[mxcad]核心库,用户可以直接使用mxcad 不需要在项目中再次安装mxcad插件。如果不是模块化的方式使用,mxcadwindow.MxCAD挂载你可以直接使用MxCAD访问到需要的方法和类。

   import {
    MxCpp } from 'mxcad'
   // 获取当前mxcad对象
   const mxcad = MxCpp.getCurrentMxCAD();

mxcad依赖mxdraw, 用户在项目中也可以直接使用mxdraw。如果不是模块化的方式使用, mxdrawwindow.Mx 挂载。你可以直接使用Mx访问到需要的方法和类。

   import {
    MxFun } from 'mxdraw'
   // 输出命令行内容
   MxFun.acutPrintf('测试输出')

直接引入mxcadmxdraw模块的前提是要使用构建工具构建。我们提供给了webpack和vite的插件, 用于支持模块化开发。

只要使用了插件就可以直接使用import引入mxcadmxdraw模块。

三、MxCAD项目二次开发示例

基于上述操作,我们已经在我们的项目中集成了MxCAD项目并完成了初始化配置,接下来我们就可以直接基于该CAD项目做二次开发了,下面以在项目中实现参数化绘制多种直线为例,在我们自己的系统之实现绘制命令后注册,再在MxCAD项目调用我们的绘制直线的命令并执行对应的参数操作。

3.1、添加绘制多种直线的方法

 import {
    MxCpp, McCmColor } from "mxcad";
   function Mx_Test_DrawLine() {
   
     let mxcad = MxCpp.getCurrentMxCAD();
     //清空当前显示内容
     mxcad.newFile();
     //把颜色改回黑白色
     mxcad.drawColorIndex = 0;
     //把线型改成实线
     mxcad.drawLinetype = "";
     //设置线宽 4
     mxcad.drawLineWidth = 0;
     //创建一个图层,名为"LineLayer"
     mxcad.addLayer("LineLayer");
     //设置当前图层为"LineLayer"
     mxcad.drawLayer = "LineLayer";
     // 直接绘制一个实线
     // 参数一直线的开始点x坐标,参数二直线的开始点y坐标,参数三直线的结束点x坐标,参数四直线的结束点y坐标
     mxcad.drawLine(0, 0, 100, 0);
     // 绘制一个实斜线
     mxcad.drawLine(200, 0, 300, 100);
     //----------------------------------------------------------------------------------------------------------
     //绘制一个虚线
     //定义虚线数据据,"MyLineType"是线型名,"6,-8"是虚线的一个单位定义,6是实线长,-8是空格长。
     mxcad.addLinetype("MyLineType", "6,-10");
     //设计当前线型为"MyLineType"
     mxcad.drawLinetype = "MyLineType";
     // 绘制一个虚线
     mxcad.drawLine(0, 30, 100, 30);
     // 绘制一个斜虚线
     mxcad.drawLine(200, 30, 300, 130);
     //---------------------------------------------------------------------------------------------------------
     // 修改绘线的颜色为 16711680(蓝色),  16711680转成16进制是0xFF 00 00,其中,FF是蓝色,00是绿色,第个二00是红色。
     mxcad.drawColor = new McCmColor(0, 0, 255);
     // 绘制一个蓝色的虚线
     mxcad.drawLine(0, 60, 100, 60);
     // 绘制一个蓝色的斜虚线
     mxcad.drawLine(200, 60, 300, 160);
     //---------------------------------------------------------------------------------------------------------
     //把颜色改回黑白色
     mxcad.drawColorIndex = 0;
     //把线型改成实线
     mxcad.drawLinetype = "";
     //设置线宽 4
     mxcad.drawLineWidth = 4;
     //绘制一个带宽度的直线。
     mxcad.drawLine(0, 90, 100, 90);
     // 绘制一个带宽度的斜线
     mxcad.drawLine(200, 90, 300, 190);
     //---------------------------------------------------------------------------------------------------------
     //绘制一个点划线虚线
     mxcad.addLinetype("MyLineType2", "10,-2,3,-2");
     //把线型改点划线
     mxcad.drawLinetype = "MyLineType2";
     // 修改绘线的颜色为 255(红色),  255转成16进制是0x00 00 FF,其中,00是蓝色,第个二00是绿色,FF是红色。
     mxcad.drawColor = new McCmColor(255, 0, 0);
     //绘制一个带宽度的红色点划线。
     mxcad.drawLine(0, 120, 100, 120);
     // 绘制一个带宽度红色点划斜线
     mxcad.drawLine(200, 120, 300, 220);
     //---------------------------------------------------------------------------------------------------------
     //增加一个带有形的线型
     mxcad.addTextStyle("MyLineTypeTextStyle", "txt.shx", "hztxt.shx", 1);
     mxcad.addLinetypeEx("MyLineType3", "(12.7,(\"T=MxDraw\",\"S=2.54\",\"L=-5.08\",\"R=0.0\",\"X=-2.54\",\"Y=-1.27\"),-10.08)", "MyLineTypeTextStyle");
     mxcad.drawLinetype = "MyLineType3";
     mxcad.drawLineWidth = 0;
     //绘制一个带宽度的红色点划线。
     mxcad.drawLine(350, 120, 600, 120);
     //---------------------------------------------------------------------------------------------------------
     //增加一个带有形的线型
     //把颜色改回黑白色
     mxcad.drawColorIndex = 0;
     mxcad.drawLineWidth = 4;
     //绘制一个带宽度的红色点划线。
     mxcad.drawLine(350, 220, 600, 220);                                        
     //把所有的实体都放到当前显示视区
     mxcad.zoomAll();
     //更新视区显示
     mxcad.updateDisplay();
   }

3.2、注册绘制命令

   import {
    MxFun } from 'mxdraw';
   MxFun.addCommand("Mx_Test_DrawLine", Mx_Test_DrawLine);

3.3、绑定调用逻辑(以点击按钮为例)

   <button onclick="MyTestFun('Mx_Test_DrawLine')">绘制直线</button>
   const MyTestFun = (str:string)=> MxFun.sendStringToExecute(str);

3.4、功能效果演示:

image-20250911103234631.png
更多mxcad-app相关示例项目引用,可以下载我们的mxdraw云图开发包查看更多详情。

相关文章
|
机器学习/深度学习 人工智能 数据挖掘
图神经网络必读论文-Must-read papers on GNN
GNN: graph neural network Contributed by Jie Zhou, Ganqu Cui, Zhengyan Zhang and Yushi Bai. 来源:THUNLP 链接:https://github.com/thunlp/GNNPapers
2001 1
图神经网络必读论文-Must-read papers on GNN
|
存储 前端开发 Java
Java 开发技巧:减少魔法值的使用
代码中有魔法值会造成代码可读性低(与代码量成正比)。还会造成维护困难,改动一个数值便要大动干戈,牵一发而动全身。应当尽力消灭或减少魔法值,提高维护效率和代码可读性。
Java 开发技巧:减少魔法值的使用
|
8天前
|
弹性计算 监控 大数据
阿里云国外地域云服务器收费标准、购买流程与选择和使用注意事项参考
阿里云国外云服务器是外贸企业的理想选择,覆盖亚太、欧洲、美洲、中东等多个地区,确保业务快速响应。提供按量、按月、包年等多样计费方式,满足不同需求。其优势在于全球覆盖、灵活计费、高性能计算及稳定网络,适合外贸企业、免备案应用、大数据处理、游戏娱乐等多种场景。阿里云提供高数据可靠性保障,结合促销活动、优惠券和续费同价政策,助力用户低成本高效运营。
244 8
|
4月前
|
人工智能 API 开发者
用Dify搭建自动化工作流,我每天节省了3小时
作为一名开发者,我曾深陷重复工作。直到用Dify搭建AI自动化工作流,每天节省3小时。本文分享如何通过可视化编排实现客服、文档、代码的智能自动化,附部署、优化与避坑实战经验。
用Dify搭建自动化工作流,我每天节省了3小时
|
10月前
|
缓存 前端开发 API
(网页系统集成CAD功能)在线CAD中配置属性的使用教程
本文介绍了Mxcad SDK在线预览和编辑CAD图纸的功能及配置方法。通过Vite、CDN或Webpack实现集成,用户可自定义设置以满足项目需求。主要内容包括:1)`createMxCad()`方法的初始属性配置,如画布ID、WASM文件路径、字体加载路径等;2)`MxFun.setIniset()`方法提供的更多CAD初始配置;3)`McObject`对象API用于动态调整视图背景色、浏览模式等。此外,还提供了在线Demo(https://demo2.mxdraw3d.com:3000/mxcad/)供用户测试实时效果。
|
3月前
|
JavaScript 前端开发 算法
前后端全栈技术栈深度剖析:从Vue到Node.js的完整学习路径
三年前端困于API调用?本文系统梳理进阶路径:深入Vue/React原理、掌握Node.js全栈开发、攻克工程化与性能优化,结合实战项目全面提升技术深度,助力突破瓶颈,直通大厂面试核心要求。
|
JavaScript
网页CAD(JS Vue 预览dwg)如何二次开发常用的CAD编辑功能
```markdown # CAD网页编程概览 - 使用mxcad库,实现CAD操作如删除、复制、镜像、移动和旋转。 - `erase()`方法删除实体,`clone()`配合`transformBy()`用于复制和编辑。 - `mirror()`和`transformBy(setMirror)`执行镜像操作,基于参考线。 - `move()`和`transformBy(setToTranslation)`实现移动功能。 - `rotate()`和`transformBy(setToRotation)`进行旋转,支持角度输入。 ```
网页CAD(JS Vue 预览dwg)如何二次开发常用的CAD编辑功能
|
8月前
|
数据管理 数据挖掘 API
深入研究:shopee商品列表API接口指南
Shopee 是东南亚和中国台湾地区的跨境电商平台,其开放平台(Shopee Open API)为开发者提供商品数据、店铺管理和订单处理等接口。商品列表 API 为核心功能之一,支持按店铺获取商品列表和搜索平台商品。通过 shop_id 等参数可获取指定店铺商品信息,支持分页与状态筛选;通过关键词、类目 ID 和价格范围等条件可搜索平台商品,适用于构建比价工具和选品分析系统。
|
Web App开发 前端开发 JavaScript
网页浏览和编辑DWG快速入门的方法(WEB CAD SDK)
MxDraw云图在线CAD解决方案,包括MxDraw、MxCAD开发包、图纸转换程序和后端服务。支持多种平台和CPU架构,推荐使用最新版Chrome或Edge浏览器。提供AutoCAD各版本dwg格式支持,具备三维和二维编辑功能。提供入门开发指南和功能丰富的示例。用户可下载开发包进行功能演示,包括在线预览和编辑CAD图纸。
2042 98
网页浏览和编辑DWG快速入门的方法(WEB CAD SDK)
|
7月前
|
存储 缓存 安全
系统显卡驱动程序卸载工具,DDU中文绿色版下载,免费显卡驱动彻底卸载工具
Display Driver Uninstaller(DDU)是一款专业显卡驱动卸载工具,支持彻底删除AMD/NVIDIA/Intel显卡驱动及相关残留文件,适用于驱动损坏、版本过旧或系统冲突等情况。绿色版无需安装,操作简单,可帮助用户实现干净的驱动环境。
3598 0