@soonspacejs/plugin-drawing-shape 2.13.5 → 2.13.7

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,5 +1,5 @@
1
- # @soonspacejs/plugin-drawing-shape
2
-
3
- > Drawing-shape plugin for SoonSpace.js
4
-
5
- Document: [http://www.xwbuilders.com:8800/plugin/drawing-shape.html](http://www.xwbuilders.com:8800/plugin/drawing-shape.html)
1
+ # @soonspacejs/plugin-drawing-shape
2
+
3
+ > Drawing-shape plugin for SoonSpace.js
4
+
5
+ Document: [http://www.xwbuilders.com:8800/plugin/drawing-shape.html](http://www.xwbuilders.com:8800/plugin/drawing-shape.html)
package/dist/index.esm.js CHANGED
@@ -1 +1,394 @@
1
- import s from"soonspacejs";const{utils:i}=s,t={canvas:"drawingCanvas"+i.randomString(),point:"drawingPoint"+i.randomString(),line:"drawingLine"+i.randomString(),polygon:"drawingPolygon"+i.randomString(),circle:"drawingCircle"+i.randomString()};class e{constructor(s){this.ssp=s,this.blankIntersect=!0,this.drawingLayer=21,this.viewport=s.viewport}getFirstIntersect(s,i){const t=(Array.isArray(i)?i:i?[i]:[]).filter((s=>s));this.configLayer(t);const e=this.ssp.viewport.getIntersects(s);return this.recoverLayer(t),e[0]}configLayer(s){var i;const t=null!==(i=this.drawingLayer)&&void 0!==i?i:21,e=this.ssp.viewport.camera;e.oriMask=e.layers.mask,e.layers.enable(t);const n=Array.isArray(s)?s:[s];for(const s of n)s.oriMask=s.layers.mask,s.layers.set(t)}recoverLayer(s){const i=this.ssp.viewport.camera;i.oriMask&&(i.layers.mask=i.oriMask,i.oriMask=void 0);const t=Array.isArray(s)?s:[s];for(const s of t){const i=s.oriMask;i&&(s.layers.mask=i,s.oriMask=void 0)}}drawingPoint(s,i){return new Promise(((e,n)=>{this.clearDrawingCanvas3D();const a=this.ssp.createCanvas3D({id:t.canvas,points:[Object.assign(Object.assign({},s),{id:t.point})]});this.ssp.addObject(a);const o=a.getPoint(t.point);if(!o)return n();const r=s=>{if(!o)return;const i=this.getFirstIntersect(s,o),t=i?i.point.clone():this.blankIntersect&&this.ssp.getPositionByOffset(s);t&&(o.position.copy(t),this.ssp.render())},c=i=>{if(g(),!o)return;const t=this.getFirstIntersect(i,o),n=t?t.point.clone():this.blankIntersect&&this.ssp.getPositionByOffset(i);n&&(o.position.copy(n),this.ssp.render(),e(Object.assign(Object.assign({},s),{position:n.clone()})))},l=()=>{var s;this.clearDrawingCanvas3D(),g(),null===(s=null==i?void 0:i.onCancel)||void 0===s||s.call(i)},p=s=>{if("Escape"===s.code)l()},g=()=>{this.ssp.signals.mouseMove.remove(r),this.ssp.signals.click.remove(c),this.ssp.signals.rightClick.remove(l),this.ssp.signals.keyUp.remove(p)};this.ssp.signals.mouseMove.add(r),this.ssp.signals.click.add(c),this.ssp.signals.rightClick.add(l),this.ssp.signals.keyUp.add(p)}))}drawingLine(s,i){const{offsetY:e=.01}=s;return new Promise((n=>{this.clearDrawingCanvas3D();const a=this.ssp.createCanvas3D({id:t.canvas,lines:[Object.assign(Object.assign({},s),{points:[],id:t.line})]});this.ssp.addObject(a);const o=a.getLine(t.line),r=[],c=i=>{const t=this.getFirstIntersect(i,o),n=t?t.point.clone():this.blankIntersect&&this.ssp.getPositionByOffset(i);n&&o&&(o.setOptions(Object.assign(Object.assign({},s),{points:[...r,n.clone().setY(n.y+e)]})),this.ssp.render())},l=i=>{const t=this.getFirstIntersect(i,o),n=t?t.point.clone():this.blankIntersect&&this.ssp.getPositionByOffset(i);n&&(r.push(n.clone().setY(n.y+e)),o&&o.setOptions(Object.assign(Object.assign({},s),{points:r})))},p=()=>{var t;r.pop(),o&&(o.setOptions(Object.assign(Object.assign({},s),{points:r})),null===(t=null==i?void 0:i.onCancelPrev)||void 0===t||t.call(i))},g=i=>{const t=this.getFirstIntersect(i,o),a=t?t.point.clone():this.blankIntersect&&this.ssp.getPositionByOffset(i);a&&(r.push(a.clone().setY(a.y+e)),d(),n(Object.assign(Object.assign({},s),{points:r})))},h=s=>{var t;switch(s.code){case"Backspace":p();break;case"Escape":this.clearDrawingCanvas3D(),d(),null===(t=null==i?void 0:i.onCancel)||void 0===t||t.call(i)}},d=()=>{this.ssp.signals.mouseMove.remove(c),this.ssp.signals.click.remove(l),this.ssp.signals.rightClick.remove(p),this.ssp.signals.dblClick.remove(g),this.ssp.signals.keyUp.remove(h)};this.ssp.signals.mouseMove.add(c),this.ssp.signals.click.add(l),this.ssp.signals.rightClick.add(p),this.ssp.signals.dblClick.add(g),this.ssp.signals.keyUp.add(h)}))}drawingPolygon(s,i){const{offsetY:e=.01}=s;return new Promise((n=>{this.clearDrawingCanvas3D();const a=this.ssp.createCanvas3D({id:t.canvas,polygons:[Object.assign(Object.assign({points:[],yHeight:0},s),{id:t.polygon})],lines:[Object.assign(Object.assign({points:[],width:2},s),{id:t.line})]});this.ssp.addObject(a);const o=a.getPolygon(t.polygon),r=a.getLine(t.line),c=[],l=s=>{var i;const n=this.getFirstIntersect(s,[r,o]),l=n?n.point.clone():this.blankIntersect&&this.ssp.getPositionByOffset(s);if(!l)return;if(!o)return;const p=[...c,l];p.length>2?a.removeLine(t.line):null==r||r.setOptions({points:p}),o.setOptions({yHeight:((null===(i=c[0])||void 0===i?void 0:i.y)||l.y)+e,points:p})},p=i=>{var t;const n=this.getFirstIntersect(i,[r,o]),a=n?n.point.clone():this.blankIntersect&&this.ssp.getPositionByOffset(i);a&&(c.push(a.clone().setY(a.y+e)),o&&o.setOptions(Object.assign(Object.assign({},s),{yHeight:((null===(t=c[0])||void 0===t?void 0:t.y)||0)+e,points:c})))},g=()=>{var t,n;c.pop(),o&&(o.setOptions(Object.assign(Object.assign({},s),{yHeight:((null===(t=c[0])||void 0===t?void 0:t.y)||0)+e,points:c})),null===(n=null==i?void 0:i.onCancelPrev)||void 0===n||n.call(i))},h=i=>{var t;const a=this.getFirstIntersect(i,[r,o]),l=a?a.point.clone():this.blankIntersect&&this.ssp.getPositionByOffset(i);l&&(c.push(l.clone().setY(l.y+e)),v(),n(Object.assign(Object.assign({},s),{yHeight:((null===(t=c[0])||void 0===t?void 0:t.y)||0)+e,points:c})))},d=s=>{var t;switch(s.code){case"Backspace":g();break;case"Escape":this.clearDrawingCanvas3D(),v(),null===(t=null==i?void 0:i.onCancel)||void 0===t||t.call(i)}},v=()=>{this.ssp.signals.mouseMove.remove(l),this.ssp.signals.click.remove(p),this.ssp.signals.rightClick.remove(g),this.ssp.signals.dblClick.remove(h),this.ssp.signals.keyUp.remove(d)};this.ssp.signals.mouseMove.add(l),this.ssp.signals.click.add(p),this.ssp.signals.rightClick.add(g),this.ssp.signals.dblClick.add(h),this.ssp.signals.keyUp.add(d)}))}drawingCircle(s,i){const{offsetY:e=.01}=s;return new Promise((n=>{this.clearDrawingCanvas3D();const a=this.ssp.createCanvas3D({id:t.canvas,circles:[Object.assign(Object.assign({},s),{id:t.circle})]});this.ssp.addObject(a);const o=a.getCircle(t.circle);let r,c=100;const l=s=>{if(!o||!r)return;const i=this.getFirstIntersect(s,o),t=i?i.point.clone():this.blankIntersect&&this.ssp.getPositionByOffset(s);t&&(c=t.distanceTo(r),o.setOptions({radius:c}),o.position.copy(r))},p=i=>{if(!o)return;const t=this.getFirstIntersect(i,o),a=t?t.point.clone():this.blankIntersect&&this.ssp.getPositionByOffset(i);a&&(r?(d(),c=a.distanceTo(this.ssp.utils.IVector3ToVector3(r)),o.setOptions({radius:c}),o.position.copy(r),n(Object.assign(Object.assign({},s),{position:r,radius:c}))):r=a.clone().setY(a.y+e))},g=()=>{var s;this.clearDrawingCanvas3D(),d(),null===(s=null==i?void 0:i.onCancel)||void 0===s||s.call(i)},h=s=>{if("Escape"===s.code)g()},d=()=>{this.ssp.signals.mouseMove.remove(l),this.ssp.signals.click.remove(p),this.ssp.signals.rightClick.remove(g),this.ssp.signals.keyUp.remove(h)};this.ssp.signals.mouseMove.add(l),this.ssp.signals.click.add(p),this.ssp.signals.rightClick.add(g),this.ssp.signals.keyUp.add(h)}))}clearDrawingCanvas3D(){this.ssp.removeObjectById(t.canvas)}}export{e as default};
1
+ import SoonSpace from 'soonspacejs';
2
+
3
+ const { utils, } = SoonSpace;
4
+ const DrawingIds = {
5
+ canvas: 'drawingCanvas' + utils.randomString(),
6
+ point: 'drawingPoint' + utils.randomString(),
7
+ line: 'drawingLine' + utils.randomString(),
8
+ polygon: 'drawingPolygon' + utils.randomString(),
9
+ circle: 'drawingCircle' + utils.randomString(),
10
+ };
11
+ class DrawIngShapePlugin {
12
+ constructor(ssp) {
13
+ this.ssp = ssp;
14
+ // 是否允许点击空白处绘制
15
+ this.blankIntersect = true;
16
+ /**
17
+ * 绘图时使用的临时 layer
18
+ */
19
+ this.drawingLayer = 21;
20
+ this.viewport = ssp.viewport;
21
+ }
22
+ getFirstIntersect(event, drawingObj) {
23
+ const drawingObjs = Array.isArray(drawingObj) ?
24
+ drawingObj :
25
+ drawingObj ?
26
+ [drawingObj] :
27
+ [];
28
+ const objArr = drawingObjs.filter((obj) => obj);
29
+ this.configLayer(objArr);
30
+ const intersects = this.ssp.viewport.getIntersects(event);
31
+ this.recoverLayer(objArr);
32
+ return intersects[0];
33
+ }
34
+ configLayer(drawingObj) {
35
+ var _a;
36
+ const drawingLayer = (_a = this.drawingLayer) !== null && _a !== void 0 ? _a : 21;
37
+ const camera = this.ssp.viewport.camera;
38
+ camera.oriMask = camera.layers.mask;
39
+ camera.layers.enable(drawingLayer);
40
+ const drawingObjs = Array.isArray(drawingObj) ? drawingObj : [drawingObj];
41
+ for (const obj of drawingObjs) {
42
+ obj.oriMask = obj.layers.mask;
43
+ obj.layers.set(drawingLayer);
44
+ }
45
+ }
46
+ recoverLayer(drawingObj) {
47
+ const camera = this.ssp.viewport.camera;
48
+ const cameraMask = camera.oriMask;
49
+ if (cameraMask) {
50
+ camera.layers.mask = camera.oriMask;
51
+ camera.oriMask = undefined;
52
+ }
53
+ const drawingObjs = Array.isArray(drawingObj) ? drawingObj : [drawingObj];
54
+ for (const obj of drawingObjs) {
55
+ const mask = obj.oriMask;
56
+ if (mask) {
57
+ obj.layers.mask = mask;
58
+ obj.oriMask = undefined;
59
+ }
60
+ }
61
+ }
62
+ drawingPoint(options, events) {
63
+ return new Promise((resolve, reject) => {
64
+ this.clearDrawingCanvas3D();
65
+ const canvas = this.ssp.createCanvas3D({
66
+ id: DrawingIds.canvas,
67
+ points: [
68
+ Object.assign(Object.assign({}, options), { id: DrawingIds.point })
69
+ ],
70
+ });
71
+ this.ssp.addObject(canvas);
72
+ const point = canvas.getPoint(DrawingIds.point);
73
+ if (!point)
74
+ return reject();
75
+ const onMouseMove = (event) => {
76
+ if (!point)
77
+ return;
78
+ const intersect = this.getFirstIntersect(event, point);
79
+ const position = intersect ?
80
+ intersect.point.clone() :
81
+ this.blankIntersect && this.ssp.getPositionByOffset(event);
82
+ if (!position)
83
+ return;
84
+ point.position.copy(position);
85
+ this.ssp.render();
86
+ };
87
+ const onClick = (event) => {
88
+ removeSignals();
89
+ if (!point)
90
+ return;
91
+ const intersect = this.getFirstIntersect(event, point);
92
+ const position = intersect ?
93
+ intersect.point.clone() :
94
+ this.blankIntersect && this.ssp.getPositionByOffset(event);
95
+ if (!position)
96
+ return;
97
+ point.position.copy(position);
98
+ this.ssp.render();
99
+ resolve(Object.assign(Object.assign({}, options), { position: position.clone() }));
100
+ };
101
+ const onRightClick = () => {
102
+ var _a;
103
+ this.clearDrawingCanvas3D();
104
+ removeSignals();
105
+ (_a = events === null || events === void 0 ? void 0 : events.onCancel) === null || _a === void 0 ? void 0 : _a.call(events);
106
+ };
107
+ const onKeyUp = (event) => {
108
+ switch (event.code) {
109
+ case 'Escape':
110
+ onRightClick();
111
+ break;
112
+ }
113
+ };
114
+ const removeSignals = () => {
115
+ this.ssp.signals.mouseMove.remove(onMouseMove);
116
+ this.ssp.signals.click.remove(onClick);
117
+ this.ssp.signals.rightClick.remove(onRightClick);
118
+ this.ssp.signals.keyUp.remove(onKeyUp);
119
+ };
120
+ this.ssp.signals.mouseMove.add(onMouseMove);
121
+ this.ssp.signals.click.add(onClick);
122
+ this.ssp.signals.rightClick.add(onRightClick);
123
+ this.ssp.signals.keyUp.add(onKeyUp);
124
+ });
125
+ }
126
+ drawingLine(options, events) {
127
+ const { offsetY = 0.01, } = options;
128
+ return new Promise((resolve) => {
129
+ this.clearDrawingCanvas3D();
130
+ const canvas = this.ssp.createCanvas3D({
131
+ id: DrawingIds.canvas,
132
+ lines: [
133
+ Object.assign(Object.assign({}, options), { points: [], id: DrawingIds.line })
134
+ ],
135
+ });
136
+ this.ssp.addObject(canvas);
137
+ const line = canvas.getLine(DrawingIds.line);
138
+ const linePoints = [];
139
+ const onMouseMove = (event) => {
140
+ const intersects = this.getFirstIntersect(event, line);
141
+ const position = intersects ?
142
+ intersects.point.clone() :
143
+ this.blankIntersect && this.ssp.getPositionByOffset(event);
144
+ if (!position)
145
+ return;
146
+ if (!line)
147
+ return;
148
+ line.setOptions(Object.assign(Object.assign({}, options), { points: [...linePoints, position.clone().setY(position.y + offsetY)] }));
149
+ this.ssp.render();
150
+ };
151
+ const onClick = (event) => {
152
+ const intersects = this.getFirstIntersect(event, line);
153
+ const position = intersects ?
154
+ intersects.point.clone() :
155
+ this.blankIntersect && this.ssp.getPositionByOffset(event);
156
+ if (!position)
157
+ return;
158
+ linePoints.push(position.clone().setY(position.y + offsetY));
159
+ if (!line)
160
+ return;
161
+ line.setOptions(Object.assign(Object.assign({}, options), { points: linePoints }));
162
+ };
163
+ const onRightClick = () => {
164
+ var _a;
165
+ linePoints.pop();
166
+ if (!line)
167
+ return;
168
+ line.setOptions(Object.assign(Object.assign({}, options), { points: linePoints }));
169
+ (_a = events === null || events === void 0 ? void 0 : events.onCancelPrev) === null || _a === void 0 ? void 0 : _a.call(events);
170
+ };
171
+ const onDblClick = (event) => {
172
+ const intersects = this.getFirstIntersect(event, line);
173
+ const position = intersects ?
174
+ intersects.point.clone() :
175
+ this.blankIntersect && this.ssp.getPositionByOffset(event);
176
+ if (!position)
177
+ return;
178
+ linePoints.push(position.clone().setY(position.y + offsetY));
179
+ removeSignals();
180
+ resolve(Object.assign(Object.assign({}, options), { points: linePoints }));
181
+ };
182
+ const onKeyUp = (event) => {
183
+ var _a;
184
+ switch (event.code) {
185
+ case 'Backspace':
186
+ onRightClick();
187
+ break;
188
+ case 'Escape':
189
+ this.clearDrawingCanvas3D();
190
+ removeSignals();
191
+ (_a = events === null || events === void 0 ? void 0 : events.onCancel) === null || _a === void 0 ? void 0 : _a.call(events);
192
+ break;
193
+ }
194
+ };
195
+ const removeSignals = () => {
196
+ this.ssp.signals.mouseMove.remove(onMouseMove);
197
+ this.ssp.signals.click.remove(onClick);
198
+ this.ssp.signals.rightClick.remove(onRightClick);
199
+ this.ssp.signals.dblClick.remove(onDblClick);
200
+ this.ssp.signals.keyUp.remove(onKeyUp);
201
+ };
202
+ this.ssp.signals.mouseMove.add(onMouseMove);
203
+ this.ssp.signals.click.add(onClick);
204
+ this.ssp.signals.rightClick.add(onRightClick);
205
+ this.ssp.signals.dblClick.add(onDblClick);
206
+ this.ssp.signals.keyUp.add(onKeyUp);
207
+ });
208
+ }
209
+ drawingPolygon(options, events) {
210
+ const { offsetY = 0.01, } = options;
211
+ return new Promise((resolve) => {
212
+ this.clearDrawingCanvas3D();
213
+ const canvas = this.ssp.createCanvas3D({
214
+ id: DrawingIds.canvas,
215
+ polygons: [
216
+ Object.assign(Object.assign({ points: [], yHeight: 0 }, options), { id: DrawingIds.polygon })
217
+ ],
218
+ lines: [
219
+ Object.assign(Object.assign({ points: [], width: 2 }, options), { id: DrawingIds.line })
220
+ ],
221
+ });
222
+ this.ssp.addObject(canvas);
223
+ const polygon = canvas.getPolygon(DrawingIds.polygon);
224
+ const line = canvas.getLine(DrawingIds.line);
225
+ const polygonPoints = [];
226
+ const omMouseMove = (event) => {
227
+ var _a;
228
+ const intersects = this.getFirstIntersect(event, [line, polygon]);
229
+ const position = intersects ?
230
+ intersects.point.clone() :
231
+ this.blankIntersect && this.ssp.getPositionByOffset(event);
232
+ if (!position)
233
+ return;
234
+ if (!polygon)
235
+ return;
236
+ const movingPolygonPoints = [...polygonPoints, position];
237
+ if (movingPolygonPoints.length > 2) {
238
+ canvas.removeLine(DrawingIds.line);
239
+ }
240
+ else {
241
+ line === null || line === void 0 ? void 0 : line.setOptions({
242
+ points: movingPolygonPoints,
243
+ });
244
+ }
245
+ polygon.setOptions({
246
+ yHeight: (((_a = polygonPoints[0]) === null || _a === void 0 ? void 0 : _a.y) || position.y) + offsetY,
247
+ points: movingPolygonPoints,
248
+ });
249
+ };
250
+ const onClick = (event) => {
251
+ var _a;
252
+ const intersects = this.getFirstIntersect(event, [line, polygon]);
253
+ const position = intersects ?
254
+ intersects.point.clone() :
255
+ this.blankIntersect && this.ssp.getPositionByOffset(event);
256
+ if (!position)
257
+ return;
258
+ polygonPoints.push(position.clone().setY(position.y + offsetY));
259
+ if (!polygon)
260
+ return;
261
+ polygon.setOptions(Object.assign(Object.assign({}, options), { yHeight: (((_a = polygonPoints[0]) === null || _a === void 0 ? void 0 : _a.y) || 0) + offsetY, points: polygonPoints }));
262
+ };
263
+ const onRightClick = () => {
264
+ var _a, _b;
265
+ polygonPoints.pop();
266
+ if (!polygon)
267
+ return;
268
+ polygon.setOptions(Object.assign(Object.assign({}, options), { yHeight: (((_a = polygonPoints[0]) === null || _a === void 0 ? void 0 : _a.y) || 0) + offsetY, points: polygonPoints }));
269
+ (_b = events === null || events === void 0 ? void 0 : events.onCancelPrev) === null || _b === void 0 ? void 0 : _b.call(events);
270
+ };
271
+ const onDblClick = (event) => {
272
+ var _a;
273
+ const intersects = this.getFirstIntersect(event, [line, polygon]);
274
+ const position = intersects ?
275
+ intersects.point.clone() :
276
+ this.blankIntersect && this.ssp.getPositionByOffset(event);
277
+ if (!position)
278
+ return;
279
+ polygonPoints.push(position.clone().setY(position.y + offsetY));
280
+ removeSignals();
281
+ resolve(Object.assign(Object.assign({}, options), { yHeight: (((_a = polygonPoints[0]) === null || _a === void 0 ? void 0 : _a.y) || 0) + offsetY, points: polygonPoints }));
282
+ };
283
+ const onKeyUp = (event) => {
284
+ var _a;
285
+ switch (event.code) {
286
+ case 'Backspace':
287
+ onRightClick();
288
+ break;
289
+ case 'Escape':
290
+ this.clearDrawingCanvas3D();
291
+ removeSignals();
292
+ (_a = events === null || events === void 0 ? void 0 : events.onCancel) === null || _a === void 0 ? void 0 : _a.call(events);
293
+ break;
294
+ }
295
+ };
296
+ const removeSignals = () => {
297
+ this.ssp.signals.mouseMove.remove(omMouseMove);
298
+ this.ssp.signals.click.remove(onClick);
299
+ this.ssp.signals.rightClick.remove(onRightClick);
300
+ this.ssp.signals.dblClick.remove(onDblClick);
301
+ this.ssp.signals.keyUp.remove(onKeyUp);
302
+ };
303
+ this.ssp.signals.mouseMove.add(omMouseMove);
304
+ this.ssp.signals.click.add(onClick);
305
+ this.ssp.signals.rightClick.add(onRightClick);
306
+ this.ssp.signals.dblClick.add(onDblClick);
307
+ this.ssp.signals.keyUp.add(onKeyUp);
308
+ });
309
+ }
310
+ drawingCircle(options, events) {
311
+ const { offsetY = 0.01, } = options;
312
+ return new Promise((resolve) => {
313
+ this.clearDrawingCanvas3D();
314
+ const canvas = this.ssp.createCanvas3D({
315
+ id: DrawingIds.canvas,
316
+ circles: [
317
+ Object.assign(Object.assign({}, options), { id: DrawingIds.circle })
318
+ ],
319
+ });
320
+ this.ssp.addObject(canvas);
321
+ const circle = canvas.getCircle(DrawingIds.circle);
322
+ let position;
323
+ let radius = 100;
324
+ const onMouseMove = (event) => {
325
+ if (!circle || !position)
326
+ return;
327
+ const intersects = this.getFirstIntersect(event, circle);
328
+ const mouseMovePosition = intersects ?
329
+ intersects.point.clone() :
330
+ this.blankIntersect && this.ssp.getPositionByOffset(event);
331
+ if (!mouseMovePosition)
332
+ return;
333
+ radius = mouseMovePosition.distanceTo(position);
334
+ circle.setOptions({
335
+ radius,
336
+ });
337
+ circle.position.copy(position);
338
+ };
339
+ const onClick = (event) => {
340
+ if (!circle)
341
+ return;
342
+ const intersects = this.getFirstIntersect(event, circle);
343
+ const mouseMovePosition = intersects ?
344
+ intersects.point.clone() :
345
+ this.blankIntersect && this.ssp.getPositionByOffset(event);
346
+ if (!mouseMovePosition)
347
+ return;
348
+ if (!position)
349
+ position = mouseMovePosition
350
+ .clone()
351
+ .setY(mouseMovePosition.y + offsetY);
352
+ else {
353
+ removeSignals();
354
+ radius = mouseMovePosition.distanceTo(this.ssp.utils.IVector3ToVector3(position));
355
+ circle.setOptions({
356
+ radius,
357
+ });
358
+ circle.position.copy(position);
359
+ resolve(Object.assign(Object.assign({}, options), { position,
360
+ radius }));
361
+ }
362
+ };
363
+ const onRightClick = () => {
364
+ var _a;
365
+ this.clearDrawingCanvas3D();
366
+ removeSignals();
367
+ (_a = events === null || events === void 0 ? void 0 : events.onCancel) === null || _a === void 0 ? void 0 : _a.call(events);
368
+ };
369
+ const onKeyUp = (event) => {
370
+ switch (event.code) {
371
+ case 'Escape':
372
+ onRightClick();
373
+ break;
374
+ }
375
+ };
376
+ const removeSignals = () => {
377
+ this.ssp.signals.mouseMove.remove(onMouseMove);
378
+ this.ssp.signals.click.remove(onClick);
379
+ this.ssp.signals.rightClick.remove(onRightClick);
380
+ this.ssp.signals.keyUp.remove(onKeyUp);
381
+ };
382
+ this.ssp.signals.mouseMove.add(onMouseMove);
383
+ this.ssp.signals.click.add(onClick);
384
+ this.ssp.signals.rightClick.add(onRightClick);
385
+ this.ssp.signals.keyUp.add(onKeyUp);
386
+ });
387
+ }
388
+ clearDrawingCanvas3D() {
389
+ this.ssp.removeObjectById(DrawingIds.canvas);
390
+ }
391
+ }
392
+
393
+ export { DrawIngShapePlugin as default };
394
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":["import SoonSpace, { Position, } from 'soonspacejs'\r\nimport type {\r\n SetOptionsPointInfo,\r\n SetOptionsLineInfo,\r\n SetOptionsPolygonInfo,\r\n SetOptionsCircleInfo,\r\n} from 'soonspacejs'\r\nimport type { Vector3, Object3D, } from 'three'\r\n\r\nexport type DrawingPointInfo = SetOptionsPointInfo\r\nexport interface DrawingPointEvents {\r\n onCancel?: () => void;\r\n}\r\n\r\nexport type DrawingLineInfo = Omit<SetOptionsLineInfo, 'points'> & {\r\n offsetY?: number;\r\n}\r\nexport interface DrawingLineEvents {\r\n onCancel?: () => void;\r\n onCancelPrev?: () => void;\r\n}\r\n\r\nexport type DrawingPolygonInfo = Omit<\r\n SetOptionsPolygonInfo,\r\n 'points' | 'yHeight'\r\n> & { width?: number | undefined; offsetY?: number }\r\nexport interface DrawingPolygonEvents {\r\n onCancel?: () => void;\r\n onCancelPrev?: () => void;\r\n}\r\n\r\nexport type DrawingCircleInfo = Omit<SetOptionsCircleInfo, 'radius'> & {\r\n offsetY?: number;\r\n}\r\nexport interface DrawingCircleEvents {\r\n onCancel?: () => void;\r\n}\r\n\r\nconst { utils, } = SoonSpace\r\n\r\nconst DrawingIds = {\r\n canvas: 'drawingCanvas' + utils.randomString(),\r\n point: 'drawingPoint' + utils.randomString(),\r\n line: 'drawingLine' + utils.randomString(),\r\n polygon: 'drawingPolygon' + utils.randomString(),\r\n circle: 'drawingCircle' + utils.randomString(),\r\n}\r\n\r\nexport default class DrawIngShapePlugin {\r\n\r\n // 是否允许点击空白处绘制\r\n blankIntersect = true\r\n\r\n readonly viewport: SoonSpace['viewport']\r\n\r\n constructor ( readonly ssp: SoonSpace ) {\r\n\r\n this.viewport = ssp.viewport\r\n \r\n }\r\n\r\n getFirstIntersect (\r\n event: MouseEvent,\r\n drawingObj?: ( Object3D | null )[] | Object3D | null\r\n ) {\r\n\r\n const drawingObjs = Array.isArray( drawingObj ) ?\r\n drawingObj :\r\n drawingObj ?\r\n [ drawingObj ] :\r\n []\r\n\r\n const objArr = drawingObjs.filter( ( obj ) => obj ) as Object3D[]\r\n\r\n this.configLayer( objArr )\r\n const intersects = this.ssp.viewport.getIntersects( event )\r\n\r\n this.recoverLayer( objArr )\r\n return intersects[ 0 ]\r\n \r\n }\r\n\r\n /**\r\n * 绘图时使用的临时 layer\r\n */\r\n drawingLayer = 21\r\n\r\n configLayer ( drawingObj: Object3D[] | Object3D ) {\r\n\r\n const drawingLayer = this.drawingLayer ?? 21\r\n\r\n const camera = this.ssp.viewport.camera;\r\n\r\n ( camera as any ).oriMask = camera.layers.mask\r\n camera.layers.enable( drawingLayer )\r\n\r\n const drawingObjs = Array.isArray( drawingObj ) ? drawingObj : [ drawingObj ]\r\n\r\n for ( const obj of drawingObjs ) {\r\n\r\n ( obj as any ).oriMask = obj.layers.mask\r\n obj.layers.set( drawingLayer )\r\n \r\n }\r\n \r\n }\r\n\r\n recoverLayer ( drawingObj: Object3D[] | Object3D ) {\r\n\r\n const camera = this.ssp.viewport.camera\r\n\r\n const cameraMask = ( camera as any ).oriMask\r\n\r\n if ( cameraMask ) {\r\n\r\n camera.layers.mask = ( camera as any ).oriMask;\r\n ( camera as any ).oriMask = undefined\r\n \r\n }\r\n\r\n const drawingObjs = Array.isArray( drawingObj ) ? drawingObj : [ drawingObj ]\r\n\r\n for ( const obj of drawingObjs ) {\r\n\r\n const mask = ( obj as any ).oriMask\r\n\r\n if ( mask ) {\r\n\r\n obj.layers.mask = mask;\r\n ( obj as any ).oriMask = undefined\r\n \r\n }\r\n \r\n }\r\n \r\n }\r\n\r\n drawingPoint (\r\n options: DrawingPointInfo,\r\n events?: DrawingPointEvents\r\n ): Promise<SetOptionsPointInfo & {position: Vector3}> {\r\n\r\n return new Promise( ( resolve, reject ) => {\r\n\r\n this.clearDrawingCanvas3D()\r\n\r\n const canvas = this.ssp.createCanvas3D( {\r\n id: DrawingIds.canvas,\r\n points: [\r\n {\r\n ...options,\r\n id: DrawingIds.point,\r\n }\r\n ],\r\n } )\r\n\r\n this.ssp.addObject( canvas )\r\n\r\n const point = canvas.getPoint( DrawingIds.point )\r\n\r\n if ( !point ) return reject()\r\n\r\n const onMouseMove = ( event: MouseEvent ) => {\r\n\r\n if ( !point ) return\r\n\r\n const intersect = this.getFirstIntersect( event, point )\r\n const position = intersect ?\r\n intersect.point.clone() :\r\n this.blankIntersect && this.ssp.getPositionByOffset( event )\r\n\r\n if ( !position ) return \r\n\r\n point.position.copy( position )\r\n this.ssp.render()\r\n \r\n }\r\n\r\n const onClick = ( event: MouseEvent ) => {\r\n\r\n removeSignals()\r\n\r\n if ( !point ) return\r\n\r\n const intersect = this.getFirstIntersect( event, point )\r\n const position = intersect ?\r\n intersect.point.clone() :\r\n this.blankIntersect && this.ssp.getPositionByOffset( event )\r\n\r\n if ( !position ) return \r\n\r\n point.position.copy( position )\r\n this.ssp.render()\r\n\r\n resolve( {\r\n ...options,\r\n position: position.clone(),\r\n } )\r\n \r\n }\r\n\r\n const onRightClick = () => {\r\n\r\n this.clearDrawingCanvas3D()\r\n removeSignals()\r\n\r\n events?.onCancel?.()\r\n \r\n }\r\n\r\n const onKeyUp = ( event: KeyboardEvent ) => {\r\n\r\n switch ( event.code ) {\r\n\r\n case 'Escape':\r\n onRightClick()\r\n break\r\n \r\n }\r\n \r\n }\r\n\r\n const removeSignals = () => {\r\n\r\n this.ssp.signals.mouseMove.remove( onMouseMove )\r\n this.ssp.signals.click.remove( onClick )\r\n this.ssp.signals.rightClick.remove( onRightClick )\r\n this.ssp.signals.keyUp.remove( onKeyUp )\r\n \r\n }\r\n\r\n this.ssp.signals.mouseMove.add( onMouseMove )\r\n this.ssp.signals.click.add( onClick )\r\n this.ssp.signals.rightClick.add( onRightClick )\r\n this.ssp.signals.keyUp.add( onKeyUp )\r\n \r\n } )\r\n \r\n }\r\n\r\n drawingLine (\r\n options: DrawingLineInfo,\r\n events?: DrawingLineEvents\r\n ): Promise<SetOptionsLineInfo> {\r\n\r\n const { offsetY = 0.01, } = options\r\n\r\n return new Promise( ( resolve ) => {\r\n\r\n this.clearDrawingCanvas3D()\r\n\r\n const canvas = this.ssp.createCanvas3D( {\r\n id: DrawingIds.canvas,\r\n lines: [\r\n {\r\n ...options,\r\n points: [],\r\n id: DrawingIds.line,\r\n }\r\n ],\r\n } )\r\n\r\n this.ssp.addObject( canvas )\r\n\r\n const line = canvas.getLine( DrawingIds.line )\r\n const linePoints: Position[] = []\r\n\r\n const onMouseMove = ( event: MouseEvent ) => {\r\n\r\n const intersects = this.getFirstIntersect( event, line )\r\n const position = intersects ?\r\n intersects.point.clone() :\r\n this.blankIntersect && this.ssp.getPositionByOffset( event )\r\n\r\n if ( !position ) return \r\n\r\n if ( !line ) return\r\n\r\n line.setOptions( {\r\n ...options,\r\n points: [ ...linePoints, position.clone().setY( position.y + offsetY ) ],\r\n } )\r\n this.ssp.render()\r\n \r\n }\r\n\r\n const onClick = ( event: MouseEvent ) => {\r\n\r\n const intersects = this.getFirstIntersect( event, line )\r\n const position = intersects ?\r\n intersects.point.clone() :\r\n this.blankIntersect && this.ssp.getPositionByOffset( event )\r\n\r\n if ( !position ) return \r\n\r\n linePoints.push( position.clone().setY( position.y + offsetY ) )\r\n\r\n if ( !line ) return\r\n\r\n line.setOptions( {\r\n ...options,\r\n points: linePoints,\r\n } )\r\n \r\n }\r\n\r\n const onRightClick = () => {\r\n\r\n linePoints.pop()\r\n\r\n if ( !line ) return\r\n\r\n line.setOptions( {\r\n ...options,\r\n points: linePoints,\r\n } )\r\n\r\n events?.onCancelPrev?.()\r\n \r\n }\r\n\r\n const onDblClick = ( event: MouseEvent ) => {\r\n\r\n const intersects = this.getFirstIntersect( event, line )\r\n const position = intersects ?\r\n intersects.point.clone() :\r\n this.blankIntersect && this.ssp.getPositionByOffset( event )\r\n\r\n if ( !position ) return \r\n\r\n linePoints.push( position.clone().setY( position.y + offsetY ) )\r\n\r\n removeSignals()\r\n\r\n resolve( {\r\n ...options,\r\n points: linePoints,\r\n } )\r\n \r\n }\r\n\r\n const onKeyUp = ( event: KeyboardEvent ) => {\r\n\r\n switch ( event.code ) {\r\n\r\n case 'Backspace':\r\n onRightClick()\r\n break\r\n case 'Escape':\r\n this.clearDrawingCanvas3D()\r\n removeSignals()\r\n\r\n events?.onCancel?.()\r\n break\r\n \r\n }\r\n \r\n }\r\n\r\n const removeSignals = () => {\r\n\r\n this.ssp.signals.mouseMove.remove( onMouseMove )\r\n this.ssp.signals.click.remove( onClick )\r\n this.ssp.signals.rightClick.remove( onRightClick )\r\n this.ssp.signals.dblClick.remove( onDblClick )\r\n this.ssp.signals.keyUp.remove( onKeyUp )\r\n \r\n }\r\n\r\n this.ssp.signals.mouseMove.add( onMouseMove )\r\n this.ssp.signals.click.add( onClick )\r\n this.ssp.signals.rightClick.add( onRightClick )\r\n this.ssp.signals.dblClick.add( onDblClick )\r\n this.ssp.signals.keyUp.add( onKeyUp )\r\n \r\n } )\r\n \r\n }\r\n\r\n drawingPolygon (\r\n options: DrawingPolygonInfo,\r\n events?: DrawingPolygonEvents\r\n ): Promise<SetOptionsPolygonInfo> {\r\n\r\n const { offsetY = 0.01, } = options\r\n\r\n return new Promise( ( resolve ) => {\r\n\r\n this.clearDrawingCanvas3D()\r\n\r\n const canvas = this.ssp.createCanvas3D( {\r\n id: DrawingIds.canvas,\r\n polygons: [\r\n {\r\n points: [],\r\n yHeight: 0,\r\n ...options,\r\n id: DrawingIds.polygon,\r\n }\r\n ],\r\n lines: [\r\n {\r\n points: [],\r\n width: 2,\r\n ...options,\r\n id: DrawingIds.line,\r\n }\r\n ],\r\n } )\r\n\r\n this.ssp.addObject( canvas )\r\n\r\n const polygon = canvas.getPolygon( DrawingIds.polygon )\r\n const line = canvas.getLine( DrawingIds.line )\r\n const polygonPoints: Position[] = []\r\n\r\n const omMouseMove = ( event: MouseEvent ) => {\r\n\r\n const intersects = this.getFirstIntersect( event, [ line, polygon ] )\r\n const position = intersects ?\r\n intersects.point.clone() :\r\n this.blankIntersect && this.ssp.getPositionByOffset( event )\r\n\r\n if ( !position ) return \r\n\r\n if ( !polygon ) return\r\n\r\n const movingPolygonPoints = [ ...polygonPoints, position ]\r\n\r\n if ( movingPolygonPoints.length > 2 ) {\r\n\r\n canvas.removeLine( DrawingIds.line )\r\n \r\n } else {\r\n\r\n line?.setOptions( {\r\n points: movingPolygonPoints,\r\n } )\r\n \r\n }\r\n\r\n polygon.setOptions( {\r\n yHeight: ( polygonPoints[ 0 ]?.y || position.y ) + offsetY,\r\n points: movingPolygonPoints,\r\n } )\r\n \r\n }\r\n\r\n const onClick = ( event: MouseEvent ) => {\r\n\r\n const intersects = this.getFirstIntersect( event, [ line, polygon ] )\r\n const position = intersects ?\r\n intersects.point.clone() :\r\n this.blankIntersect && this.ssp.getPositionByOffset( event )\r\n\r\n if ( !position ) return \r\n\r\n polygonPoints.push( position.clone().setY( position.y + offsetY ) )\r\n\r\n if ( !polygon ) return\r\n\r\n polygon.setOptions( {\r\n ...options,\r\n yHeight: ( polygonPoints[ 0 ]?.y || 0 ) + offsetY,\r\n points: polygonPoints,\r\n } )\r\n \r\n }\r\n\r\n const onRightClick = () => {\r\n\r\n polygonPoints.pop()\r\n\r\n if ( !polygon ) return\r\n\r\n polygon.setOptions( {\r\n ...options,\r\n yHeight: ( polygonPoints[ 0 ]?.y || 0 ) + offsetY,\r\n points: polygonPoints,\r\n } )\r\n\r\n events?.onCancelPrev?.()\r\n \r\n }\r\n\r\n const onDblClick = ( event: MouseEvent ) => {\r\n\r\n const intersects = this.getFirstIntersect( event, [ line, polygon ] )\r\n const position = intersects ?\r\n intersects.point.clone() :\r\n this.blankIntersect && this.ssp.getPositionByOffset( event )\r\n\r\n if ( !position ) return \r\n\r\n polygonPoints.push( position.clone().setY( position.y + offsetY ) )\r\n\r\n removeSignals()\r\n\r\n resolve( {\r\n ...options,\r\n yHeight: ( polygonPoints[ 0 ]?.y || 0 ) + offsetY,\r\n points: polygonPoints,\r\n } )\r\n \r\n }\r\n\r\n const onKeyUp = ( event: KeyboardEvent ) => {\r\n\r\n switch ( event.code ) {\r\n\r\n case 'Backspace':\r\n onRightClick()\r\n break\r\n case 'Escape':\r\n this.clearDrawingCanvas3D()\r\n removeSignals()\r\n\r\n events?.onCancel?.()\r\n break\r\n \r\n }\r\n \r\n }\r\n\r\n const removeSignals = () => {\r\n\r\n this.ssp.signals.mouseMove.remove( omMouseMove )\r\n this.ssp.signals.click.remove( onClick )\r\n this.ssp.signals.rightClick.remove( onRightClick )\r\n this.ssp.signals.dblClick.remove( onDblClick )\r\n this.ssp.signals.keyUp.remove( onKeyUp )\r\n \r\n }\r\n\r\n this.ssp.signals.mouseMove.add( omMouseMove )\r\n this.ssp.signals.click.add( onClick )\r\n this.ssp.signals.rightClick.add( onRightClick )\r\n this.ssp.signals.dblClick.add( onDblClick )\r\n this.ssp.signals.keyUp.add( onKeyUp )\r\n \r\n } )\r\n \r\n }\r\n\r\n drawingCircle (\r\n options: DrawingCircleInfo,\r\n events?: DrawingCircleEvents\r\n ): Promise<SetOptionsCircleInfo & {position: Vector3}> {\r\n\r\n const { offsetY = 0.01, } = options\r\n\r\n return new Promise( ( resolve ) => {\r\n\r\n this.clearDrawingCanvas3D()\r\n\r\n const canvas = this.ssp.createCanvas3D( {\r\n id: DrawingIds.canvas,\r\n circles: [\r\n {\r\n ...options,\r\n id: DrawingIds.circle,\r\n }\r\n ],\r\n } )\r\n\r\n this.ssp.addObject( canvas )\r\n\r\n const circle = canvas.getCircle( DrawingIds.circle )\r\n\r\n let position: Vector3 | null\r\n let radius = 100\r\n\r\n const onMouseMove = ( event: MouseEvent ) => {\r\n\r\n if ( !circle || !position ) return\r\n\r\n const intersects = this.getFirstIntersect( event, circle )\r\n const mouseMovePosition = intersects ?\r\n intersects.point.clone() :\r\n this.blankIntersect && this.ssp.getPositionByOffset( event )\r\n\r\n if ( !mouseMovePosition ) return \r\n\r\n radius = mouseMovePosition.distanceTo( position )\r\n\r\n circle.setOptions( {\r\n radius,\r\n } )\r\n circle.position.copy( position )\r\n \r\n }\r\n\r\n const onClick = ( event: MouseEvent ) => {\r\n\r\n if ( !circle ) return\r\n\r\n const intersects = this.getFirstIntersect( event, circle )\r\n const mouseMovePosition = intersects ?\r\n intersects.point.clone() :\r\n this.blankIntersect && this.ssp.getPositionByOffset( event )\r\n \r\n if ( !mouseMovePosition ) return\r\n\r\n if ( !position ) position = mouseMovePosition\r\n .clone()\r\n .setY( mouseMovePosition.y + offsetY )\r\n else {\r\n\r\n removeSignals()\r\n\r\n radius = mouseMovePosition.distanceTo(\r\n this.ssp.utils.IVector3ToVector3( position )\r\n )\r\n\r\n circle.setOptions( {\r\n radius,\r\n } )\r\n circle.position.copy( position )\r\n\r\n resolve( {\r\n ...options,\r\n position,\r\n radius,\r\n } )\r\n \r\n }\r\n \r\n }\r\n\r\n const onRightClick = () => {\r\n\r\n this.clearDrawingCanvas3D()\r\n removeSignals()\r\n\r\n events?.onCancel?.()\r\n \r\n }\r\n\r\n const onKeyUp = ( event: KeyboardEvent ) => {\r\n\r\n switch ( event.code ) {\r\n\r\n case 'Escape':\r\n onRightClick()\r\n break\r\n \r\n }\r\n \r\n }\r\n\r\n const removeSignals = () => {\r\n\r\n this.ssp.signals.mouseMove.remove( onMouseMove )\r\n this.ssp.signals.click.remove( onClick )\r\n this.ssp.signals.rightClick.remove( onRightClick )\r\n this.ssp.signals.keyUp.remove( onKeyUp )\r\n \r\n }\r\n\r\n this.ssp.signals.mouseMove.add( onMouseMove )\r\n this.ssp.signals.click.add( onClick )\r\n this.ssp.signals.rightClick.add( onRightClick )\r\n this.ssp.signals.keyUp.add( onKeyUp )\r\n \r\n } )\r\n \r\n }\r\n\r\n clearDrawingCanvas3D (): void {\r\n\r\n this.ssp.removeObjectById( DrawingIds.canvas )\r\n \r\n }\r\n\r\n}\r\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@soonspacejs/plugin-drawing-shape",
3
3
  "pluginName": "DrawingShapePlugin",
4
- "version": "2.13.5",
4
+ "version": "2.13.7",
5
5
  "description": "DrawingShapePlugin plugin for SoonSpace.js",
6
6
  "main": "dist/index.esm.js",
7
7
  "module": "dist/index.esm.js",
@@ -13,8 +13,8 @@
13
13
  ],
14
14
  "author": "xunwei",
15
15
  "license": "UNLICENSED",
16
- "gitHead": "e19da4dc04255f2374645aa083e0116668894874",
16
+ "gitHead": "550040550bf20ec0015982ff1159d0cfe9b35ed3",
17
17
  "peerDependencies": {
18
- "soonspacejs": "2.13.5"
18
+ "soonspacejs": "2.13.7"
19
19
  }
20
20
  }
package/dist/index.d.ts DELETED
@@ -1,50 +0,0 @@
1
- import SoonSpace from 'soonspacejs';
2
- import type { SetOptionsPointInfo, SetOptionsLineInfo, SetOptionsPolygonInfo, SetOptionsCircleInfo } from 'soonspacejs';
3
- import type { Vector3, Object3D } from 'three';
4
- export type DrawingPointInfo = SetOptionsPointInfo;
5
- export interface DrawingPointEvents {
6
- onCancel?: () => void;
7
- }
8
- export type DrawingLineInfo = Omit<SetOptionsLineInfo, 'points'> & {
9
- offsetY?: number;
10
- };
11
- export interface DrawingLineEvents {
12
- onCancel?: () => void;
13
- onCancelPrev?: () => void;
14
- }
15
- export type DrawingPolygonInfo = Omit<SetOptionsPolygonInfo, 'points' | 'yHeight'> & {
16
- width?: number | undefined;
17
- offsetY?: number;
18
- };
19
- export interface DrawingPolygonEvents {
20
- onCancel?: () => void;
21
- onCancelPrev?: () => void;
22
- }
23
- export type DrawingCircleInfo = Omit<SetOptionsCircleInfo, 'radius'> & {
24
- offsetY?: number;
25
- };
26
- export interface DrawingCircleEvents {
27
- onCancel?: () => void;
28
- }
29
- export default class DrawIngShapePlugin {
30
- readonly ssp: SoonSpace;
31
- blankIntersect: boolean;
32
- readonly viewport: SoonSpace['viewport'];
33
- constructor(ssp: SoonSpace);
34
- getFirstIntersect(event: MouseEvent, drawingObj?: (Object3D | null)[] | Object3D | null): import("three").Intersection<Object3D<import("three").Object3DEventMap>>;
35
- /**
36
- * 绘图时使用的临时 layer
37
- */
38
- drawingLayer: number;
39
- configLayer(drawingObj: Object3D[] | Object3D): void;
40
- recoverLayer(drawingObj: Object3D[] | Object3D): void;
41
- drawingPoint(options: DrawingPointInfo, events?: DrawingPointEvents): Promise<SetOptionsPointInfo & {
42
- position: Vector3;
43
- }>;
44
- drawingLine(options: DrawingLineInfo, events?: DrawingLineEvents): Promise<SetOptionsLineInfo>;
45
- drawingPolygon(options: DrawingPolygonInfo, events?: DrawingPolygonEvents): Promise<SetOptionsPolygonInfo>;
46
- drawingCircle(options: DrawingCircleInfo, events?: DrawingCircleEvents): Promise<SetOptionsCircleInfo & {
47
- position: Vector3;
48
- }>;
49
- clearDrawingCanvas3D(): void;
50
- }