@shopware-ag/dive 1.5.0 → 1.6.0
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 +38 -25
- package/build/dive.cjs +717 -500
- package/build/dive.cjs.map +1 -1
- package/build/dive.d.cts +174 -113
- package/build/dive.d.ts +174 -113
- package/build/dive.js +716 -486
- package/build/dive.js.map +1 -1
- package/package.json +1 -1
- package/src/__test__/DIVE.test.ts +66 -22
- package/src/animation/AnimationSystem.ts +16 -0
- package/src/animation/__test__/AnimationSystem.test.ts +23 -2
- package/src/axiscamera/AxisCamera.ts +40 -2
- package/src/axiscamera/__test__/AxisCamera.test.ts +178 -5
- package/src/com/Communication.ts +50 -16
- package/src/com/__test__/Communication.test.ts +73 -24
- package/src/com/actions/camera/computeencompassingview.ts +9 -0
- package/src/com/actions/index.ts +2 -0
- package/src/com/actions/scene/updatescene.ts +1 -0
- package/src/controls/OrbitControls.ts +14 -2
- package/src/controls/__test__/OrbitControls.test.ts +31 -4
- package/src/dive.ts +93 -33
- package/src/grid/Grid.ts +4 -0
- package/src/grid/__test__/Grid.test.ts +7 -0
- package/src/interface/Selectable.ts +17 -0
- package/src/interface/__test__/Interfaces.test.ts +18 -0
- package/src/mediacreator/MediaCreator.ts +2 -2
- package/src/mediacreator/__test__/MediaCreator.test.ts +12 -10
- package/src/renderer/Renderer.ts +7 -1
- package/src/renderer/__test__/Renderer.test.ts +14 -5
- package/src/scene/Scene.ts +8 -2
- package/src/scene/__test__/Scene.test.ts +6 -0
- package/src/scene/root/Root.ts +11 -1
- package/src/scene/root/__test__/Root.test.ts +68 -2
- package/src/toolbox/BaseTool.ts +1 -1
- package/src/toolbox/Toolbox.ts +53 -37
- package/src/toolbox/__test__/BaseTool.test.ts +43 -7
- package/src/toolbox/__test__/Toolbox.test.ts +39 -44
- package/src/toolbox/select/SelectTool.ts +17 -28
- package/src/toolbox/select/__test__/SelectTool.test.ts +21 -12
- package/src/toolbox/transform/TransformTool.ts +7 -1
- package/src/toolbox/transform/__test__/TransformTool.test.ts +22 -5
package/build/dive.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
4
|
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
6
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
@@ -17,6 +19,22 @@ var __spreadValues = (a, b) => {
|
|
|
17
19
|
return a;
|
|
18
20
|
};
|
|
19
21
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
22
|
+
var __esm = (fn, res) => function __init() {
|
|
23
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
24
|
+
};
|
|
25
|
+
var __export = (target, all) => {
|
|
26
|
+
for (var name in all)
|
|
27
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
28
|
+
};
|
|
29
|
+
var __copyProps = (to, from, except, desc) => {
|
|
30
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
31
|
+
for (let key of __getOwnPropNames(from))
|
|
32
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
33
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
34
|
+
}
|
|
35
|
+
return to;
|
|
36
|
+
};
|
|
37
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
38
|
var __async = (__this, __arguments, generator) => {
|
|
21
39
|
return new Promise((resolve, reject) => {
|
|
22
40
|
var fulfilled = (value) => {
|
|
@@ -38,8 +56,465 @@ var __async = (__this, __arguments, generator) => {
|
|
|
38
56
|
});
|
|
39
57
|
};
|
|
40
58
|
|
|
41
|
-
// src/
|
|
42
|
-
|
|
59
|
+
// src/constant/VisibilityLayerMask.ts
|
|
60
|
+
var DEFAULT_LAYER_MASK, COORDINATE_LAYER_MASK, UI_LAYER_MASK, HELPER_LAYER_MASK, PRODUCT_LAYER_MASK;
|
|
61
|
+
var init_VisibilityLayerMask = __esm({
|
|
62
|
+
"src/constant/VisibilityLayerMask.ts"() {
|
|
63
|
+
"use strict";
|
|
64
|
+
DEFAULT_LAYER_MASK = 1;
|
|
65
|
+
COORDINATE_LAYER_MASK = 2;
|
|
66
|
+
UI_LAYER_MASK = 4;
|
|
67
|
+
HELPER_LAYER_MASK = 8;
|
|
68
|
+
PRODUCT_LAYER_MASK = 16;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// src/interface/Draggable.ts
|
|
73
|
+
var isDraggable, findDraggableInterface;
|
|
74
|
+
var init_Draggable = __esm({
|
|
75
|
+
"src/interface/Draggable.ts"() {
|
|
76
|
+
"use strict";
|
|
77
|
+
isDraggable = (object) => {
|
|
78
|
+
return "isDraggable" in object;
|
|
79
|
+
};
|
|
80
|
+
findDraggableInterface = (child) => {
|
|
81
|
+
if (child === void 0) return void 0;
|
|
82
|
+
if (child.parent === null) {
|
|
83
|
+
return void 0;
|
|
84
|
+
}
|
|
85
|
+
if (isDraggable(child)) {
|
|
86
|
+
return child;
|
|
87
|
+
}
|
|
88
|
+
return findDraggableInterface(child.parent);
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// src/interface/Hoverable.ts
|
|
94
|
+
var isHoverable, findHoverableInterface;
|
|
95
|
+
var init_Hoverable = __esm({
|
|
96
|
+
"src/interface/Hoverable.ts"() {
|
|
97
|
+
"use strict";
|
|
98
|
+
isHoverable = (object) => {
|
|
99
|
+
return "isHoverable" in object;
|
|
100
|
+
};
|
|
101
|
+
findHoverableInterface = (child) => {
|
|
102
|
+
if (child === void 0) return void 0;
|
|
103
|
+
if (child.parent === null) {
|
|
104
|
+
return void 0;
|
|
105
|
+
}
|
|
106
|
+
if (isHoverable(child)) {
|
|
107
|
+
return child;
|
|
108
|
+
}
|
|
109
|
+
return findHoverableInterface(child.parent);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// src/toolbox/BaseTool.ts
|
|
115
|
+
import { Raycaster, Vector2, Vector3 } from "three";
|
|
116
|
+
var DIVEBaseTool;
|
|
117
|
+
var init_BaseTool = __esm({
|
|
118
|
+
"src/toolbox/BaseTool.ts"() {
|
|
119
|
+
"use strict";
|
|
120
|
+
init_VisibilityLayerMask();
|
|
121
|
+
init_Draggable();
|
|
122
|
+
init_Hoverable();
|
|
123
|
+
DIVEBaseTool = class {
|
|
124
|
+
constructor(scene, controller) {
|
|
125
|
+
this.POINTER_DRAG_THRESHOLD = 1e-3;
|
|
126
|
+
this.name = "BaseTool";
|
|
127
|
+
this._canvas = controller.domElement;
|
|
128
|
+
this._scene = scene;
|
|
129
|
+
this._controller = controller;
|
|
130
|
+
this._pointer = new Vector2();
|
|
131
|
+
this._pointerPrimaryDown = false;
|
|
132
|
+
this._pointerMiddleDown = false;
|
|
133
|
+
this._pointerSecondaryDown = false;
|
|
134
|
+
this._lastPointerDown = new Vector2();
|
|
135
|
+
this._lastPointerUp = new Vector2();
|
|
136
|
+
this._raycaster = new Raycaster();
|
|
137
|
+
this._raycaster.layers.mask = PRODUCT_LAYER_MASK | UI_LAYER_MASK;
|
|
138
|
+
this._intersects = [];
|
|
139
|
+
this._hovered = null;
|
|
140
|
+
this._dragging = false;
|
|
141
|
+
this._dragStart = new Vector3();
|
|
142
|
+
this._dragCurrent = new Vector3();
|
|
143
|
+
this._dragEnd = new Vector3();
|
|
144
|
+
this._dragDelta = new Vector3();
|
|
145
|
+
this._draggable = null;
|
|
146
|
+
this._dragRaycastOnObjects = null;
|
|
147
|
+
}
|
|
148
|
+
get _pointerAnyDown() {
|
|
149
|
+
return this._pointerPrimaryDown || this._pointerMiddleDown || this._pointerSecondaryDown;
|
|
150
|
+
}
|
|
151
|
+
Activate() {
|
|
152
|
+
}
|
|
153
|
+
Deactivate() {
|
|
154
|
+
}
|
|
155
|
+
onPointerDown(e) {
|
|
156
|
+
var _a;
|
|
157
|
+
switch (e.button) {
|
|
158
|
+
case 0:
|
|
159
|
+
this._pointerPrimaryDown = true;
|
|
160
|
+
break;
|
|
161
|
+
case 1:
|
|
162
|
+
this._pointerMiddleDown = true;
|
|
163
|
+
break;
|
|
164
|
+
case 2:
|
|
165
|
+
this._pointerSecondaryDown = true;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
this._lastPointerDown.copy(this._pointer);
|
|
169
|
+
this._draggable = findDraggableInterface((_a = this._intersects[0]) == null ? void 0 : _a.object) || null;
|
|
170
|
+
}
|
|
171
|
+
onDragStart(e) {
|
|
172
|
+
if (!this._draggable) return;
|
|
173
|
+
if (this._dragRaycastOnObjects !== null) {
|
|
174
|
+
this._intersects = this._raycaster.intersectObjects(this._dragRaycastOnObjects, true);
|
|
175
|
+
}
|
|
176
|
+
if (this._intersects.length === 0) return;
|
|
177
|
+
this._dragStart.copy(this._intersects[0].point.clone());
|
|
178
|
+
this._dragCurrent.copy(this._intersects[0].point.clone());
|
|
179
|
+
this._dragEnd.copy(this._dragStart.clone());
|
|
180
|
+
this._dragDelta.set(0, 0, 0);
|
|
181
|
+
if (this._draggable && this._draggable.onDragStart) {
|
|
182
|
+
this._draggable.onDragStart({
|
|
183
|
+
dragStart: this._dragStart,
|
|
184
|
+
dragCurrent: this._dragCurrent,
|
|
185
|
+
dragEnd: this._dragEnd,
|
|
186
|
+
dragDelta: this._dragDelta
|
|
187
|
+
});
|
|
188
|
+
this._dragging = true;
|
|
189
|
+
this._controller.enabled = false;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
onPointerMove(e) {
|
|
193
|
+
var _a;
|
|
194
|
+
this._pointer.x = e.offsetX / this._canvas.clientWidth * 2 - 1;
|
|
195
|
+
this._pointer.y = -(e.offsetY / this._canvas.clientHeight) * 2 + 1;
|
|
196
|
+
this._raycaster.setFromCamera(this._pointer, this._controller.object);
|
|
197
|
+
this._intersects = this.raycast(this._scene.children);
|
|
198
|
+
const hoverable = findHoverableInterface((_a = this._intersects[0]) == null ? void 0 : _a.object);
|
|
199
|
+
if (this._intersects[0] && hoverable) {
|
|
200
|
+
if (!this._hovered) {
|
|
201
|
+
if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
|
|
202
|
+
this._hovered = hoverable;
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (this._hovered.uuid !== hoverable.uuid) {
|
|
206
|
+
if (this._hovered.onPointerLeave) this._hovered.onPointerLeave();
|
|
207
|
+
if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
|
|
208
|
+
this._hovered = hoverable;
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (hoverable.onPointerOver) hoverable.onPointerOver(this._intersects[0]);
|
|
212
|
+
this._hovered = hoverable;
|
|
213
|
+
} else {
|
|
214
|
+
if (this._hovered) {
|
|
215
|
+
if (this._hovered.onPointerLeave) this._hovered.onPointerLeave();
|
|
216
|
+
}
|
|
217
|
+
this._hovered = null;
|
|
218
|
+
}
|
|
219
|
+
if (this._pointerAnyDown) {
|
|
220
|
+
if (!this._dragging) {
|
|
221
|
+
this.onDragStart(e);
|
|
222
|
+
}
|
|
223
|
+
this.onDrag(e);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
onDrag(e) {
|
|
227
|
+
if (this._dragRaycastOnObjects !== null) {
|
|
228
|
+
this._intersects = this._raycaster.intersectObjects(this._dragRaycastOnObjects, true);
|
|
229
|
+
}
|
|
230
|
+
const intersect = this._intersects[0];
|
|
231
|
+
if (!intersect) return;
|
|
232
|
+
this._dragCurrent.copy(intersect.point.clone());
|
|
233
|
+
this._dragEnd.copy(intersect.point.clone());
|
|
234
|
+
this._dragDelta.subVectors(this._dragCurrent.clone(), this._dragStart.clone());
|
|
235
|
+
if (this._draggable && this._draggable.onDrag) {
|
|
236
|
+
this._draggable.onDrag({
|
|
237
|
+
dragStart: this._dragStart,
|
|
238
|
+
dragCurrent: this._dragCurrent,
|
|
239
|
+
dragEnd: this._dragEnd,
|
|
240
|
+
dragDelta: this._dragDelta
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
onPointerUp(e) {
|
|
245
|
+
if (this.pointerWasDragged() || this._dragging) {
|
|
246
|
+
if (this._draggable) {
|
|
247
|
+
this.onDragEnd(e);
|
|
248
|
+
}
|
|
249
|
+
} else {
|
|
250
|
+
this.onClick(e);
|
|
251
|
+
}
|
|
252
|
+
switch (e.button) {
|
|
253
|
+
case 0:
|
|
254
|
+
this._pointerPrimaryDown = false;
|
|
255
|
+
break;
|
|
256
|
+
case 1:
|
|
257
|
+
this._pointerMiddleDown = false;
|
|
258
|
+
break;
|
|
259
|
+
case 2:
|
|
260
|
+
this._pointerSecondaryDown = false;
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
this._lastPointerUp.copy(this._pointer);
|
|
264
|
+
}
|
|
265
|
+
onClick(e) {
|
|
266
|
+
}
|
|
267
|
+
onDragEnd(e) {
|
|
268
|
+
const intersect = this._intersects[0];
|
|
269
|
+
if (intersect) {
|
|
270
|
+
this._dragEnd.copy(intersect.point.clone());
|
|
271
|
+
this._dragCurrent.copy(intersect.point.clone());
|
|
272
|
+
this._dragDelta.subVectors(this._dragCurrent.clone(), this._dragStart.clone());
|
|
273
|
+
}
|
|
274
|
+
if (this._draggable && this._draggable.onDragEnd) {
|
|
275
|
+
this._draggable.onDragEnd({
|
|
276
|
+
dragStart: this._dragStart,
|
|
277
|
+
dragCurrent: this._dragCurrent,
|
|
278
|
+
dragEnd: this._dragEnd,
|
|
279
|
+
dragDelta: this._dragDelta
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
this._draggable = null;
|
|
283
|
+
this._dragging = false;
|
|
284
|
+
this._dragStart.set(0, 0, 0);
|
|
285
|
+
this._dragCurrent.set(0, 0, 0);
|
|
286
|
+
this._dragEnd.set(0, 0, 0);
|
|
287
|
+
this._dragDelta.set(0, 0, 0);
|
|
288
|
+
this._controller.enabled = true;
|
|
289
|
+
}
|
|
290
|
+
onWheel(e) {
|
|
291
|
+
}
|
|
292
|
+
raycast(objects) {
|
|
293
|
+
if (objects !== void 0) return this._raycaster.intersectObjects(objects, true).filter((i) => i.object.visible);
|
|
294
|
+
return this._raycaster.intersectObjects(this._scene.children, true).filter((i) => i.object.visible);
|
|
295
|
+
}
|
|
296
|
+
pointerWasDragged() {
|
|
297
|
+
return this._lastPointerDown.distanceTo(this._pointer) > this.POINTER_DRAG_THRESHOLD;
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
// src/toolbox/transform/TransformTool.ts
|
|
304
|
+
import { TransformControls } from "three/examples/jsm/Addons";
|
|
305
|
+
var DIVETransformTool;
|
|
306
|
+
var init_TransformTool = __esm({
|
|
307
|
+
"src/toolbox/transform/TransformTool.ts"() {
|
|
308
|
+
"use strict";
|
|
309
|
+
init_BaseTool();
|
|
310
|
+
DIVETransformTool = class extends DIVEBaseTool {
|
|
311
|
+
constructor(scene, controller) {
|
|
312
|
+
super(scene, controller);
|
|
313
|
+
this.isTransformTool = true;
|
|
314
|
+
this.name = "DIVETransformTool";
|
|
315
|
+
this._gizmo = new TransformControls(this._controller.object, this._controller.domElement);
|
|
316
|
+
this._gizmo.mode = "translate";
|
|
317
|
+
this._gizmo.addEventListener("mouseDown", () => {
|
|
318
|
+
controller.enabled = false;
|
|
319
|
+
});
|
|
320
|
+
this._gizmo.addEventListener("mouseUp", () => {
|
|
321
|
+
controller.enabled = true;
|
|
322
|
+
});
|
|
323
|
+
this._gizmo.addEventListener("objectChange", () => {
|
|
324
|
+
if (!this._gizmo.object) return;
|
|
325
|
+
if (!("isMoveable" in this._gizmo.object)) return;
|
|
326
|
+
if (!("onMove" in this._gizmo.object)) return;
|
|
327
|
+
this._gizmo.object.onMove();
|
|
328
|
+
});
|
|
329
|
+
scene.add(this._gizmo);
|
|
330
|
+
}
|
|
331
|
+
Activate() {
|
|
332
|
+
}
|
|
333
|
+
SetGizmoMode(mode) {
|
|
334
|
+
this._gizmo.mode = mode;
|
|
335
|
+
}
|
|
336
|
+
SetGizmoVisibility(active) {
|
|
337
|
+
const contains = this._scene.children.includes(this._gizmo);
|
|
338
|
+
if (active && !contains) {
|
|
339
|
+
this._scene.add(this._gizmo);
|
|
340
|
+
} else if (!active && contains) {
|
|
341
|
+
this._scene.remove(this._gizmo);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// public onPointerDown(e: PointerEvent): void {
|
|
345
|
+
// super.onPointerDown(e);
|
|
346
|
+
// // if (this._hovered) {
|
|
347
|
+
// // this._dragRaycastOnObjects = this._gizmo.gizmoPlane.children;
|
|
348
|
+
// // }
|
|
349
|
+
// }
|
|
350
|
+
// protected raycast(): Intersection[] {
|
|
351
|
+
// return super.raycast(this._gizmo.gizmoNode.children);
|
|
352
|
+
// }
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
// src/interface/Selectable.ts
|
|
358
|
+
function isSelectable(object) {
|
|
359
|
+
return "isSelectable" in object;
|
|
360
|
+
}
|
|
361
|
+
function findSelectableInterface(child) {
|
|
362
|
+
if (child === void 0) return void 0;
|
|
363
|
+
if (child.parent === null) {
|
|
364
|
+
return void 0;
|
|
365
|
+
}
|
|
366
|
+
if (isSelectable(child)) {
|
|
367
|
+
return child;
|
|
368
|
+
}
|
|
369
|
+
return findSelectableInterface(child.parent);
|
|
370
|
+
}
|
|
371
|
+
var init_Selectable = __esm({
|
|
372
|
+
"src/interface/Selectable.ts"() {
|
|
373
|
+
"use strict";
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
|
|
377
|
+
// src/toolbox/select/SelectTool.ts
|
|
378
|
+
var SelectTool_exports = {};
|
|
379
|
+
__export(SelectTool_exports, {
|
|
380
|
+
DIVESelectTool: () => DIVESelectTool,
|
|
381
|
+
isSelectTool: () => isSelectTool
|
|
382
|
+
});
|
|
383
|
+
var isSelectTool, DIVESelectTool;
|
|
384
|
+
var init_SelectTool = __esm({
|
|
385
|
+
"src/toolbox/select/SelectTool.ts"() {
|
|
386
|
+
"use strict";
|
|
387
|
+
init_TransformTool();
|
|
388
|
+
init_Selectable();
|
|
389
|
+
isSelectTool = (tool) => {
|
|
390
|
+
return tool.isSelectTool !== void 0;
|
|
391
|
+
};
|
|
392
|
+
DIVESelectTool = class extends DIVETransformTool {
|
|
393
|
+
constructor(scene, controller) {
|
|
394
|
+
super(scene, controller);
|
|
395
|
+
this.isSelectTool = true;
|
|
396
|
+
this.name = "SelectTool";
|
|
397
|
+
}
|
|
398
|
+
Activate() {
|
|
399
|
+
}
|
|
400
|
+
Select(selectable) {
|
|
401
|
+
if (selectable.onSelect) selectable.onSelect();
|
|
402
|
+
this.AttachGizmo(selectable);
|
|
403
|
+
}
|
|
404
|
+
Deselect(selectable) {
|
|
405
|
+
if (selectable.onDeselect) selectable.onDeselect();
|
|
406
|
+
this.DetachGizmo();
|
|
407
|
+
}
|
|
408
|
+
AttachGizmo(selectable) {
|
|
409
|
+
if ("isMoveable" in selectable) {
|
|
410
|
+
const movable = selectable;
|
|
411
|
+
this._gizmo.attach(movable);
|
|
412
|
+
this.SetGizmoVisibility(movable.visible);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
DetachGizmo() {
|
|
416
|
+
this._gizmo.detach();
|
|
417
|
+
}
|
|
418
|
+
onClick(e) {
|
|
419
|
+
super.onClick(e);
|
|
420
|
+
const first = this._raycaster.intersectObjects(this._scene.Root.children, true).filter((intersect) => intersect.object.visible)[0];
|
|
421
|
+
const selectable = findSelectableInterface(first == null ? void 0 : first.object);
|
|
422
|
+
if (!first || !selectable) {
|
|
423
|
+
if (this._gizmo.object) {
|
|
424
|
+
this.Deselect(this._gizmo.object);
|
|
425
|
+
}
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
if (this._gizmo.object) {
|
|
429
|
+
if (this._gizmo.object.uuid === selectable.uuid) return;
|
|
430
|
+
this.Deselect(this._gizmo.object);
|
|
431
|
+
}
|
|
432
|
+
this.Select(selectable);
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
});
|
|
437
|
+
|
|
438
|
+
// src/camera/PerspectiveCamera.ts
|
|
439
|
+
import { PerspectiveCamera } from "three";
|
|
440
|
+
var DIVEPerspectiveCameraDefaultSettings, _DIVEPerspectiveCamera, DIVEPerspectiveCamera;
|
|
441
|
+
var init_PerspectiveCamera = __esm({
|
|
442
|
+
"src/camera/PerspectiveCamera.ts"() {
|
|
443
|
+
"use strict";
|
|
444
|
+
init_VisibilityLayerMask();
|
|
445
|
+
DIVEPerspectiveCameraDefaultSettings = {
|
|
446
|
+
fov: 80,
|
|
447
|
+
near: 0.1,
|
|
448
|
+
far: 1e3
|
|
449
|
+
};
|
|
450
|
+
_DIVEPerspectiveCamera = class _DIVEPerspectiveCamera extends PerspectiveCamera {
|
|
451
|
+
constructor(settings = DIVEPerspectiveCameraDefaultSettings) {
|
|
452
|
+
super(settings.fov, 1, settings.near, settings.far);
|
|
453
|
+
this.onSetCameraLayer = () => {
|
|
454
|
+
};
|
|
455
|
+
this.layers.mask = _DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
456
|
+
}
|
|
457
|
+
OnResize(width, height) {
|
|
458
|
+
this.aspect = width / height;
|
|
459
|
+
this.updateProjectionMatrix();
|
|
460
|
+
}
|
|
461
|
+
SetCameraLayer(layer) {
|
|
462
|
+
this.layers.mask = layer === "LIVE" ? _DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK : _DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
463
|
+
this.onSetCameraLayer(this.layers.mask);
|
|
464
|
+
}
|
|
465
|
+
};
|
|
466
|
+
_DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK = DEFAULT_LAYER_MASK | UI_LAYER_MASK | HELPER_LAYER_MASK | PRODUCT_LAYER_MASK;
|
|
467
|
+
_DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK = PRODUCT_LAYER_MASK;
|
|
468
|
+
DIVEPerspectiveCamera = _DIVEPerspectiveCamera;
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
// src/mediacreator/MediaCreator.ts
|
|
473
|
+
var MediaCreator_exports = {};
|
|
474
|
+
__export(MediaCreator_exports, {
|
|
475
|
+
DIVEMediaCreator: () => DIVEMediaCreator
|
|
476
|
+
});
|
|
477
|
+
var DIVEMediaCreator;
|
|
478
|
+
var init_MediaCreator = __esm({
|
|
479
|
+
"src/mediacreator/MediaCreator.ts"() {
|
|
480
|
+
"use strict";
|
|
481
|
+
init_PerspectiveCamera();
|
|
482
|
+
DIVEMediaCreator = class {
|
|
483
|
+
constructor(renderer, scene, controller) {
|
|
484
|
+
this.renderer = renderer;
|
|
485
|
+
this.scene = scene;
|
|
486
|
+
this.controller = controller;
|
|
487
|
+
}
|
|
488
|
+
GenerateMedia(position, target, width, height) {
|
|
489
|
+
const resetPosition = this.controller.object.position.clone();
|
|
490
|
+
const resetRotation = this.controller.object.quaternion.clone();
|
|
491
|
+
this.renderer.OnResize(width, height);
|
|
492
|
+
this.controller.object.OnResize(width, height);
|
|
493
|
+
this.controller.object.position.copy(position);
|
|
494
|
+
this.controller.target.copy(target);
|
|
495
|
+
this.controller.update();
|
|
496
|
+
const dataUri = this.DrawCanvas().toDataURL();
|
|
497
|
+
this.controller.object.position.copy(resetPosition);
|
|
498
|
+
this.controller.object.quaternion.copy(resetRotation);
|
|
499
|
+
return dataUri;
|
|
500
|
+
}
|
|
501
|
+
DrawCanvas(canvasElement) {
|
|
502
|
+
const restore = this.renderer.domElement;
|
|
503
|
+
if (canvasElement) {
|
|
504
|
+
this.renderer.domElement = canvasElement;
|
|
505
|
+
}
|
|
506
|
+
this.controller.object.layers.mask = DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK;
|
|
507
|
+
this.renderer.render(this.scene, this.controller.object);
|
|
508
|
+
this.controller.object.layers.mask = DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
509
|
+
const returnCanvas = this.renderer.domElement;
|
|
510
|
+
if (canvasElement) {
|
|
511
|
+
this.renderer.domElement = restore;
|
|
512
|
+
}
|
|
513
|
+
return returnCanvas;
|
|
514
|
+
}
|
|
515
|
+
};
|
|
516
|
+
}
|
|
517
|
+
});
|
|
43
518
|
|
|
44
519
|
// src/renderer/Renderer.ts
|
|
45
520
|
import { MathUtils, NoToneMapping, PCFSoftShadowMap, WebGLRenderer } from "three";
|
|
@@ -71,6 +546,11 @@ var DIVERenderer = class extends WebGLRenderer {
|
|
|
71
546
|
this.toneMapping = rendererSettings.toneMapping;
|
|
72
547
|
this.debug.checkShaderErrors = false;
|
|
73
548
|
}
|
|
549
|
+
// Stops renderings and disposes the renderer.
|
|
550
|
+
Dispose() {
|
|
551
|
+
this.StopRenderer();
|
|
552
|
+
this.dispose();
|
|
553
|
+
}
|
|
74
554
|
// Starts the renderer with the given scene and camera.
|
|
75
555
|
StartRenderer(scene, cam) {
|
|
76
556
|
this.setAnimationLoop(() => {
|
|
@@ -162,25 +642,17 @@ var DIVERenderer = class extends WebGLRenderer {
|
|
|
162
642
|
};
|
|
163
643
|
|
|
164
644
|
// src/scene/Scene.ts
|
|
165
|
-
import { Color as
|
|
645
|
+
import { Color as Color6, Scene as Scene2 } from "three";
|
|
166
646
|
|
|
167
647
|
// src/scene/root/Root.ts
|
|
168
|
-
import { Object3D as
|
|
648
|
+
import { Box3 as Box32, Object3D as Object3D9 } from "three";
|
|
169
649
|
|
|
170
650
|
// src/scene/root/lightroot/LightRoot.ts
|
|
171
|
-
import { Color as
|
|
651
|
+
import { Color as Color4, Object3D as Object3D5 } from "three";
|
|
172
652
|
|
|
173
653
|
// src/light/AmbientLight.ts
|
|
654
|
+
init_VisibilityLayerMask();
|
|
174
655
|
import { AmbientLight, Object3D } from "three";
|
|
175
|
-
|
|
176
|
-
// src/constant/VisibilityLayerMask.ts
|
|
177
|
-
var DEFAULT_LAYER_MASK = 1;
|
|
178
|
-
var COORDINATE_LAYER_MASK = 2;
|
|
179
|
-
var UI_LAYER_MASK = 4;
|
|
180
|
-
var HELPER_LAYER_MASK = 8;
|
|
181
|
-
var PRODUCT_LAYER_MASK = 16;
|
|
182
|
-
|
|
183
|
-
// src/light/AmbientLight.ts
|
|
184
656
|
var DIVEAmbientLight = class extends Object3D {
|
|
185
657
|
constructor() {
|
|
186
658
|
super();
|
|
@@ -201,25 +673,34 @@ var DIVEAmbientLight = class extends Object3D {
|
|
|
201
673
|
};
|
|
202
674
|
|
|
203
675
|
// src/light/PointLight.ts
|
|
204
|
-
import { PointLight, SphereGeometry, MeshBasicMaterial, Mesh, FrontSide, Object3D as
|
|
676
|
+
import { PointLight, SphereGeometry, MeshBasicMaterial, Mesh, FrontSide, Object3D as Object3D3 } from "three";
|
|
205
677
|
|
|
206
678
|
// src/com/Communication.ts
|
|
207
|
-
|
|
679
|
+
init_SelectTool();
|
|
680
|
+
import { generateUUID } from "three/src/math/MathUtils";
|
|
208
681
|
var _DIVECommunication = class _DIVECommunication {
|
|
209
|
-
constructor(scene, controls, toolbox
|
|
682
|
+
constructor(renderer, scene, controls, toolbox) {
|
|
210
683
|
this.registered = /* @__PURE__ */ new Map();
|
|
211
684
|
// private listeners: { [key: string]: EventListener[] } = {};
|
|
212
685
|
this.listeners = /* @__PURE__ */ new Map();
|
|
213
|
-
this.id =
|
|
686
|
+
this.id = generateUUID();
|
|
687
|
+
this.renderer = renderer;
|
|
214
688
|
this.scene = scene;
|
|
215
689
|
this.controller = controls;
|
|
216
690
|
this.toolbox = toolbox;
|
|
217
|
-
this.
|
|
691
|
+
this._mediaGenerator = null;
|
|
218
692
|
_DIVECommunication.__instances.push(this);
|
|
219
693
|
}
|
|
220
694
|
static get(id) {
|
|
221
695
|
return this.__instances.find((instance) => Array.from(instance.registered.values()).find((object) => object.id === id));
|
|
222
696
|
}
|
|
697
|
+
get mediaGenerator() {
|
|
698
|
+
if (!this._mediaGenerator) {
|
|
699
|
+
const DIVEMediaCreator2 = (init_MediaCreator(), __toCommonJS(MediaCreator_exports)).default;
|
|
700
|
+
this._mediaGenerator = new DIVEMediaCreator2(this.renderer, this.scene, this.controller);
|
|
701
|
+
}
|
|
702
|
+
return this._mediaGenerator;
|
|
703
|
+
}
|
|
223
704
|
DestroyInstance() {
|
|
224
705
|
const existingIndex = _DIVECommunication.__instances.findIndex((entry) => entry.id === this.id);
|
|
225
706
|
if (existingIndex === -1) return false;
|
|
@@ -289,6 +770,10 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
289
770
|
returnValue = this.resetCamera(payload);
|
|
290
771
|
break;
|
|
291
772
|
}
|
|
773
|
+
case "COMPUTE_ENCOMPASSING_VIEW": {
|
|
774
|
+
returnValue = this.computeEncompassingView(payload);
|
|
775
|
+
break;
|
|
776
|
+
}
|
|
292
777
|
case "SET_CAMERA_LAYER": {
|
|
293
778
|
returnValue = this.setCameraLayer(payload);
|
|
294
779
|
break;
|
|
@@ -399,8 +884,10 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
399
884
|
const sceneObject = this.scene.GetSceneObject(object);
|
|
400
885
|
if (!sceneObject) return false;
|
|
401
886
|
if (!("isSelectable" in sceneObject)) return false;
|
|
402
|
-
this.toolbox.
|
|
403
|
-
|
|
887
|
+
const activeTool = this.toolbox.GetActiveTool();
|
|
888
|
+
if (activeTool && isSelectTool(activeTool)) {
|
|
889
|
+
activeTool.AttachGizmo(sceneObject);
|
|
890
|
+
}
|
|
404
891
|
Object.assign(payload, object);
|
|
405
892
|
return true;
|
|
406
893
|
}
|
|
@@ -410,8 +897,10 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
410
897
|
const sceneObject = this.scene.GetSceneObject(object);
|
|
411
898
|
if (!sceneObject) return false;
|
|
412
899
|
if (!("isSelectable" in sceneObject)) return false;
|
|
413
|
-
this.toolbox.
|
|
414
|
-
|
|
900
|
+
const activeTool = this.toolbox.GetActiveTool();
|
|
901
|
+
if (activeTool && isSelectTool(activeTool)) {
|
|
902
|
+
activeTool.DetachGizmo();
|
|
903
|
+
}
|
|
415
904
|
Object.assign(payload, object);
|
|
416
905
|
return true;
|
|
417
906
|
}
|
|
@@ -466,6 +955,12 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
466
955
|
this.controller.RevertLast(payload.duration);
|
|
467
956
|
return true;
|
|
468
957
|
}
|
|
958
|
+
computeEncompassingView(payload) {
|
|
959
|
+
const sceneBB = this.scene.ComputeSceneBB();
|
|
960
|
+
const transform = this.controller.ComputeEncompassingView(sceneBB);
|
|
961
|
+
Object.assign(payload, transform);
|
|
962
|
+
return transform;
|
|
963
|
+
}
|
|
469
964
|
zoomCamera(payload) {
|
|
470
965
|
if (payload.direction === "IN") this.controller.ZoomIn(payload.by);
|
|
471
966
|
if (payload.direction === "OUT") this.controller.ZoomOut(payload.by);
|
|
@@ -486,10 +981,12 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
486
981
|
updateScene(payload) {
|
|
487
982
|
if (payload.name !== void 0) this.scene.name = payload.name;
|
|
488
983
|
if (payload.backgroundColor !== void 0) this.scene.SetBackground(payload.backgroundColor);
|
|
984
|
+
if (payload.gridEnabled !== void 0) this.scene.Root.Grid.SetVisibility(payload.gridEnabled);
|
|
489
985
|
if (payload.floorEnabled !== void 0) this.scene.Root.Floor.SetVisibility(payload.floorEnabled);
|
|
490
986
|
if (payload.floorColor !== void 0) this.scene.Root.Floor.SetColor(payload.floorColor);
|
|
491
987
|
payload.name = this.scene.name;
|
|
492
988
|
payload.backgroundColor = "#" + this.scene.background.getHexString();
|
|
989
|
+
payload.gridEnabled = this.scene.Root.Grid.visible;
|
|
493
990
|
payload.floorEnabled = this.scene.Root.Floor.visible;
|
|
494
991
|
payload.floorColor = "#" + this.scene.Root.Floor.material.color.getHexString();
|
|
495
992
|
return true;
|
|
@@ -512,7 +1009,8 @@ _DIVECommunication.__instances = [];
|
|
|
512
1009
|
var DIVECommunication = _DIVECommunication;
|
|
513
1010
|
|
|
514
1011
|
// src/light/PointLight.ts
|
|
515
|
-
|
|
1012
|
+
init_VisibilityLayerMask();
|
|
1013
|
+
var DIVEPointLight = class extends Object3D3 {
|
|
516
1014
|
constructor() {
|
|
517
1015
|
super();
|
|
518
1016
|
this.isMoveable = true;
|
|
@@ -558,8 +1056,9 @@ var DIVEPointLight = class extends Object3D2 {
|
|
|
558
1056
|
};
|
|
559
1057
|
|
|
560
1058
|
// src/light/SceneLight.ts
|
|
561
|
-
|
|
562
|
-
|
|
1059
|
+
init_VisibilityLayerMask();
|
|
1060
|
+
import { DirectionalLight, HemisphereLight, Object3D as Object3D4 } from "three";
|
|
1061
|
+
var DIVESceneLight = class extends Object3D4 {
|
|
563
1062
|
constructor() {
|
|
564
1063
|
super();
|
|
565
1064
|
this.name = "DIVESceneLight";
|
|
@@ -597,7 +1096,7 @@ var DIVESceneLight = class extends Object3D3 {
|
|
|
597
1096
|
};
|
|
598
1097
|
|
|
599
1098
|
// src/scene/root/lightroot/LightRoot.ts
|
|
600
|
-
var DIVELightRoot = class extends
|
|
1099
|
+
var DIVELightRoot = class extends Object3D5 {
|
|
601
1100
|
constructor() {
|
|
602
1101
|
super();
|
|
603
1102
|
this.name = "LightRoot";
|
|
@@ -641,7 +1140,7 @@ var DIVELightRoot = class extends Object3D4 {
|
|
|
641
1140
|
if (light.position !== void 0 && light.position !== null) sceneObject.position.set(light.position.x, light.position.y, light.position.z);
|
|
642
1141
|
if (light.intensity !== void 0 && light.intensity !== null) sceneObject.SetIntensity(light.intensity);
|
|
643
1142
|
if (light.enabled !== void 0 && light.enabled !== null) sceneObject.SetEnabled(light.enabled);
|
|
644
|
-
if (light.color !== void 0 && light.color !== null) sceneObject.SetColor(new
|
|
1143
|
+
if (light.color !== void 0 && light.color !== null) sceneObject.SetColor(new Color4(light.color));
|
|
645
1144
|
if (light.visible !== void 0 && light.visible !== null) sceneObject.visible = light.visible;
|
|
646
1145
|
}
|
|
647
1146
|
DeleteLight(light) {
|
|
@@ -672,10 +1171,11 @@ var DIVELightRoot = class extends Object3D4 {
|
|
|
672
1171
|
};
|
|
673
1172
|
|
|
674
1173
|
// src/scene/root/modelroot/ModelRoot.ts
|
|
675
|
-
import { Object3D as
|
|
1174
|
+
import { Object3D as Object3D7 } from "three";
|
|
676
1175
|
|
|
677
1176
|
// src/model/Model.ts
|
|
678
|
-
|
|
1177
|
+
init_VisibilityLayerMask();
|
|
1178
|
+
import { Box3, Object3D as Object3D6, Raycaster as Raycaster2, Vector3 as Vector32 } from "three";
|
|
679
1179
|
|
|
680
1180
|
// src/helper/findSceneRecursive/findSceneRecursive.ts
|
|
681
1181
|
var findSceneRecursive = (object) => {
|
|
@@ -686,7 +1186,7 @@ var findSceneRecursive = (object) => {
|
|
|
686
1186
|
};
|
|
687
1187
|
|
|
688
1188
|
// src/model/Model.ts
|
|
689
|
-
var DIVEModel = class extends
|
|
1189
|
+
var DIVEModel = class extends Object3D6 {
|
|
690
1190
|
constructor() {
|
|
691
1191
|
super();
|
|
692
1192
|
this.isSelectable = true;
|
|
@@ -709,7 +1209,7 @@ var DIVEModel = class extends Object3D5 {
|
|
|
709
1209
|
this.position.set(position.x, position.y, position.z);
|
|
710
1210
|
}
|
|
711
1211
|
SetRotation(rotation) {
|
|
712
|
-
this.rotation.setFromVector3(new
|
|
1212
|
+
this.rotation.setFromVector3(new Vector32(rotation.x, rotation.y, rotation.z));
|
|
713
1213
|
}
|
|
714
1214
|
SetScale(scale) {
|
|
715
1215
|
this.scale.set(scale.x, scale.y, scale.z);
|
|
@@ -736,9 +1236,9 @@ var DIVEModel = class extends Object3D5 {
|
|
|
736
1236
|
return;
|
|
737
1237
|
}
|
|
738
1238
|
const bottomY = this.boundingBox.min.y * this.scale.y;
|
|
739
|
-
const bbBottomCenter = this.localToWorld(this.boundingBox.getCenter(new
|
|
1239
|
+
const bbBottomCenter = this.localToWorld(this.boundingBox.getCenter(new Vector32()).multiply(this.scale));
|
|
740
1240
|
bbBottomCenter.y = bottomY + this.position.y;
|
|
741
|
-
const raycaster = new
|
|
1241
|
+
const raycaster = new Raycaster2(bbBottomCenter, new Vector32(0, -1, 0));
|
|
742
1242
|
raycaster.layers.mask = PRODUCT_LAYER_MASK;
|
|
743
1243
|
const intersections = raycaster.intersectObjects(findSceneRecursive(this).Root.children, true);
|
|
744
1244
|
if (intersections.length > 0) {
|
|
@@ -747,7 +1247,7 @@ var DIVEModel = class extends Object3D5 {
|
|
|
747
1247
|
const meshBB = mesh.geometry.boundingBox;
|
|
748
1248
|
const worldPos = mesh.localToWorld(meshBB.max.clone());
|
|
749
1249
|
const oldPos = this.position.clone();
|
|
750
|
-
const newPos = this.position.clone().setY(worldPos.y).add(new
|
|
1250
|
+
const newPos = this.position.clone().setY(worldPos.y).add(new Vector32(0, bottomY, 0));
|
|
751
1251
|
this.position.copy(newPos);
|
|
752
1252
|
if (this.position.y === oldPos.y) return;
|
|
753
1253
|
(_a = DIVECommunication.get(this.userData.id)) == null ? void 0 : _a.PerformAction("UPDATE_OBJECT", { id: this.userData.id, position: this.position, rotation: this.rotation, scale: this.scale });
|
|
@@ -800,7 +1300,7 @@ var DIVELoadingManager = class {
|
|
|
800
1300
|
};
|
|
801
1301
|
|
|
802
1302
|
// src/scene/root/modelroot/ModelRoot.ts
|
|
803
|
-
var DIVEModelRoot = class extends
|
|
1303
|
+
var DIVEModelRoot = class extends Object3D7 {
|
|
804
1304
|
constructor() {
|
|
805
1305
|
super();
|
|
806
1306
|
this.name = "ModelRoot";
|
|
@@ -869,10 +1369,11 @@ var DIVEModelRoot = class extends Object3D6 {
|
|
|
869
1369
|
};
|
|
870
1370
|
|
|
871
1371
|
// src/primitive/floor/Floor.ts
|
|
872
|
-
|
|
1372
|
+
init_VisibilityLayerMask();
|
|
1373
|
+
import { Color as Color5, Mesh as Mesh2, MeshStandardMaterial, PlaneGeometry } from "three";
|
|
873
1374
|
var DIVEFloor = class extends Mesh2 {
|
|
874
1375
|
constructor() {
|
|
875
|
-
super(new PlaneGeometry(1e4, 1e4), new
|
|
1376
|
+
super(new PlaneGeometry(1e4, 1e4), new MeshStandardMaterial({ color: new Color5(150 / 255, 150 / 255, 150 / 255) }));
|
|
876
1377
|
this.isFloor = true;
|
|
877
1378
|
this.name = "Floor";
|
|
878
1379
|
this.layers.mask = PRODUCT_LAYER_MASK;
|
|
@@ -883,7 +1384,7 @@ var DIVEFloor = class extends Mesh2 {
|
|
|
883
1384
|
this.visible = visible;
|
|
884
1385
|
}
|
|
885
1386
|
SetColor(color) {
|
|
886
|
-
this.material.color = new
|
|
1387
|
+
this.material.color = new Color5(color);
|
|
887
1388
|
}
|
|
888
1389
|
};
|
|
889
1390
|
|
|
@@ -892,8 +1393,9 @@ var GRID_CENTER_LINE_COLOR = "#888888";
|
|
|
892
1393
|
var GRID_SIDE_LINE_COLOR = "#dddddd";
|
|
893
1394
|
|
|
894
1395
|
// src/grid/Grid.ts
|
|
895
|
-
|
|
896
|
-
|
|
1396
|
+
init_VisibilityLayerMask();
|
|
1397
|
+
import { GridHelper, Object3D as Object3D8 } from "three";
|
|
1398
|
+
var DIVEGrid = class extends Object3D8 {
|
|
897
1399
|
constructor() {
|
|
898
1400
|
super();
|
|
899
1401
|
this.name = "Grid";
|
|
@@ -902,10 +1404,13 @@ var DIVEGrid = class extends Object3D7 {
|
|
|
902
1404
|
grid.layers.mask = HELPER_LAYER_MASK;
|
|
903
1405
|
this.add(grid);
|
|
904
1406
|
}
|
|
1407
|
+
SetVisibility(visible) {
|
|
1408
|
+
this.visible = visible;
|
|
1409
|
+
}
|
|
905
1410
|
};
|
|
906
1411
|
|
|
907
1412
|
// src/scene/root/Root.ts
|
|
908
|
-
var DIVERoot = class extends
|
|
1413
|
+
var DIVERoot = class extends Object3D9 {
|
|
909
1414
|
get Floor() {
|
|
910
1415
|
return this.floor;
|
|
911
1416
|
}
|
|
@@ -924,6 +1429,15 @@ var DIVERoot = class extends Object3D8 {
|
|
|
924
1429
|
this.grid = new DIVEGrid();
|
|
925
1430
|
this.add(this.grid);
|
|
926
1431
|
}
|
|
1432
|
+
ComputeSceneBB() {
|
|
1433
|
+
const bb = new Box32();
|
|
1434
|
+
this.modelRoot.traverse((object) => {
|
|
1435
|
+
if ("isObject3D" in object) {
|
|
1436
|
+
bb.expandByObject(object);
|
|
1437
|
+
}
|
|
1438
|
+
});
|
|
1439
|
+
return bb;
|
|
1440
|
+
}
|
|
927
1441
|
GetSceneObject(object) {
|
|
928
1442
|
switch (object.entityType) {
|
|
929
1443
|
case "pov": {
|
|
@@ -994,11 +1508,15 @@ var DIVEScene = class extends Scene2 {
|
|
|
994
1508
|
}
|
|
995
1509
|
constructor() {
|
|
996
1510
|
super();
|
|
1511
|
+
this.background = new Color6(16777215);
|
|
997
1512
|
this.root = new DIVERoot();
|
|
998
1513
|
this.add(this.root);
|
|
999
1514
|
}
|
|
1000
1515
|
SetBackground(color) {
|
|
1001
|
-
this.background = new
|
|
1516
|
+
this.background = new Color6(color);
|
|
1517
|
+
}
|
|
1518
|
+
ComputeSceneBB() {
|
|
1519
|
+
return this.Root.ComputeSceneBB();
|
|
1002
1520
|
}
|
|
1003
1521
|
GetSceneObject(object) {
|
|
1004
1522
|
return this.Root.GetSceneObject(object);
|
|
@@ -1017,36 +1535,12 @@ var DIVEScene = class extends Scene2 {
|
|
|
1017
1535
|
}
|
|
1018
1536
|
};
|
|
1019
1537
|
|
|
1020
|
-
// src/
|
|
1021
|
-
|
|
1022
|
-
var DIVEPerspectiveCameraDefaultSettings = {
|
|
1023
|
-
fov: 80,
|
|
1024
|
-
near: 0.1,
|
|
1025
|
-
far: 1e3
|
|
1026
|
-
};
|
|
1027
|
-
var _DIVEPerspectiveCamera = class _DIVEPerspectiveCamera extends PerspectiveCamera {
|
|
1028
|
-
constructor(settings = DIVEPerspectiveCameraDefaultSettings) {
|
|
1029
|
-
super(settings.fov, 1, settings.near, settings.far);
|
|
1030
|
-
this.onSetCameraLayer = () => {
|
|
1031
|
-
};
|
|
1032
|
-
this.layers.mask = _DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
1033
|
-
}
|
|
1034
|
-
OnResize(width, height) {
|
|
1035
|
-
this.aspect = width / height;
|
|
1036
|
-
this.updateProjectionMatrix();
|
|
1037
|
-
}
|
|
1038
|
-
SetCameraLayer(layer) {
|
|
1039
|
-
this.layers.mask = layer === "LIVE" ? _DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK : _DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
1040
|
-
this.onSetCameraLayer(this.layers.mask);
|
|
1041
|
-
}
|
|
1042
|
-
};
|
|
1043
|
-
_DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK = DEFAULT_LAYER_MASK | UI_LAYER_MASK | HELPER_LAYER_MASK | PRODUCT_LAYER_MASK;
|
|
1044
|
-
_DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK = PRODUCT_LAYER_MASK;
|
|
1045
|
-
var DIVEPerspectiveCamera = _DIVEPerspectiveCamera;
|
|
1538
|
+
// src/dive.ts
|
|
1539
|
+
init_PerspectiveCamera();
|
|
1046
1540
|
|
|
1047
1541
|
// src/controls/OrbitControls.ts
|
|
1048
1542
|
import { OrbitControls } from "three/examples/jsm/Addons.js";
|
|
1049
|
-
import { MathUtils as
|
|
1543
|
+
import { MathUtils as MathUtils2, Vector3 as Vector33 } from "three";
|
|
1050
1544
|
import { Easing, Tween } from "@tweenjs/tween.js";
|
|
1051
1545
|
var DIVEOrbitControlsDefaultSettings = {
|
|
1052
1546
|
enableDamping: true,
|
|
@@ -1074,10 +1568,20 @@ var _DIVEOrbitControls = class _DIVEOrbitControls extends OrbitControls {
|
|
|
1074
1568
|
this.enableDamping = settings.enableDamping;
|
|
1075
1569
|
this.dampingFactor = settings.dampingFactor;
|
|
1076
1570
|
}
|
|
1571
|
+
ComputeEncompassingView(bb) {
|
|
1572
|
+
const center = bb.getCenter(new Vector33());
|
|
1573
|
+
const size = bb.getSize(new Vector33());
|
|
1574
|
+
const distance = Math.max(size.x, size.y, size.z) * 1.25;
|
|
1575
|
+
const direction = this.object.position.clone().normalize();
|
|
1576
|
+
return {
|
|
1577
|
+
position: direction.multiplyScalar(distance),
|
|
1578
|
+
target: center
|
|
1579
|
+
};
|
|
1580
|
+
}
|
|
1077
1581
|
ZoomIn(by) {
|
|
1078
1582
|
const zoomBy = by || _DIVEOrbitControls.DEFAULT_ZOOM_FACTOR;
|
|
1079
1583
|
const { minDistance, maxDistance } = this;
|
|
1080
|
-
this.minDistance = this.maxDistance =
|
|
1584
|
+
this.minDistance = this.maxDistance = MathUtils2.clamp(this.getDistance() - zoomBy, minDistance + zoomBy, maxDistance - zoomBy);
|
|
1081
1585
|
this.update();
|
|
1082
1586
|
this.minDistance = minDistance;
|
|
1083
1587
|
this.maxDistance = maxDistance;
|
|
@@ -1085,7 +1589,7 @@ var _DIVEOrbitControls = class _DIVEOrbitControls extends OrbitControls {
|
|
|
1085
1589
|
ZoomOut(by) {
|
|
1086
1590
|
const zoomBy = by || _DIVEOrbitControls.DEFAULT_ZOOM_FACTOR;
|
|
1087
1591
|
const { minDistance, maxDistance } = this;
|
|
1088
|
-
this.minDistance = this.maxDistance =
|
|
1592
|
+
this.minDistance = this.maxDistance = MathUtils2.clamp(this.getDistance() + zoomBy, minDistance + zoomBy, maxDistance - zoomBy);
|
|
1089
1593
|
this.update();
|
|
1090
1594
|
this.minDistance = minDistance;
|
|
1091
1595
|
this.maxDistance = maxDistance;
|
|
@@ -1134,394 +1638,40 @@ var _DIVEOrbitControls = class _DIVEOrbitControls extends OrbitControls {
|
|
|
1134
1638
|
_DIVEOrbitControls.DEFAULT_ZOOM_FACTOR = 1;
|
|
1135
1639
|
var DIVEOrbitControls = _DIVEOrbitControls;
|
|
1136
1640
|
|
|
1137
|
-
// src/
|
|
1138
|
-
var
|
|
1139
|
-
|
|
1140
|
-
this.
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
}
|
|
1144
|
-
GenerateMedia(position, target, width, height) {
|
|
1145
|
-
const resetPosition = this.controller.object.position.clone();
|
|
1146
|
-
const resetRotation = this.controller.object.quaternion.clone();
|
|
1147
|
-
this.renderer.OnResize(width, height);
|
|
1148
|
-
this.controller.object.OnResize(width, height);
|
|
1149
|
-
this.controller.object.position.copy(position);
|
|
1150
|
-
this.controller.target.copy(target);
|
|
1151
|
-
this.controller.update();
|
|
1152
|
-
const dataUri = this.DrawCanvas().toDataURL();
|
|
1153
|
-
this.controller.object.position.copy(resetPosition);
|
|
1154
|
-
this.controller.object.quaternion.copy(resetRotation);
|
|
1155
|
-
return dataUri;
|
|
1156
|
-
}
|
|
1157
|
-
DrawCanvas(canvasElement) {
|
|
1158
|
-
const restore = this.renderer.domElement;
|
|
1159
|
-
if (canvasElement) {
|
|
1160
|
-
this.renderer.domElement = canvasElement;
|
|
1161
|
-
}
|
|
1162
|
-
this.controller.object.layers.mask = DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK;
|
|
1163
|
-
this.renderer.render(this.scene, this.controller.object);
|
|
1164
|
-
this.controller.object.layers.mask = DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
1165
|
-
const returnCanvas = this.renderer.domElement;
|
|
1166
|
-
if (canvasElement) {
|
|
1167
|
-
this.renderer.domElement = restore;
|
|
1641
|
+
// src/toolbox/Toolbox.ts
|
|
1642
|
+
var DIVEToolbox = class {
|
|
1643
|
+
get selectTool() {
|
|
1644
|
+
if (!this._selectTool) {
|
|
1645
|
+
const DIVESelectTool2 = (init_SelectTool(), __toCommonJS(SelectTool_exports)).DIVESelectTool;
|
|
1646
|
+
this._selectTool = new DIVESelectTool2(this._scene, this._controller);
|
|
1168
1647
|
}
|
|
1169
|
-
return
|
|
1648
|
+
return this._selectTool;
|
|
1170
1649
|
}
|
|
1171
|
-
};
|
|
1172
|
-
|
|
1173
|
-
// src/interface/Selectable.ts
|
|
1174
|
-
function isSelectable(object) {
|
|
1175
|
-
return "isSelectable" in object;
|
|
1176
|
-
}
|
|
1177
|
-
|
|
1178
|
-
// src/toolbox/BaseTool.ts
|
|
1179
|
-
import { Raycaster as Raycaster2, Vector2, Vector3 as Vector32 } from "three";
|
|
1180
|
-
|
|
1181
|
-
// src/interface/Draggable.ts
|
|
1182
|
-
var isDraggable = (object) => {
|
|
1183
|
-
return "isDraggable" in object;
|
|
1184
|
-
};
|
|
1185
|
-
var findDraggableInterface = (child) => {
|
|
1186
|
-
if (child === void 0) return void 0;
|
|
1187
|
-
if (child.parent === null) {
|
|
1188
|
-
return void 0;
|
|
1189
|
-
}
|
|
1190
|
-
if (isDraggable(child)) {
|
|
1191
|
-
return child;
|
|
1192
|
-
}
|
|
1193
|
-
return findDraggableInterface(child.parent);
|
|
1194
|
-
};
|
|
1195
|
-
|
|
1196
|
-
// src/interface/Hoverable.ts
|
|
1197
|
-
var isHoverable = (object) => {
|
|
1198
|
-
return "isHoverable" in object;
|
|
1199
|
-
};
|
|
1200
|
-
var findHoverableInterface = (child) => {
|
|
1201
|
-
if (child === void 0) return void 0;
|
|
1202
|
-
if (child.parent === null) {
|
|
1203
|
-
return void 0;
|
|
1204
|
-
}
|
|
1205
|
-
if (isHoverable(child)) {
|
|
1206
|
-
return child;
|
|
1207
|
-
}
|
|
1208
|
-
return findHoverableInterface(child.parent);
|
|
1209
|
-
};
|
|
1210
|
-
|
|
1211
|
-
// src/toolbox/BaseTool.ts
|
|
1212
|
-
var DIVEBaseTool = class {
|
|
1213
1650
|
constructor(scene, controller) {
|
|
1214
|
-
this.POINTER_DRAG_THRESHOLD = 1e-3;
|
|
1215
|
-
this.name = "BaseTool";
|
|
1216
|
-
this._canvas = controller.domElement;
|
|
1217
1651
|
this._scene = scene;
|
|
1218
1652
|
this._controller = controller;
|
|
1219
|
-
this.
|
|
1220
|
-
this.
|
|
1221
|
-
this._pointerMiddleDown = false;
|
|
1222
|
-
this._pointerSecondaryDown = false;
|
|
1223
|
-
this._lastPointerDown = new Vector2();
|
|
1224
|
-
this._lastPointerUp = new Vector2();
|
|
1225
|
-
this._raycaster = new Raycaster2();
|
|
1226
|
-
this._raycaster.layers.mask = PRODUCT_LAYER_MASK | UI_LAYER_MASK;
|
|
1227
|
-
this._intersects = [];
|
|
1228
|
-
this._hovered = null;
|
|
1229
|
-
this._dragging = false;
|
|
1230
|
-
this._dragStart = new Vector32();
|
|
1231
|
-
this._dragCurrent = new Vector32();
|
|
1232
|
-
this._dragEnd = new Vector32();
|
|
1233
|
-
this._dragDelta = new Vector32();
|
|
1234
|
-
this._draggable = null;
|
|
1235
|
-
this._dragRaycastOnObjects = null;
|
|
1236
|
-
}
|
|
1237
|
-
get _pointerAnyDown() {
|
|
1238
|
-
return this._pointerPrimaryDown || this._pointerMiddleDown || this._pointerSecondaryDown;
|
|
1239
|
-
}
|
|
1240
|
-
Activate() {
|
|
1241
|
-
}
|
|
1242
|
-
Deactivate() {
|
|
1243
|
-
}
|
|
1244
|
-
onPointerDown(e) {
|
|
1245
|
-
var _a;
|
|
1246
|
-
switch (e.button) {
|
|
1247
|
-
case 0:
|
|
1248
|
-
this._pointerPrimaryDown = true;
|
|
1249
|
-
break;
|
|
1250
|
-
case 1:
|
|
1251
|
-
this._pointerMiddleDown = true;
|
|
1252
|
-
break;
|
|
1253
|
-
case 2:
|
|
1254
|
-
this._pointerSecondaryDown = true;
|
|
1255
|
-
break;
|
|
1256
|
-
}
|
|
1257
|
-
this._lastPointerDown.copy(this._pointer);
|
|
1258
|
-
this._draggable = findDraggableInterface((_a = this._intersects[0]) == null ? void 0 : _a.object) || null;
|
|
1259
|
-
}
|
|
1260
|
-
onDragStart(e) {
|
|
1261
|
-
if (!this._draggable) return;
|
|
1262
|
-
if (this._dragRaycastOnObjects !== null) {
|
|
1263
|
-
this._intersects = this._raycaster.intersectObjects(this._dragRaycastOnObjects, true);
|
|
1264
|
-
}
|
|
1265
|
-
if (this._intersects.length === 0) return;
|
|
1266
|
-
this._dragStart.copy(this._intersects[0].point.clone());
|
|
1267
|
-
this._dragCurrent.copy(this._intersects[0].point.clone());
|
|
1268
|
-
this._dragEnd.copy(this._dragStart.clone());
|
|
1269
|
-
this._dragDelta.set(0, 0, 0);
|
|
1270
|
-
if (this._draggable && this._draggable.onDragStart) {
|
|
1271
|
-
this._draggable.onDragStart({
|
|
1272
|
-
dragStart: this._dragStart,
|
|
1273
|
-
dragCurrent: this._dragCurrent,
|
|
1274
|
-
dragEnd: this._dragEnd,
|
|
1275
|
-
dragDelta: this._dragDelta
|
|
1276
|
-
});
|
|
1277
|
-
this._dragging = true;
|
|
1278
|
-
this._controller.enabled = false;
|
|
1279
|
-
}
|
|
1280
|
-
}
|
|
1281
|
-
onPointerMove(e) {
|
|
1282
|
-
var _a;
|
|
1283
|
-
this._pointer.x = e.offsetX / this._canvas.clientWidth * 2 - 1;
|
|
1284
|
-
this._pointer.y = -(e.offsetY / this._canvas.clientHeight) * 2 + 1;
|
|
1285
|
-
this._raycaster.setFromCamera(this._pointer, this._controller.object);
|
|
1286
|
-
this._intersects = this.raycast(this._scene.children);
|
|
1287
|
-
const hoverable = findHoverableInterface((_a = this._intersects[0]) == null ? void 0 : _a.object);
|
|
1288
|
-
if (this._intersects[0] && hoverable) {
|
|
1289
|
-
if (!this._hovered) {
|
|
1290
|
-
if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
|
|
1291
|
-
this._hovered = hoverable;
|
|
1292
|
-
return;
|
|
1293
|
-
}
|
|
1294
|
-
if (this._hovered.uuid !== hoverable.uuid) {
|
|
1295
|
-
if (this._hovered.onPointerLeave) this._hovered.onPointerLeave();
|
|
1296
|
-
if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
|
|
1297
|
-
this._hovered = hoverable;
|
|
1298
|
-
return;
|
|
1299
|
-
}
|
|
1300
|
-
if (hoverable.onPointerOver) hoverable.onPointerOver(this._intersects[0]);
|
|
1301
|
-
this._hovered = hoverable;
|
|
1302
|
-
} else {
|
|
1303
|
-
if (this._hovered) {
|
|
1304
|
-
if (this._hovered.onPointerLeave) this._hovered.onPointerLeave();
|
|
1305
|
-
}
|
|
1306
|
-
this._hovered = null;
|
|
1307
|
-
}
|
|
1308
|
-
if (this._pointerAnyDown) {
|
|
1309
|
-
if (!this._dragging) {
|
|
1310
|
-
this.onDragStart(e);
|
|
1311
|
-
}
|
|
1312
|
-
this.onDrag(e);
|
|
1313
|
-
}
|
|
1314
|
-
}
|
|
1315
|
-
onDrag(e) {
|
|
1316
|
-
if (this._dragRaycastOnObjects !== null) {
|
|
1317
|
-
this._intersects = this._raycaster.intersectObjects(this._dragRaycastOnObjects, true);
|
|
1318
|
-
}
|
|
1319
|
-
const intersect = this._intersects[0];
|
|
1320
|
-
if (!intersect) return;
|
|
1321
|
-
this._dragCurrent.copy(intersect.point.clone());
|
|
1322
|
-
this._dragEnd.copy(intersect.point.clone());
|
|
1323
|
-
this._dragDelta.subVectors(this._dragCurrent.clone(), this._dragStart.clone());
|
|
1324
|
-
if (this._draggable && this._draggable.onDrag) {
|
|
1325
|
-
this._draggable.onDrag({
|
|
1326
|
-
dragStart: this._dragStart,
|
|
1327
|
-
dragCurrent: this._dragCurrent,
|
|
1328
|
-
dragEnd: this._dragEnd,
|
|
1329
|
-
dragDelta: this._dragDelta
|
|
1330
|
-
});
|
|
1331
|
-
}
|
|
1332
|
-
}
|
|
1333
|
-
onPointerUp(e) {
|
|
1334
|
-
if (this.pointerWasDragged() || this._dragging) {
|
|
1335
|
-
if (this._draggable) {
|
|
1336
|
-
this.onDragEnd(e);
|
|
1337
|
-
}
|
|
1338
|
-
} else {
|
|
1339
|
-
this.onClick(e);
|
|
1340
|
-
}
|
|
1341
|
-
switch (e.button) {
|
|
1342
|
-
case 0:
|
|
1343
|
-
this._pointerPrimaryDown = false;
|
|
1344
|
-
break;
|
|
1345
|
-
case 1:
|
|
1346
|
-
this._pointerMiddleDown = false;
|
|
1347
|
-
break;
|
|
1348
|
-
case 2:
|
|
1349
|
-
this._pointerSecondaryDown = false;
|
|
1350
|
-
break;
|
|
1351
|
-
}
|
|
1352
|
-
this._lastPointerUp.copy(this._pointer);
|
|
1353
|
-
}
|
|
1354
|
-
onClick(e) {
|
|
1355
|
-
}
|
|
1356
|
-
onDragEnd(e) {
|
|
1357
|
-
const intersect = this._intersects[0];
|
|
1358
|
-
if (intersect) {
|
|
1359
|
-
this._dragEnd.copy(intersect.point.clone());
|
|
1360
|
-
this._dragCurrent.copy(intersect.point.clone());
|
|
1361
|
-
this._dragDelta.subVectors(this._dragCurrent.clone(), this._dragStart.clone());
|
|
1362
|
-
}
|
|
1363
|
-
if (this._draggable && this._draggable.onDragEnd) {
|
|
1364
|
-
this._draggable.onDragEnd({
|
|
1365
|
-
dragStart: this._dragStart,
|
|
1366
|
-
dragCurrent: this._dragCurrent,
|
|
1367
|
-
dragEnd: this._dragEnd,
|
|
1368
|
-
dragDelta: this._dragDelta
|
|
1369
|
-
});
|
|
1370
|
-
}
|
|
1371
|
-
this._draggable = null;
|
|
1372
|
-
this._dragging = false;
|
|
1373
|
-
this._dragStart.set(0, 0, 0);
|
|
1374
|
-
this._dragCurrent.set(0, 0, 0);
|
|
1375
|
-
this._dragEnd.set(0, 0, 0);
|
|
1376
|
-
this._dragDelta.set(0, 0, 0);
|
|
1377
|
-
this._controller.enabled = true;
|
|
1378
|
-
}
|
|
1379
|
-
onWheel(e) {
|
|
1380
|
-
}
|
|
1381
|
-
raycast(objects) {
|
|
1382
|
-
if (objects !== void 0) return this._raycaster.intersectObjects(objects, true).filter((i) => i.object.visible);
|
|
1383
|
-
return this._raycaster.intersectObjects(this._scene.children, true).filter((i) => i.object.visible);
|
|
1384
|
-
}
|
|
1385
|
-
pointerWasDragged() {
|
|
1386
|
-
return this._lastPointerDown.distanceTo(this._pointer) > this.POINTER_DRAG_THRESHOLD;
|
|
1653
|
+
this._selectTool = null;
|
|
1654
|
+
this._activeTool = null;
|
|
1387
1655
|
}
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
// src/toolbox/transform/TransformTool.ts
|
|
1391
|
-
import { TransformControls } from "three/examples/jsm/Addons";
|
|
1392
|
-
var DIVETransformTool = class extends DIVEBaseTool {
|
|
1393
|
-
constructor(scene, controller) {
|
|
1394
|
-
super(scene, controller);
|
|
1395
|
-
this.name = "DIVETransformTool";
|
|
1396
|
-
this._gizmo = new TransformControls(this._controller.object, this._controller.domElement);
|
|
1397
|
-
this._gizmo.mode = "translate";
|
|
1398
|
-
this._gizmo.addEventListener("mouseDown", () => {
|
|
1399
|
-
controller.enabled = false;
|
|
1400
|
-
});
|
|
1401
|
-
this._gizmo.addEventListener("mouseUp", () => {
|
|
1402
|
-
controller.enabled = true;
|
|
1403
|
-
});
|
|
1404
|
-
this._gizmo.addEventListener("objectChange", () => {
|
|
1405
|
-
if (!this._gizmo.object) return;
|
|
1406
|
-
if (!("isMoveable" in this._gizmo.object)) return;
|
|
1407
|
-
if (!("onMove" in this._gizmo.object)) return;
|
|
1408
|
-
this._gizmo.object.onMove();
|
|
1409
|
-
});
|
|
1410
|
-
scene.add(this._gizmo);
|
|
1411
|
-
}
|
|
1412
|
-
Activate() {
|
|
1413
|
-
}
|
|
1414
|
-
SetGizmoMode(mode) {
|
|
1415
|
-
this._gizmo.mode = mode;
|
|
1416
|
-
}
|
|
1417
|
-
SetGizmoVisibility(active) {
|
|
1418
|
-
const contains = this._scene.children.includes(this._gizmo);
|
|
1419
|
-
if (active && !contains) {
|
|
1420
|
-
this._scene.add(this._gizmo);
|
|
1421
|
-
} else if (!active && contains) {
|
|
1422
|
-
this._scene.remove(this._gizmo);
|
|
1423
|
-
}
|
|
1424
|
-
}
|
|
1425
|
-
// public onPointerDown(e: PointerEvent): void {
|
|
1426
|
-
// super.onPointerDown(e);
|
|
1427
|
-
// // if (this._hovered) {
|
|
1428
|
-
// // this._dragRaycastOnObjects = this._gizmo.gizmoPlane.children;
|
|
1429
|
-
// // }
|
|
1430
|
-
// }
|
|
1431
|
-
// protected raycast(): Intersection[] {
|
|
1432
|
-
// return super.raycast(this._gizmo.gizmoNode.children);
|
|
1433
|
-
// }
|
|
1434
|
-
};
|
|
1435
|
-
|
|
1436
|
-
// src/toolbox/select/SelectTool.ts
|
|
1437
|
-
var DIVESelectTool = class extends DIVETransformTool {
|
|
1438
|
-
constructor(scene, controller) {
|
|
1439
|
-
super(scene, controller);
|
|
1440
|
-
this.name = "SelectTool";
|
|
1441
|
-
}
|
|
1442
|
-
Activate() {
|
|
1443
|
-
}
|
|
1444
|
-
Select(selectable) {
|
|
1445
|
-
if (selectable.onSelect) selectable.onSelect();
|
|
1446
|
-
this.AttachGizmo(selectable);
|
|
1447
|
-
}
|
|
1448
|
-
Deselect(selectable) {
|
|
1449
|
-
if (selectable.onDeselect) selectable.onDeselect();
|
|
1450
|
-
this.DetachGizmo();
|
|
1451
|
-
}
|
|
1452
|
-
DetachGizmo() {
|
|
1453
|
-
this._gizmo.detach();
|
|
1454
|
-
}
|
|
1455
|
-
AttachGizmo(selectable) {
|
|
1456
|
-
if ("isMoveable" in selectable) {
|
|
1457
|
-
const movable = selectable;
|
|
1458
|
-
this._gizmo.attach(movable);
|
|
1459
|
-
this.SetGizmoVisibility(movable.visible);
|
|
1460
|
-
}
|
|
1461
|
-
}
|
|
1462
|
-
onClick(e) {
|
|
1463
|
-
super.onClick(e);
|
|
1464
|
-
const first = this._raycaster.intersectObjects(this._scene.Root.children, true).filter((intersect) => intersect.object.visible)[0];
|
|
1465
|
-
const selectable = this.findSelectableInterface(first == null ? void 0 : first.object);
|
|
1466
|
-
if (!first || !selectable) {
|
|
1467
|
-
if (this._gizmo.object) {
|
|
1468
|
-
this.Deselect(this._gizmo.object);
|
|
1469
|
-
}
|
|
1470
|
-
return;
|
|
1471
|
-
}
|
|
1472
|
-
if (this._gizmo.object) {
|
|
1473
|
-
if (this._gizmo.object.uuid === selectable.uuid) return;
|
|
1474
|
-
this.Deselect(this._gizmo.object);
|
|
1475
|
-
}
|
|
1476
|
-
this.Select(selectable);
|
|
1477
|
-
}
|
|
1478
|
-
findSelectableInterface(child) {
|
|
1479
|
-
if (child === void 0) return void 0;
|
|
1480
|
-
if (child.parent === null) {
|
|
1481
|
-
return void 0;
|
|
1482
|
-
}
|
|
1483
|
-
if (isSelectable(child)) {
|
|
1484
|
-
return child;
|
|
1485
|
-
}
|
|
1486
|
-
return this.findSelectableInterface(child.parent);
|
|
1487
|
-
}
|
|
1488
|
-
};
|
|
1489
|
-
|
|
1490
|
-
// src/toolbox/Toolbox.ts
|
|
1491
|
-
var DIVEToolbox = class {
|
|
1492
|
-
constructor(scene, controller) {
|
|
1493
|
-
this.removeListenersCallback = () => {
|
|
1494
|
-
};
|
|
1495
|
-
this.selectTool = new DIVESelectTool(scene, controller);
|
|
1496
|
-
const pointerMove = this.onPointerMove.bind(this);
|
|
1497
|
-
const pointerDown = this.onPointerDown.bind(this);
|
|
1498
|
-
const pointerUp = this.onPointerUp.bind(this);
|
|
1499
|
-
const wheel = this.onWheel.bind(this);
|
|
1500
|
-
controller.domElement.addEventListener("pointermove", pointerMove);
|
|
1501
|
-
controller.domElement.addEventListener("pointerdown", pointerDown);
|
|
1502
|
-
controller.domElement.addEventListener("pointerup", pointerUp);
|
|
1503
|
-
controller.domElement.addEventListener("wheel", wheel);
|
|
1504
|
-
this.removeListenersCallback = () => {
|
|
1505
|
-
controller.domElement.removeEventListener("pointermove", pointerMove);
|
|
1506
|
-
controller.domElement.removeEventListener("pointerdown", pointerDown);
|
|
1507
|
-
controller.domElement.removeEventListener("pointerup", pointerUp);
|
|
1508
|
-
controller.domElement.removeEventListener("wheel", wheel);
|
|
1509
|
-
};
|
|
1510
|
-
this.activeTool = this.selectTool;
|
|
1511
|
-
this.activeTool.Activate();
|
|
1512
|
-
}
|
|
1513
|
-
dispose() {
|
|
1514
|
-
this.removeListenersCallback();
|
|
1656
|
+
Dispose() {
|
|
1657
|
+
this.removeEventListeners();
|
|
1515
1658
|
}
|
|
1516
1659
|
GetActiveTool() {
|
|
1517
|
-
return this.
|
|
1660
|
+
return this._activeTool;
|
|
1518
1661
|
}
|
|
1519
1662
|
UseTool(tool) {
|
|
1520
|
-
|
|
1663
|
+
var _a;
|
|
1664
|
+
(_a = this._activeTool) == null ? void 0 : _a.Deactivate();
|
|
1521
1665
|
switch (tool) {
|
|
1522
1666
|
case "select": {
|
|
1667
|
+
this.addEventListeners();
|
|
1523
1668
|
this.selectTool.Activate();
|
|
1524
|
-
this.
|
|
1669
|
+
this._activeTool = this.selectTool;
|
|
1670
|
+
break;
|
|
1671
|
+
}
|
|
1672
|
+
case "none": {
|
|
1673
|
+
this.removeEventListeners();
|
|
1674
|
+
this._activeTool = null;
|
|
1525
1675
|
break;
|
|
1526
1676
|
}
|
|
1527
1677
|
default: {
|
|
@@ -1536,30 +1686,39 @@ var DIVEToolbox = class {
|
|
|
1536
1686
|
this.selectTool.SetGizmoVisibility(active);
|
|
1537
1687
|
}
|
|
1538
1688
|
onPointerMove(e) {
|
|
1539
|
-
|
|
1689
|
+
var _a;
|
|
1690
|
+
(_a = this._activeTool) == null ? void 0 : _a.onPointerMove(e);
|
|
1540
1691
|
}
|
|
1541
1692
|
onPointerDown(e) {
|
|
1542
|
-
|
|
1693
|
+
var _a;
|
|
1694
|
+
(_a = this._activeTool) == null ? void 0 : _a.onPointerDown(e);
|
|
1543
1695
|
}
|
|
1544
1696
|
onPointerUp(e) {
|
|
1545
|
-
|
|
1697
|
+
var _a;
|
|
1698
|
+
(_a = this._activeTool) == null ? void 0 : _a.onPointerUp(e);
|
|
1546
1699
|
}
|
|
1547
1700
|
onWheel(e) {
|
|
1548
|
-
|
|
1701
|
+
var _a;
|
|
1702
|
+
(_a = this._activeTool) == null ? void 0 : _a.onWheel(e);
|
|
1549
1703
|
}
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1704
|
+
addEventListeners() {
|
|
1705
|
+
this._controller.domElement.addEventListener("pointermove", (e) => this.onPointerMove(e));
|
|
1706
|
+
this._controller.domElement.addEventListener("pointerdown", (e) => this.onPointerDown(e));
|
|
1707
|
+
this._controller.domElement.addEventListener("pointerup", (e) => this.onPointerUp(e));
|
|
1708
|
+
this._controller.domElement.addEventListener("wheel", (e) => this.onWheel(e));
|
|
1709
|
+
}
|
|
1710
|
+
removeEventListeners() {
|
|
1711
|
+
this._controller.domElement.removeEventListener("pointermove", (e) => this.onPointerMove(e));
|
|
1712
|
+
this._controller.domElement.removeEventListener("pointerdown", (e) => this.onPointerDown(e));
|
|
1713
|
+
this._controller.domElement.removeEventListener("pointerup", (e) => this.onPointerUp(e));
|
|
1714
|
+
this._controller.domElement.removeEventListener("wheel", (e) => this.onWheel(e));
|
|
1558
1715
|
}
|
|
1559
1716
|
};
|
|
1717
|
+
DIVEToolbox.DefaultTool = "select";
|
|
1560
1718
|
|
|
1561
1719
|
// src/axiscamera/AxisCamera.ts
|
|
1562
|
-
|
|
1720
|
+
init_VisibilityLayerMask();
|
|
1721
|
+
import { AxesHelper, Color as Color7, Matrix4, OrthographicCamera, Vector4 } from "three";
|
|
1563
1722
|
import SpriteText from "three-spritetext";
|
|
1564
1723
|
|
|
1565
1724
|
// src/constant/AxisHelperColors.ts
|
|
@@ -1572,7 +1731,7 @@ var AxesColorBlue = AxesColorBlueLetter;
|
|
|
1572
1731
|
|
|
1573
1732
|
// src/axiscamera/AxisCamera.ts
|
|
1574
1733
|
var DIVEAxisCamera = class extends OrthographicCamera {
|
|
1575
|
-
constructor() {
|
|
1734
|
+
constructor(renderer, scene, controls) {
|
|
1576
1735
|
super(-1, 1, 1, -1, 0.1, 100);
|
|
1577
1736
|
this.layers.mask = COORDINATE_LAYER_MASK;
|
|
1578
1737
|
this.axesHelper = new AxesHelper(0.5);
|
|
@@ -1580,9 +1739,9 @@ var DIVEAxisCamera = class extends OrthographicCamera {
|
|
|
1580
1739
|
this.axesHelper.material.depthTest = false;
|
|
1581
1740
|
this.axesHelper.position.set(0, 0, -1);
|
|
1582
1741
|
this.axesHelper.setColors(
|
|
1583
|
-
new
|
|
1584
|
-
new
|
|
1585
|
-
new
|
|
1742
|
+
new Color7(AxesColorRed),
|
|
1743
|
+
new Color7(AxesColorGreen),
|
|
1744
|
+
new Color7(AxesColorBlue)
|
|
1586
1745
|
);
|
|
1587
1746
|
const x = new SpriteText("X", 0.2, AxesColorRedLetter);
|
|
1588
1747
|
const y = new SpriteText("Y", 0.2, AxesColorGreenLetter);
|
|
@@ -1597,6 +1756,26 @@ var DIVEAxisCamera = class extends OrthographicCamera {
|
|
|
1597
1756
|
this.axesHelper.add(y);
|
|
1598
1757
|
this.axesHelper.add(z);
|
|
1599
1758
|
this.add(this.axesHelper);
|
|
1759
|
+
this._renderer = renderer;
|
|
1760
|
+
this._scene = scene;
|
|
1761
|
+
this._scene.add(this);
|
|
1762
|
+
const restoreViewport = new Vector4();
|
|
1763
|
+
this._renderCallbackId = renderer.AddPostRenderCallback(() => {
|
|
1764
|
+
const restoreBackground = scene.background;
|
|
1765
|
+
scene.background = null;
|
|
1766
|
+
renderer.getViewport(restoreViewport);
|
|
1767
|
+
renderer.setViewport(0, 0, 150, 150);
|
|
1768
|
+
renderer.autoClear = false;
|
|
1769
|
+
this.SetFromCameraMatrix(controls.object.matrix);
|
|
1770
|
+
renderer.render(scene, this);
|
|
1771
|
+
renderer.setViewport(restoreViewport);
|
|
1772
|
+
renderer.autoClear = true;
|
|
1773
|
+
scene.background = restoreBackground;
|
|
1774
|
+
});
|
|
1775
|
+
}
|
|
1776
|
+
Dispose() {
|
|
1777
|
+
this._renderer.RemovePostRenderCallback(this._renderCallbackId);
|
|
1778
|
+
this._scene.remove(this);
|
|
1600
1779
|
}
|
|
1601
1780
|
SetFromCameraMatrix(matrix) {
|
|
1602
1781
|
this.axesHelper.rotation.setFromRotationMatrix(new Matrix4().extractRotation(matrix).invert());
|
|
@@ -1716,13 +1895,63 @@ var DIVEMath = {
|
|
|
1716
1895
|
};
|
|
1717
1896
|
|
|
1718
1897
|
// src/dive.ts
|
|
1898
|
+
import { generateUUID as generateUUID2 } from "three/src/math/MathUtils";
|
|
1719
1899
|
var DIVEDefaultSettings = {
|
|
1720
1900
|
autoResize: true,
|
|
1901
|
+
displayAxes: false,
|
|
1721
1902
|
renderer: DIVERendererDefaultSettings,
|
|
1722
1903
|
perspectiveCamera: DIVEPerspectiveCameraDefaultSettings,
|
|
1723
1904
|
orbitControls: DIVEOrbitControlsDefaultSettings
|
|
1724
1905
|
};
|
|
1725
|
-
var DIVE = class {
|
|
1906
|
+
var DIVE = class _DIVE {
|
|
1907
|
+
// static members
|
|
1908
|
+
static QuickView(uri) {
|
|
1909
|
+
const dive = new _DIVE();
|
|
1910
|
+
dive.Communication.PerformAction("SET_CAMERA_TRANSFORM", {
|
|
1911
|
+
position: { x: 0, y: 2, z: 2 },
|
|
1912
|
+
target: { x: 0, y: 0.5, z: 0 }
|
|
1913
|
+
});
|
|
1914
|
+
const lightid = generateUUID2();
|
|
1915
|
+
dive.Communication.PerformAction("ADD_OBJECT", {
|
|
1916
|
+
entityType: "light",
|
|
1917
|
+
type: "scene",
|
|
1918
|
+
name: "light",
|
|
1919
|
+
id: lightid,
|
|
1920
|
+
enabled: true,
|
|
1921
|
+
visible: true,
|
|
1922
|
+
intensity: 1,
|
|
1923
|
+
color: 16777215
|
|
1924
|
+
});
|
|
1925
|
+
const modelid = generateUUID2();
|
|
1926
|
+
dive.Communication.Subscribe("MODEL_LOADED", (data) => {
|
|
1927
|
+
if (data.id !== modelid) return;
|
|
1928
|
+
dive.Communication.PerformAction("PLACE_ON_FLOOR", {
|
|
1929
|
+
id: modelid
|
|
1930
|
+
});
|
|
1931
|
+
const transform = dive.Communication.PerformAction("COMPUTE_ENCOMPASSING_VIEW", {});
|
|
1932
|
+
dive.Communication.PerformAction("SET_CAMERA_TRANSFORM", {
|
|
1933
|
+
position: transform.position,
|
|
1934
|
+
target: transform.target
|
|
1935
|
+
});
|
|
1936
|
+
});
|
|
1937
|
+
dive.Communication.PerformAction("ADD_OBJECT", {
|
|
1938
|
+
entityType: "model",
|
|
1939
|
+
name: "object",
|
|
1940
|
+
id: modelid,
|
|
1941
|
+
position: { x: 0, y: 0, z: 0 },
|
|
1942
|
+
rotation: { x: 0, y: 0, z: 0 },
|
|
1943
|
+
scale: { x: 1, y: 1, z: 1 },
|
|
1944
|
+
uri,
|
|
1945
|
+
visible: true,
|
|
1946
|
+
loaded: false
|
|
1947
|
+
});
|
|
1948
|
+
dive.Communication.PerformAction("UPDATE_SCENE", {
|
|
1949
|
+
backgroundColor: 16777215,
|
|
1950
|
+
gridEnabled: false,
|
|
1951
|
+
floorColor: 16777215
|
|
1952
|
+
});
|
|
1953
|
+
return dive;
|
|
1954
|
+
}
|
|
1726
1955
|
// getters
|
|
1727
1956
|
get Communication() {
|
|
1728
1957
|
return this.communication;
|
|
@@ -1732,6 +1961,7 @@ var DIVE = class {
|
|
|
1732
1961
|
}
|
|
1733
1962
|
// setters
|
|
1734
1963
|
set Settings(settings) {
|
|
1964
|
+
var _a;
|
|
1735
1965
|
const settingsDelta = getObjectDelta(this._settings, settings);
|
|
1736
1966
|
if (settingsDelta.renderer) this.renderer = new DIVERenderer(this._settings.renderer);
|
|
1737
1967
|
if (settingsDelta.perspectiveCamera) {
|
|
@@ -1751,6 +1981,12 @@ var DIVE = class {
|
|
|
1751
1981
|
this.removeResizeObserver();
|
|
1752
1982
|
}
|
|
1753
1983
|
}
|
|
1984
|
+
if (settingsDelta.displayAxes) {
|
|
1985
|
+
this.axisCamera = new DIVEAxisCamera(this.renderer, this.scene, this.orbitControls);
|
|
1986
|
+
} else {
|
|
1987
|
+
(_a = this.axisCamera) == null ? void 0 : _a.Dispose();
|
|
1988
|
+
this.axisCamera = null;
|
|
1989
|
+
}
|
|
1754
1990
|
Object.assign(this._settings, settings);
|
|
1755
1991
|
}
|
|
1756
1992
|
constructor(settings) {
|
|
@@ -1762,28 +1998,14 @@ var DIVE = class {
|
|
|
1762
1998
|
this.scene = new DIVEScene();
|
|
1763
1999
|
this.perspectiveCamera = new DIVEPerspectiveCamera(this._settings.perspectiveCamera);
|
|
1764
2000
|
this.orbitControls = new DIVEOrbitControls(this.perspectiveCamera, this.renderer, this._settings.orbitControls);
|
|
1765
|
-
this.mediaCreator = new DIVEMediaCreator(this.renderer, this.scene, this.orbitControls);
|
|
1766
2001
|
this.toolbox = new DIVEToolbox(this.scene, this.orbitControls);
|
|
1767
|
-
this.communication = new DIVECommunication(this.
|
|
1768
|
-
this.animationSystem =
|
|
1769
|
-
this.
|
|
1770
|
-
this.
|
|
1771
|
-
}
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
const restoreViewport = new Vector4();
|
|
1775
|
-
this.renderer.AddPostRenderCallback(() => {
|
|
1776
|
-
const restoreBackground = this.scene.background;
|
|
1777
|
-
this.scene.background = null;
|
|
1778
|
-
this.renderer.getViewport(restoreViewport);
|
|
1779
|
-
this.renderer.setViewport(0, 0, 150, 150);
|
|
1780
|
-
this.renderer.autoClear = false;
|
|
1781
|
-
this.axisCamera.SetFromCameraMatrix(this.perspectiveCamera.matrix);
|
|
1782
|
-
this.renderer.render(this.scene, this.axisCamera);
|
|
1783
|
-
this.renderer.setViewport(restoreViewport);
|
|
1784
|
-
this.renderer.autoClear = true;
|
|
1785
|
-
this.scene.background = restoreBackground;
|
|
1786
|
-
});
|
|
2002
|
+
this.communication = new DIVECommunication(this.renderer, this.scene, this.orbitControls, this.toolbox);
|
|
2003
|
+
this.animationSystem = null;
|
|
2004
|
+
if (this._settings.displayAxes) {
|
|
2005
|
+
this.axisCamera = new DIVEAxisCamera(this.renderer, this.scene, this.orbitControls);
|
|
2006
|
+
} else {
|
|
2007
|
+
this.axisCamera = null;
|
|
2008
|
+
}
|
|
1787
2009
|
if (this._settings.autoResize) {
|
|
1788
2010
|
this.addResizeObserver();
|
|
1789
2011
|
}
|
|
@@ -1794,6 +2016,14 @@ var DIVE = class {
|
|
|
1794
2016
|
}
|
|
1795
2017
|
};
|
|
1796
2018
|
}
|
|
2019
|
+
Dispose() {
|
|
2020
|
+
var _a;
|
|
2021
|
+
this.removeResizeObserver();
|
|
2022
|
+
this.renderer.Dispose();
|
|
2023
|
+
(_a = this.axisCamera) == null ? void 0 : _a.Dispose();
|
|
2024
|
+
this.toolbox.Dispose();
|
|
2025
|
+
this.communication.DestroyInstance();
|
|
2026
|
+
}
|
|
1797
2027
|
// methods
|
|
1798
2028
|
OnResize(width, height) {
|
|
1799
2029
|
this.renderer.OnResize(width, height);
|