# mxcad **Repository Path**: xiaolingis/mxcad ## Basic Information - **Project Name**: mxcad - **Description**: mxcad 文档 在线cad编辑 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2025-09-29 - **Last Updated**: 2025-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 快速入门 > mxcad必须和mxdraw一起使用 如果你不了解mxdraw库 请参考: > 联系方式: 710714273@qq.com ![](https://www.webcadsdk.com/img/WX-Two-dimensional-code.png) 官网地址: mxcad 支持渲染`.mxweb格式`的文件(该文件格式是我们特有的前端CAD格式),CAD图纸文件(DWG、DXF)可通过我们提供的[mxdraw云图开发包](https://help.mxdraw.com/?pid=32)中的图纸转换程序转换为`.mxweb文件`。经转换后的`.mxweb文件`会交由 mxcad 在网页中浏览编辑,编辑后的mxweb文件同样可以经图纸转换程序转换回CAD图纸文件 ## 通过Vite使用mxcad 在本节中,我们将介绍如何在本地创建一个简单的mxcad项目。创建的项目将使用基于 Vite 的构建设置。 首先确保你已经安装了[Node.js](https://nodejs.org/en),然后进入到你需要创建项目的目录中: 1. 在命令行运行以下命令来初始化项目并安装 Vite 和 mxcad ```sh npm init -y npm install vite -D npm install mxcad ``` :::tip 注意 如果使用`pnpm`安装 还需要主动安装 mxdraw ```sh `pnpm install mxdraw` ``` ::: 2. 在项目根目录下新建index.html文件,并绘制canvas画布。 ```html vite use mxcad
``` 3. 在根目录下新建`src`目录,并在该目录下创建`assets`文件夹用于存放目标mxweb文件。(点击[下载一个mxweb文件](https://gitee.com/mxcadx/mxcad_docs/blob/master/examples/public/test2.mxweb)) 4. 在`src`目录下新建`index.ts`文件(vite默认支持ts)。 通过调用 mxcad 中的`create()`方法加载目标图纸,该方法中加载文件的路径均为相对于js调用位置的http URL绝对路径即文件的**网络地址**,在vite中可用通过下面示例代码中的加载方式得到该文件正确的的**网络地址**。 ```ts import { McObject } from "mxcad" // 创建mxcad示例对象 const mxcad = new McObject() mxcad.create({ // canvas元素的id canvas: "#myCanvas", // 获取加载wasm相关文件(wasm/js/worker.js)路径位置 locateFile: (fileName)=> new URL(`/node_modules/mxcad/dist/wasm/2d/${fileName}`, import.meta.url).href, // 需要初始化打开的文件url路径 fileUrl: new URL("../src/assets/test.mxweb", import.meta.url).href, // 提供加载字体的目录路径 fontspath: new URL("node_modules/mxcad/dist/fonts", import.meta.url).href, }) ``` 将该ts文件引入上述的html文件中。 mxcad 中的`create()`方法需要等canvas元素在页面加载完成后才能调用,因此需要将 script 标签放在 body 标签内部,让浏览器先完成HTML页面的解析,再下载并执行script标签中的代码。 ```html ``` 5. 在根目录下创建`vite.config.ts`文件。 mxcad默认使用了 SharedArrayBuffer ,它是 JavaScript 中的一种特殊类型,允许多个 Web Worker 线程共享同一块内存空间,因此使用mxcad需要在服务端设置相应对应的响应头。 ```ts import { defineConfig } from "vite" export default defineConfig({ server: { headers: { "Cross-Origin-Opener-Policy": "same-origin", "Cross-Origin-Embedder-Policy": "require-corp", } } }) ``` 6. 完成以上步骤后,运行下面的命令启动项目 ```sh npx vite ``` 参考示例源码: ## 通过CDN使用mxcad 你可以借助 script 标签直接通过CDN来使用mxcad: 这里我们使用了 [unpkg](https://unpkg.com/),但你也可以使用任何提供 npm 包服务的 CDN,你也可以下载此文件并自行提供服务 ```html ``` ### 使用全局构建版本 全局构建版本示例: ```html Document
``` 参考示例源码: ### 使用 ES 模块构建版本 现代浏览器大多都已原生支持 ES 模块,因此我们可以像这样通过 CDN 以及原生 ES 模块使用 mxcad。由于 mxcad 依赖mxdraw库, 所以要[导入映射表 (Import Maps)](https://caniuse.com/import-maps)来告诉浏览器如何定位到导入的 mxdraw模块和 mxcad模块 你也可以在映射表中添加其他的依赖——但请务必确保你使用的是该库的 ES 模块版本。 ```html
``` ## 通过webpack使用mxcad mxcad 也支持在其他打包工具中使用,下面将介绍基于 webpack 构建 mxcad 项目。 1. 项目初始化、安装 webpack 和 mxcad。 ```sh npm init -y npm install webpack webpack-cli copy-webpack-plugin@5 html-webpack-plugin -D npm install mxcad ``` 2. 在根目录新建`index.html`文件,绘制画布。 ```html 起步
``` 3. 在根目录新建`src`目录 并在`src`目录下新建`index.js`文件加载目标文件 ```js import { McObject } from "mxcad" const mxcad = new McObject() mxcad.create({ canvas: "#myCanvas", // 通过需要访问:http:xxx.com/test.mxweb 获取对应的文件 // 请你自行提供该文件 fileUrl: "test.mxweb" }) ``` 在`index.html`文件下引入该js文件。将 script 标签放在 body 标签内部,让浏览器先完成HTML页面的解析,再下载并执行 script 标签中的代码。 ```html ``` 4. 在根目录下创建`webpack.config.js`文件。 拷贝 mxcad 所需文件到静态资源中。 ```js const path = require('path'); // copy-webpack-plugin@5 兼容webpack4和5的版本请放心使用 const CopyWebpackPlugin = require("copy-webpack-plugin"); module.exports = { mode: process.env.development === "development" ? "development" : "production", entry: './src/index.js', devServer: { static: './dist', headers: { "Cross-Origin-Opener-Policy": "same-origin", "Cross-Origin-Embedder-Policy": "require-corp" } }, output: { path: path.resolve(__dirname, 'dist'), filename: 'main.js', }, plugins: [ new CopyWebpackPlugin([ // 拷贝mxcad wasm 相关的核心代码 mxcad默认请求的路径是 /* 所有 需要把文件放dist2d下 { from: "node_modules/mxcad/dist/wasm/2d/*", to: path.resolve(__dirname, "dist"), flatten: true }, // 必须要字体文件来显示图纸中的文字,mxcad库默认请求URL路径为 /fonts/* 所有需要放在dist/fonts下 { from: "node_modules/mxcad/dist/fonts", to: path.resolve(__dirname, "dist/fonts"), flatten: true, toType: "dir" }, ]) ], // mxcad 和 mxdraw库的js代码打包超过webpack默认限制的大小,需要设置hints: false关闭警告 performance: { hints: false, } }; ``` 5. 根据需求配置好`packge.json`文件后,执行`npx webpack serve`命令运行查看效果 ## 其它知识点说明 ### createMxCad 的参数配置说明 1. canvas:canvas画布实例的id名 2. locateFile:mxcad 的核心依赖mxcad库中`/mxcad/dist/wasm`目录下对应分类(`2d`|`2d-st`)中的 wasm 文件(该文件是c++编译生成的),其中 2d 目录下为多线程程序、2d-st 目录下为单线程程序,该参数用来指定 wasm 程序的**网络路径**。 3. fontspath:指定cad图纸中的字体文件加载路径。默认路径为`dist/fonts`,你可以在该目录中添加打开图纸需要的各种字体文件。 4. fileUrl:指定打开mxweb图纸的**网络路径**。 :::tip 提示 mxcad 中创建mxcad对象的 `create()` 函数中的参数 fontspath 、 fileUrl 包括 locateFile 的值均为**网络路径**。 ::: 5. onOpenFileComplete:监听打开文件成功的回调事件,在图纸打开完成后进行的操作可在该方法内执行。 6. viewBackgroundColor:设置视区背景颜色,值为rgb。 7. browse:是否设置为浏览模式,值为true或1时启用浏览模式,且CAD对象不能选中;值为2时启用浏览模式,CAD对象能选中,但不能夹点编辑;值为false时启用编辑模式。 8. middlePan:设置移动视区的操作方式。设置为0,点击鼠标左键移动视区;设置为1,点击鼠标中键移动视区;设置为2,点击鼠标中键和鼠标左键均可移动视区。 9. enableUndo:是否启用回退功能。设置为true则可以调用Mx_Undo命令回退操作;设置为false则禁用回退命令。默认设置为false。 10. enableIntelliSelect:是否启用对象选择功能。设置为true则启用;设置为false则不启用。 11. multipleSelect:是否启用多选。设置为true则启用;设置为false则不启用。 更多 createMxCad 初始化参数设置可参考[MxCadConfig 配置说明](../../api/interfaces/2d.MxCadConfig.md)。 ### 多线程、单线程模式说明 为了性能考虑, mxcad 默认支持多线程。其中,支持多线程模式需要开启 SharedArrayBuffer 权限,开启后可以使用 `/wasm/2d`下的多线程程序,否则使用`/wasm/2d-st/`下的单线程程序。 开启 SharedArrayBuffer 权限需要在服务器响应器中进行配置,比如node.js服务器程序开启 SharedArrayBuffer 权限设置如下: ```js const http = require('http'); http.createServer((req, res)=> { res.setHeader("Cross-Origin-Opener-Policy", "same-origin"); res.setHeader("Cross-Origin-Embedder-Policy", "require-corp"); }) ``` 如何在前端js中判断是否开启了 SharedArrayBuffer 的权限,然后自动使用正确的程序加载,代码如下: ```js import { McObject } from "mxcad" // 将2d和2d-st 都放入静态资源中可以保证无论是否开启SharedArrayBuffer 都可以正常运行 const mode = "SharedArrayBuffer" in window ? "2d" : "2d-st" const mxobj = new McObject() mxobj.create({ // ... locateFile: (fileName)=> { new URL(`/node_modules/mxcad/dist/wasm/${mode}/${fileName}`, import.meta.url).href }, }) ``` :::tip 提示 若要使用 SharedArrayBuffer 权限,谷歌的浏览器要求使用HTTPS的协议访问或本地路径(http://localhost)。 :::