# mxcad_docs
**Repository Path**: donghuzi1_admin/mxcad_docs
## Basic Information
- **Project Name**: mxcad_docs
- **Description**: mxcad 文档 在线cad编辑
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 5
- **Created**: 2025-08-20
- **Last Updated**: 2025-08-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 快速入门
> mxcad必须和mxdraw一起使用 如果你不了解mxdraw库 请参考:
> 联系方式: 710714273@qq.com

## 安装
### CDN
```html
```
### NPM
```sh
npm install mxdraw mxcad
```
## 基本用法
::: tip 重要提示
因为mxcad默认使用了`SharedArrayBuffer`
需要在服务端设置相应对应的响应头:
```js
// nodejs 为例
const http = require('http');
http.createServer((req, res)=> {
res.setHeader("Cross-Origin-Opener-Policy", "same-origin");
res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
})
```
:::
需要canvas元素
```html
```
推荐使用vite作为构建工具
```ts
import { createMxCad } from "mxcad"
createMxCad({
canvas: "#myCanvas",
locateFile: (fileName)=> new URL(`/node_modules/mxcad/dist/wasm/2d/${fileName}`, import.meta.url).href,
fileUrl: new URL("../assets/test.mxweb", import.meta.url).href
}).then((mxcad)=> {
// 我想换一个文件显示?
mxcad.openWebFile(new URL("../assets/test2.mxweb", import.meta.url).href)
// 我想保存我修改后的文件?
// (你可以在dom元素事件函数中调用,这样可以使用一些最新的浏览器特性保存文件)
mxcad.saveFile()
})
```
## 示例参考
在git中查看示例 [github](https://github.com/mxcad/mxcad_docs/tree/master/examples)
| [gitee](https://gitee.com/mxcadx/mxcad_docs/tree/master/examples)
或者通过 执行以下命令查看所有实例
```sh
git clone https://github.com/mxcad/mxcad_docs
cd examples
npm install -g pnpm
pnpm install
pnpm run -r dev
```
你还可以通过[演练场](#演练场)在线编辑修改代码查看运行后的效果
## 在vite中使用
1.安装vite
```sh
npm install vite -D
```
2.在项目根目录新建html文件
```html
vite use mxcad
```
3.在根目录下新建`src`目录 在`src`目录下新建`index.ts`文件(vite默认支持ts)代码如下:
```ts
import { createMxCad } from "mxcad"
import { MxFun } from "mxdraw"
createMxCad({
canvas: "#myCanvas",
locateFile: (fileName)=> new URL(`/node_modules/mxcad/dist/wasm/2d/${fileName}`, import.meta.url).href,
fileUrl: new URL("../assets/test.mxweb", import.meta.url).href
})
```
4.在`src`目录下创建`assets`并复制`test.mxweb`文件到该目录下
5.在根目录下创建`vite.config.ts`文件
```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
```
## 在webpack中使用
1.安装
```sh
npm install webpack webpack-cli copy-webpack-plugin@5 -D
```
2.在根目录下创建`webpack.config.js`文件
```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,
}
};
```
3.在根目录新建`index.html`文件
```html
起步
```
4.在根目录新建`src`目录 并在`src`目录下新建`index.js`文件
```js
createMxCad({
canvas: "#myCanvas",
// 通过需要访问:http:xxx.com/test.mxweb 获取对应的文件
// 请你自行提供该文件
fileUrl: "test.mxweb"
})
```
5.完成上述步骤执行`npx webpack serve`命令运行查看效果
## 在h5中直接使用
```html
Document
```
## createMxCad 的实现
```tsx
// 这是createMxCad 实现的大致代码
// 如果你希望整个创建过程是透明公开的,
// 你可以不使用createMxCad 而是使用下面的代码自行创建
import { MxFun, loadCoreCode } from "mxdraw";
import { loadMxCADassembly } from "mxcad"
export default () => {
loadCoreCode()
.then(() => loadMxCADassembly((MxCpp)=> {
MxFun.setIniset({
EnableIntelliSelect: true
})
MxFun.createMxObject({
canvasId: "myCanvas",
isCPPMxCAD: true,
callback(mxDraw, dom) {
mxDraw.initRendererParam({ webgl2: true });
mxDraw.setMouseMiddlePan(true);
mxDraw.on("initObject", () => {
const THREE = MxFun.getMxFunTHREE()
let size = new THREE.Vector2();
mxDraw.getRenderer().getSize(size);
const mxcadObj = MxCpp.App.CreateMxCAD(size.width, size.height, "myCanvas", mxDraw.isWebgl2(), mxDraw.getId());
mxDraw.initMxCpp(mxcadObj);
mxcadObj.openWebFile("test2.mxweb");
});
}
})
}
,
(fileName: string)=> {
// CDN 加载必须使用wasm/2d-st中的资源、因为github的限制无法使用wasm/2d 资源
// 需要使用wasm/2d需要遵循浏览器同源策略或使用其他手段规避浏览器同源策略
return "https://unpkg.com/mxcad/dist/wasm/2d-st/" + fileName
}),
)
return ()
}
```