mxcad 1.0.50 → 1.0.52

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 CHANGED
@@ -1,8 +1,322 @@
1
1
 
2
- # mxcad 文档
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使用