mxcad 1.0.49 → 1.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +318 -4
- package/dist/mxcad.d.ts +1471 -1112
- package/dist/mxcad.es.js +1257 -1317
- package/dist/mxcad.umd.js +37 -37
- package/dist/wasm/2d/mxdrawassembly_min.js +509 -507
- package/dist/wasm/2d/mxdrawassembly_min.wasm +0 -0
- package/dist/wasm/2d-st/mxdrawassembly_min.js +442 -440
- package/dist/wasm/2d-st/mxdrawassembly_minst.wasm +0 -0
- package/package.json +11 -9
package/README.md
CHANGED
|
@@ -1,8 +1,322 @@
|
|
|
1
1
|
|
|
2
|
-
#
|
|
2
|
+
# 快速入门
|
|
3
|
+
|
|
4
|
+
> mxcad必须和mxdraw一起使用 如果你不了解mxdraw库 请参考:<https://mxcadx.gitee.io/mxdraw_docs/>
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
### CDN
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<script scr="https://unpkg.com/mxdraw/dist/mxdraw.umd.js" ></script>
|
|
13
|
+
<script scr="https://unpkg.com/mxcad/dist/mxcad.umd.js"></script>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### NPM
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
npm install mxdraw mxcad
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 基本用法
|
|
23
|
+
|
|
24
|
+
::: tip 重要提示
|
|
25
|
+
|
|
26
|
+
因为mxcad默认使用了`SharedArrayBuffer`
|
|
27
|
+
需要在服务端设置相应对应的响应头:
|
|
28
|
+
|
|
29
|
+
```js
|
|
30
|
+
// nodejs 为例
|
|
31
|
+
const http = require('http');
|
|
32
|
+
http.createServer((req, res)=> {
|
|
33
|
+
res.setHeader("Cross-Origin-Opener-Policy", "same-origin");
|
|
34
|
+
res.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
:::
|
|
40
|
+
|
|
41
|
+
需要canvas元素
|
|
42
|
+
|
|
43
|
+
```html
|
|
44
|
+
<div style="height: 600px; overflow: hidden;"> <canvas id="myCanvas"></canvas></div>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
推荐使用vite作为构建工具
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import { createMxCad } from "mxcad"
|
|
51
|
+
createMxCad({
|
|
52
|
+
canvas: "#myCanvas",
|
|
53
|
+
locateFile: (fileName)=> new URL(`/node_modules/mxcad/dist/wasm/2d/${fileName}`, import.meta.url).href,
|
|
54
|
+
fileUrl: new URL("../assets/test.mxweb", import.meta.url).href
|
|
55
|
+
}).then((mxcad)=> {
|
|
56
|
+
// 我想换一个文件显示?
|
|
57
|
+
mxcad.openWebFile(new URL("../assets/test2.mxweb", import.meta.url).href)
|
|
58
|
+
// 我想保存我修改后的文件?
|
|
59
|
+
// (你可以在dom元素事件函数中调用,这样可以使用一些最新的浏览器特性保存文件)
|
|
60
|
+
mxcad.saveFile()
|
|
61
|
+
})
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 示例参考
|
|
65
|
+
|
|
66
|
+
在git中查看示例 [github](https://github.com/mxcad/mxcad_docs/tree/master/examples)
|
|
67
|
+
| [gitee](https://gitee.com/mxcadx/mxcad_docs/tree/master/examples)
|
|
68
|
+
|
|
69
|
+
或者通过 执行以下命令查看所有实例
|
|
70
|
+
|
|
71
|
+
```sh
|
|
72
|
+
git clone https://github.com/mxcad/mxcad_docs
|
|
73
|
+
cd examples
|
|
74
|
+
npm install -g pnpm
|
|
75
|
+
pnpm install
|
|
76
|
+
pnpm run -r dev
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
你还可以通过[演练场](#演练场)在线编辑修改代码查看运行后的效果
|
|
80
|
+
|
|
81
|
+
## 在vite中使用
|
|
82
|
+
|
|
83
|
+
1.安装vite
|
|
84
|
+
|
|
85
|
+
```sh
|
|
86
|
+
npm install vite -D
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
2.在项目根目录新建html文件
|
|
90
|
+
|
|
91
|
+
```html
|
|
92
|
+
<!DOCTYPE html>
|
|
93
|
+
<html lang="en">
|
|
94
|
+
<head>
|
|
95
|
+
<meta charset="UTF-8">
|
|
96
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
97
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
98
|
+
<title>vite use mxcad</title>
|
|
99
|
+
</head>
|
|
100
|
+
<body>
|
|
101
|
+
<div style="height: 600px; overflow: hidden;"> <canvas id="myCanvas"></canvas></div>
|
|
102
|
+
<script type="module" src="./src/index.ts"></script>
|
|
103
|
+
</body>
|
|
104
|
+
</html>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
3.在根目录下新建`src`目录 在`src`目录下新建`index.ts`文件(vite默认支持ts)代码如下:
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
import { createMxCad } from "mxcad"
|
|
111
|
+
import { MxFun } from "mxdraw"
|
|
112
|
+
|
|
113
|
+
createMxCad({
|
|
114
|
+
canvas: "#myCanvas",
|
|
115
|
+
locateFile: (fileName)=> new URL(`/node_modules/mxcad/dist/wasm/2d/${fileName}`, import.meta.url).href,
|
|
116
|
+
fileUrl: new URL("../assets/test.mxweb", import.meta.url).href
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
4.在`src`目录下创建`assets`并复制`test.mxweb`文件到该目录下
|
|
122
|
+
|
|
123
|
+
5.在根目录下创建`vite.config.ts`文件
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
import { defineConfig } from "vite"
|
|
127
|
+
|
|
128
|
+
export default defineConfig({
|
|
129
|
+
server: {
|
|
130
|
+
headers: {
|
|
131
|
+
"Cross-Origin-Opener-Policy": "same-origin",
|
|
132
|
+
"Cross-Origin-Embedder-Policy": "require-corp",
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
})
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
6.完成以上步骤在根目录执行如下命令
|
|
139
|
+
|
|
140
|
+
```sh
|
|
141
|
+
npx vite
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## 在webpack中使用
|
|
145
|
+
|
|
146
|
+
1.安装
|
|
147
|
+
|
|
148
|
+
```sh
|
|
149
|
+
npm install webpack webpack-cli copy-webpack-plugin@5 -D
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
2.在根目录下创建`webpack.config.js`文件
|
|
153
|
+
|
|
154
|
+
```js
|
|
155
|
+
const path = require('path');
|
|
156
|
+
// copy-webpack-plugin@5 兼容webpack4和5的版本请放心使用
|
|
157
|
+
const CopyWebpackPlugin = require("copy-webpack-plugin");
|
|
158
|
+
|
|
159
|
+
module.exports = {
|
|
160
|
+
mode: process.env.development === "development" ? "development" : "production",
|
|
161
|
+
entry: './src/index.js',
|
|
162
|
+
devServer: {
|
|
163
|
+
static: './dist',
|
|
164
|
+
headers: {
|
|
165
|
+
"Cross-Origin-Opener-Policy": "same-origin",
|
|
166
|
+
"Cross-Origin-Embedder-Policy": "require-corp"
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
output: {
|
|
170
|
+
path: path.resolve(__dirname, 'dist'),
|
|
171
|
+
filename: 'main.js',
|
|
172
|
+
},
|
|
173
|
+
plugins: [
|
|
174
|
+
new CopyWebpackPlugin([
|
|
175
|
+
// 拷贝mxcad wasm 相关的核心代码 mxcad默认请求的路径是 /* 所有 需要把文件放dist2d下
|
|
176
|
+
{
|
|
177
|
+
from: "node_modules/mxcad/dist/wasm/2d/*",
|
|
178
|
+
to: path.resolve(__dirname, "dist"),
|
|
179
|
+
flatten: true
|
|
180
|
+
},
|
|
181
|
+
// 必须要字体文件来显示图纸中的文字,mxcad库默认请求URL路径为 /fonts/* 所有需要放在dist/fonts下
|
|
182
|
+
{
|
|
183
|
+
from: "node_modules/mxcad/dist/fonts",
|
|
184
|
+
to: path.resolve(__dirname, "dist/fonts"),
|
|
185
|
+
flatten: true,
|
|
186
|
+
toType: "dir"
|
|
187
|
+
},
|
|
188
|
+
])
|
|
189
|
+
],
|
|
190
|
+
// mxcad 和 mxdraw库的js代码打包超过webpack默认限制的大小,需要设置hints: false关闭警告
|
|
191
|
+
performance: {
|
|
192
|
+
hints: false,
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
3.在根目录新建`index.html`文件
|
|
198
|
+
|
|
199
|
+
```html
|
|
200
|
+
<!DOCTYPE html>
|
|
201
|
+
<html>
|
|
202
|
+
<head>
|
|
203
|
+
<meta charset="utf-8" />
|
|
204
|
+
<title>起步</title>
|
|
205
|
+
<script src="https://unpkg.com/lodash@4.17.20"></script>
|
|
206
|
+
</head>
|
|
207
|
+
<body>
|
|
208
|
+
<div style="height: 600px; overflow: hidden;"> <canvas id="myCanvas"></canvas></div>
|
|
209
|
+
<script src="./src/index.js"></script>
|
|
210
|
+
</body>
|
|
211
|
+
</html>
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
4.在根目录新建`src`目录 并在`src`目录下新建`index.js`文件
|
|
215
|
+
|
|
216
|
+
```js
|
|
217
|
+
createMxCad({
|
|
218
|
+
canvas: "#myCanvas",
|
|
219
|
+
// 通过需要访问:http:xxx.com/test.mxweb 获取对应的文件
|
|
220
|
+
// 请你自行提供该文件
|
|
221
|
+
fileUrl: "test.mxweb"
|
|
222
|
+
})
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
5.完成上述步骤执行`npx webpack serve`命令运行查看效果
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
## 在h5中直接使用
|
|
229
|
+
|
|
230
|
+
```html
|
|
231
|
+
<!DOCTYPE html>
|
|
232
|
+
<html lang="en">
|
|
233
|
+
|
|
234
|
+
<head>
|
|
235
|
+
<meta charset="UTF-8">
|
|
236
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
237
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
238
|
+
<title>Document</title>
|
|
239
|
+
|
|
240
|
+
<script src="https://unpkg.com/mxdraw" crossorigin="anonymous"></script>
|
|
241
|
+
<script src="https://unpkg.com/mxcad" crossorigin="anonymous"></script>
|
|
242
|
+
<script>
|
|
243
|
+
const { MxFun } = Mx
|
|
244
|
+
const { createMxCad } = mxcad
|
|
245
|
+
window.onload = function() {
|
|
246
|
+
createMxCad({
|
|
247
|
+
canvas: "#myCanvas",
|
|
248
|
+
locateFile(fileName) {
|
|
249
|
+
/***
|
|
250
|
+
* 你可以不设置locateFile属性,
|
|
251
|
+
* 默认通过该https://unpkg.com CDN加载或者无法使用SharedArrayBuffer的情况
|
|
252
|
+
* mxcad会自动引入2d-st的资源
|
|
253
|
+
* 2d与2d-st的区别就是2d-st未使用worker多线程优化,
|
|
254
|
+
* 导致在打开图纸时会阻塞js线程导致打开图纸过程中页面卡死的情况
|
|
255
|
+
* 推荐使用2d wasm资源,你需要在服务器设置响应头:
|
|
256
|
+
* "Cross-Origin-Opener-Policy": "same-origin",
|
|
257
|
+
* "Cross-Origin-Embedder-Policy": "require-corp"
|
|
258
|
+
*
|
|
259
|
+
* 并对于2d wasm资源遵从浏览器同源策略
|
|
260
|
+
* (也就是说 locateFile返回的url需要是和自己的服务器域名相同的域名端口才行)
|
|
261
|
+
* */
|
|
262
|
+
return "https://unpkg.com/mxcad/dist/wasm/2d-st/" + fileName
|
|
263
|
+
},
|
|
264
|
+
// 请自行在静态服务器上添加test.mxweb文件 如http://xxx.com/test.mxweb
|
|
265
|
+
fileUrl: "test.mxweb"
|
|
266
|
+
})
|
|
267
|
+
}
|
|
268
|
+
</script>
|
|
269
|
+
</head>
|
|
270
|
+
|
|
271
|
+
<body>
|
|
272
|
+
<div style="height: 600px; overflow: hidden;"> <canvas id="myCanvas" style="height: 300px"></canvas></div>
|
|
273
|
+
</body>
|
|
274
|
+
|
|
275
|
+
</html>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
## createMxCad 的实现
|
|
280
|
+
|
|
281
|
+
```tsx
|
|
282
|
+
// 这是createMxCad 实现的大致代码
|
|
283
|
+
// 如果你希望整个创建过程是透明公开的,
|
|
284
|
+
// 你可以不使用createMxCad 而是使用下面的代码自行创建
|
|
285
|
+
import { MxFun, loadCoreCode } from "mxdraw";
|
|
286
|
+
import { loadMxCADassembly } from "mxcad"
|
|
287
|
+
export default () => {
|
|
288
|
+
loadCoreCode()
|
|
289
|
+
.then(() => loadMxCADassembly((MxCpp)=> {
|
|
290
|
+
MxFun.setIniset({
|
|
291
|
+
EnableIntelliSelect: true
|
|
292
|
+
})
|
|
293
|
+
MxFun.createMxObject({
|
|
294
|
+
canvasId: "myCanvas",
|
|
295
|
+
isCPPMxCAD: true,
|
|
296
|
+
callback(mxDraw, dom) {
|
|
297
|
+
mxDraw.initRendererParam({ webgl2: true });
|
|
298
|
+
mxDraw.setMouseMiddlePan(true);
|
|
299
|
+
mxDraw.on("initObject", () => {
|
|
300
|
+
const THREE = MxFun.getMxFunTHREE()
|
|
301
|
+
let size = new THREE.Vector2();
|
|
302
|
+
mxDraw.getRenderer().getSize(size);
|
|
303
|
+
const mxcadObj = MxCpp.App.CreateMxCAD(size.width, size.height, "myCanvas", mxDraw.isWebgl2(), mxDraw.getId());
|
|
304
|
+
mxDraw.initMxCpp(mxcadObj);
|
|
305
|
+
mxcadObj.openWebFile("test2.mxweb");
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
})
|
|
309
|
+
}
|
|
310
|
+
,
|
|
311
|
+
(fileName: string)=> {
|
|
312
|
+
// CDN 加载必须使用wasm/2d-st中的资源、因为github的限制无法使用wasm/2d 资源
|
|
313
|
+
// 需要使用wasm/2d需要遵循浏览器同源策略或使用其他手段规避浏览器同源策略
|
|
314
|
+
return "https://unpkg.com/mxcad/dist/wasm/2d-st/" + fileName
|
|
315
|
+
}),
|
|
316
|
+
)
|
|
317
|
+
return (<div style="height: 600px; overflow: hidden;"><canvas id="myCanvas" style="height: 300px"></canvas></div>)
|
|
318
|
+
}
|
|
319
|
+
|
|
3
320
|
|
|
4
|
-
```bash
|
|
5
|
-
npm install mxcad
|
|
6
321
|
```
|
|
7
322
|
|
|
8
|
-
* 需要配置和mxdraw使用
|