@shopware-ag/dive 1.4.2 → 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 -24
- package/build/dive.cjs +734 -492
- package/build/dive.cjs.map +1 -1
- package/build/dive.d.cts +182 -113
- package/build/dive.d.ts +182 -113
- package/build/dive.js +733 -478
- 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 +59 -16
- package/src/com/__test__/Communication.test.ts +83 -24
- package/src/com/actions/camera/computeencompassingview.ts +9 -0
- package/src/com/actions/index.ts +4 -0
- package/src/com/actions/scene/updatescene.ts +1 -0
- package/src/com/actions/toolbox/transform/setgizmovisible.ts +4 -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/model/Model.ts +6 -0
- package/src/model/__test__/Model.test.ts +9 -0
- 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/scene/root/modelroot/ModelRoot.ts +1 -1
- package/src/scene/root/modelroot/__test__/ModelRoot.test.ts +1 -0
- package/src/toolbox/BaseTool.ts +3 -3
- package/src/toolbox/Toolbox.ts +57 -37
- package/src/toolbox/__test__/BaseTool.test.ts +49 -7
- package/src/toolbox/__test__/Toolbox.test.ts +43 -40
- package/src/toolbox/select/SelectTool.ts +18 -28
- package/src/toolbox/select/__test__/SelectTool.test.ts +27 -8
- package/src/toolbox/transform/TransformTool.ts +16 -1
- package/src/toolbox/transform/__test__/TransformTool.test.ts +34 -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;
|
|
@@ -301,6 +786,10 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
301
786
|
returnValue = this.setGizmoMode(payload);
|
|
302
787
|
break;
|
|
303
788
|
}
|
|
789
|
+
case "SET_GIZMO_VISIBILITY": {
|
|
790
|
+
returnValue = this.setGizmoVisibility(payload);
|
|
791
|
+
break;
|
|
792
|
+
}
|
|
304
793
|
case "MODEL_LOADED": {
|
|
305
794
|
returnValue = this.modelLoaded(payload);
|
|
306
795
|
break;
|
|
@@ -395,8 +884,10 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
395
884
|
const sceneObject = this.scene.GetSceneObject(object);
|
|
396
885
|
if (!sceneObject) return false;
|
|
397
886
|
if (!("isSelectable" in sceneObject)) return false;
|
|
398
|
-
this.toolbox.
|
|
399
|
-
|
|
887
|
+
const activeTool = this.toolbox.GetActiveTool();
|
|
888
|
+
if (activeTool && isSelectTool(activeTool)) {
|
|
889
|
+
activeTool.AttachGizmo(sceneObject);
|
|
890
|
+
}
|
|
400
891
|
Object.assign(payload, object);
|
|
401
892
|
return true;
|
|
402
893
|
}
|
|
@@ -406,8 +897,10 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
406
897
|
const sceneObject = this.scene.GetSceneObject(object);
|
|
407
898
|
if (!sceneObject) return false;
|
|
408
899
|
if (!("isSelectable" in sceneObject)) return false;
|
|
409
|
-
this.toolbox.
|
|
410
|
-
|
|
900
|
+
const activeTool = this.toolbox.GetActiveTool();
|
|
901
|
+
if (activeTool && isSelectTool(activeTool)) {
|
|
902
|
+
activeTool.DetachGizmo();
|
|
903
|
+
}
|
|
411
904
|
Object.assign(payload, object);
|
|
412
905
|
return true;
|
|
413
906
|
}
|
|
@@ -462,6 +955,12 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
462
955
|
this.controller.RevertLast(payload.duration);
|
|
463
956
|
return true;
|
|
464
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
|
+
}
|
|
465
964
|
zoomCamera(payload) {
|
|
466
965
|
if (payload.direction === "IN") this.controller.ZoomIn(payload.by);
|
|
467
966
|
if (payload.direction === "OUT") this.controller.ZoomOut(payload.by);
|
|
@@ -471,6 +970,10 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
471
970
|
this.toolbox.SetGizmoMode(payload.mode);
|
|
472
971
|
return true;
|
|
473
972
|
}
|
|
973
|
+
setGizmoVisibility(payload) {
|
|
974
|
+
this.toolbox.SetGizmoVisibility(payload);
|
|
975
|
+
return payload;
|
|
976
|
+
}
|
|
474
977
|
modelLoaded(payload) {
|
|
475
978
|
this.registered.get(payload.id).loaded = true;
|
|
476
979
|
return true;
|
|
@@ -478,10 +981,12 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
478
981
|
updateScene(payload) {
|
|
479
982
|
if (payload.name !== void 0) this.scene.name = payload.name;
|
|
480
983
|
if (payload.backgroundColor !== void 0) this.scene.SetBackground(payload.backgroundColor);
|
|
984
|
+
if (payload.gridEnabled !== void 0) this.scene.Root.Grid.SetVisibility(payload.gridEnabled);
|
|
481
985
|
if (payload.floorEnabled !== void 0) this.scene.Root.Floor.SetVisibility(payload.floorEnabled);
|
|
482
986
|
if (payload.floorColor !== void 0) this.scene.Root.Floor.SetColor(payload.floorColor);
|
|
483
987
|
payload.name = this.scene.name;
|
|
484
988
|
payload.backgroundColor = "#" + this.scene.background.getHexString();
|
|
989
|
+
payload.gridEnabled = this.scene.Root.Grid.visible;
|
|
485
990
|
payload.floorEnabled = this.scene.Root.Floor.visible;
|
|
486
991
|
payload.floorColor = "#" + this.scene.Root.Floor.material.color.getHexString();
|
|
487
992
|
return true;
|
|
@@ -504,7 +1009,8 @@ _DIVECommunication.__instances = [];
|
|
|
504
1009
|
var DIVECommunication = _DIVECommunication;
|
|
505
1010
|
|
|
506
1011
|
// src/light/PointLight.ts
|
|
507
|
-
|
|
1012
|
+
init_VisibilityLayerMask();
|
|
1013
|
+
var DIVEPointLight = class extends Object3D3 {
|
|
508
1014
|
constructor() {
|
|
509
1015
|
super();
|
|
510
1016
|
this.isMoveable = true;
|
|
@@ -550,8 +1056,9 @@ var DIVEPointLight = class extends Object3D2 {
|
|
|
550
1056
|
};
|
|
551
1057
|
|
|
552
1058
|
// src/light/SceneLight.ts
|
|
553
|
-
|
|
554
|
-
|
|
1059
|
+
init_VisibilityLayerMask();
|
|
1060
|
+
import { DirectionalLight, HemisphereLight, Object3D as Object3D4 } from "three";
|
|
1061
|
+
var DIVESceneLight = class extends Object3D4 {
|
|
555
1062
|
constructor() {
|
|
556
1063
|
super();
|
|
557
1064
|
this.name = "DIVESceneLight";
|
|
@@ -589,7 +1096,7 @@ var DIVESceneLight = class extends Object3D3 {
|
|
|
589
1096
|
};
|
|
590
1097
|
|
|
591
1098
|
// src/scene/root/lightroot/LightRoot.ts
|
|
592
|
-
var DIVELightRoot = class extends
|
|
1099
|
+
var DIVELightRoot = class extends Object3D5 {
|
|
593
1100
|
constructor() {
|
|
594
1101
|
super();
|
|
595
1102
|
this.name = "LightRoot";
|
|
@@ -633,7 +1140,7 @@ var DIVELightRoot = class extends Object3D4 {
|
|
|
633
1140
|
if (light.position !== void 0 && light.position !== null) sceneObject.position.set(light.position.x, light.position.y, light.position.z);
|
|
634
1141
|
if (light.intensity !== void 0 && light.intensity !== null) sceneObject.SetIntensity(light.intensity);
|
|
635
1142
|
if (light.enabled !== void 0 && light.enabled !== null) sceneObject.SetEnabled(light.enabled);
|
|
636
|
-
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));
|
|
637
1144
|
if (light.visible !== void 0 && light.visible !== null) sceneObject.visible = light.visible;
|
|
638
1145
|
}
|
|
639
1146
|
DeleteLight(light) {
|
|
@@ -664,10 +1171,11 @@ var DIVELightRoot = class extends Object3D4 {
|
|
|
664
1171
|
};
|
|
665
1172
|
|
|
666
1173
|
// src/scene/root/modelroot/ModelRoot.ts
|
|
667
|
-
import { Object3D as
|
|
1174
|
+
import { Object3D as Object3D7 } from "three";
|
|
668
1175
|
|
|
669
1176
|
// src/model/Model.ts
|
|
670
|
-
|
|
1177
|
+
init_VisibilityLayerMask();
|
|
1178
|
+
import { Box3, Object3D as Object3D6, Raycaster as Raycaster2, Vector3 as Vector32 } from "three";
|
|
671
1179
|
|
|
672
1180
|
// src/helper/findSceneRecursive/findSceneRecursive.ts
|
|
673
1181
|
var findSceneRecursive = (object) => {
|
|
@@ -678,7 +1186,7 @@ var findSceneRecursive = (object) => {
|
|
|
678
1186
|
};
|
|
679
1187
|
|
|
680
1188
|
// src/model/Model.ts
|
|
681
|
-
var DIVEModel = class extends
|
|
1189
|
+
var DIVEModel = class extends Object3D6 {
|
|
682
1190
|
constructor() {
|
|
683
1191
|
super();
|
|
684
1192
|
this.isSelectable = true;
|
|
@@ -701,11 +1209,16 @@ var DIVEModel = class extends Object3D5 {
|
|
|
701
1209
|
this.position.set(position.x, position.y, position.z);
|
|
702
1210
|
}
|
|
703
1211
|
SetRotation(rotation) {
|
|
704
|
-
this.rotation.setFromVector3(new
|
|
1212
|
+
this.rotation.setFromVector3(new Vector32(rotation.x, rotation.y, rotation.z));
|
|
705
1213
|
}
|
|
706
1214
|
SetScale(scale) {
|
|
707
1215
|
this.scale.set(scale.x, scale.y, scale.z);
|
|
708
1216
|
}
|
|
1217
|
+
SetVisibility(visible) {
|
|
1218
|
+
this.traverse((child) => {
|
|
1219
|
+
child.visible = visible;
|
|
1220
|
+
});
|
|
1221
|
+
}
|
|
709
1222
|
SetToWorldOrigin() {
|
|
710
1223
|
var _a;
|
|
711
1224
|
this.position.set(0, 0, 0);
|
|
@@ -723,9 +1236,9 @@ var DIVEModel = class extends Object3D5 {
|
|
|
723
1236
|
return;
|
|
724
1237
|
}
|
|
725
1238
|
const bottomY = this.boundingBox.min.y * this.scale.y;
|
|
726
|
-
const bbBottomCenter = this.localToWorld(this.boundingBox.getCenter(new
|
|
1239
|
+
const bbBottomCenter = this.localToWorld(this.boundingBox.getCenter(new Vector32()).multiply(this.scale));
|
|
727
1240
|
bbBottomCenter.y = bottomY + this.position.y;
|
|
728
|
-
const raycaster = new
|
|
1241
|
+
const raycaster = new Raycaster2(bbBottomCenter, new Vector32(0, -1, 0));
|
|
729
1242
|
raycaster.layers.mask = PRODUCT_LAYER_MASK;
|
|
730
1243
|
const intersections = raycaster.intersectObjects(findSceneRecursive(this).Root.children, true);
|
|
731
1244
|
if (intersections.length > 0) {
|
|
@@ -734,7 +1247,7 @@ var DIVEModel = class extends Object3D5 {
|
|
|
734
1247
|
const meshBB = mesh.geometry.boundingBox;
|
|
735
1248
|
const worldPos = mesh.localToWorld(meshBB.max.clone());
|
|
736
1249
|
const oldPos = this.position.clone();
|
|
737
|
-
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));
|
|
738
1251
|
this.position.copy(newPos);
|
|
739
1252
|
if (this.position.y === oldPos.y) return;
|
|
740
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 });
|
|
@@ -787,7 +1300,7 @@ var DIVELoadingManager = class {
|
|
|
787
1300
|
};
|
|
788
1301
|
|
|
789
1302
|
// src/scene/root/modelroot/ModelRoot.ts
|
|
790
|
-
var DIVEModelRoot = class extends
|
|
1303
|
+
var DIVEModelRoot = class extends Object3D7 {
|
|
791
1304
|
constructor() {
|
|
792
1305
|
super();
|
|
793
1306
|
this.name = "ModelRoot";
|
|
@@ -820,7 +1333,7 @@ var DIVEModelRoot = class extends Object3D6 {
|
|
|
820
1333
|
if (object.position !== void 0) sceneObject.SetPosition(object.position);
|
|
821
1334
|
if (object.rotation !== void 0) sceneObject.SetRotation(object.rotation);
|
|
822
1335
|
if (object.scale !== void 0) sceneObject.SetScale(object.scale);
|
|
823
|
-
if (object.visible !== void 0) sceneObject.
|
|
1336
|
+
if (object.visible !== void 0) sceneObject.SetVisibility(object.visible);
|
|
824
1337
|
}
|
|
825
1338
|
DeleteModel(object) {
|
|
826
1339
|
if (object.id === void 0) {
|
|
@@ -856,10 +1369,11 @@ var DIVEModelRoot = class extends Object3D6 {
|
|
|
856
1369
|
};
|
|
857
1370
|
|
|
858
1371
|
// src/primitive/floor/Floor.ts
|
|
859
|
-
|
|
1372
|
+
init_VisibilityLayerMask();
|
|
1373
|
+
import { Color as Color5, Mesh as Mesh2, MeshStandardMaterial, PlaneGeometry } from "three";
|
|
860
1374
|
var DIVEFloor = class extends Mesh2 {
|
|
861
1375
|
constructor() {
|
|
862
|
-
super(new PlaneGeometry(1e4, 1e4), new
|
|
1376
|
+
super(new PlaneGeometry(1e4, 1e4), new MeshStandardMaterial({ color: new Color5(150 / 255, 150 / 255, 150 / 255) }));
|
|
863
1377
|
this.isFloor = true;
|
|
864
1378
|
this.name = "Floor";
|
|
865
1379
|
this.layers.mask = PRODUCT_LAYER_MASK;
|
|
@@ -870,7 +1384,7 @@ var DIVEFloor = class extends Mesh2 {
|
|
|
870
1384
|
this.visible = visible;
|
|
871
1385
|
}
|
|
872
1386
|
SetColor(color) {
|
|
873
|
-
this.material.color = new
|
|
1387
|
+
this.material.color = new Color5(color);
|
|
874
1388
|
}
|
|
875
1389
|
};
|
|
876
1390
|
|
|
@@ -879,8 +1393,9 @@ var GRID_CENTER_LINE_COLOR = "#888888";
|
|
|
879
1393
|
var GRID_SIDE_LINE_COLOR = "#dddddd";
|
|
880
1394
|
|
|
881
1395
|
// src/grid/Grid.ts
|
|
882
|
-
|
|
883
|
-
|
|
1396
|
+
init_VisibilityLayerMask();
|
|
1397
|
+
import { GridHelper, Object3D as Object3D8 } from "three";
|
|
1398
|
+
var DIVEGrid = class extends Object3D8 {
|
|
884
1399
|
constructor() {
|
|
885
1400
|
super();
|
|
886
1401
|
this.name = "Grid";
|
|
@@ -889,10 +1404,13 @@ var DIVEGrid = class extends Object3D7 {
|
|
|
889
1404
|
grid.layers.mask = HELPER_LAYER_MASK;
|
|
890
1405
|
this.add(grid);
|
|
891
1406
|
}
|
|
1407
|
+
SetVisibility(visible) {
|
|
1408
|
+
this.visible = visible;
|
|
1409
|
+
}
|
|
892
1410
|
};
|
|
893
1411
|
|
|
894
1412
|
// src/scene/root/Root.ts
|
|
895
|
-
var DIVERoot = class extends
|
|
1413
|
+
var DIVERoot = class extends Object3D9 {
|
|
896
1414
|
get Floor() {
|
|
897
1415
|
return this.floor;
|
|
898
1416
|
}
|
|
@@ -911,6 +1429,15 @@ var DIVERoot = class extends Object3D8 {
|
|
|
911
1429
|
this.grid = new DIVEGrid();
|
|
912
1430
|
this.add(this.grid);
|
|
913
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
|
+
}
|
|
914
1441
|
GetSceneObject(object) {
|
|
915
1442
|
switch (object.entityType) {
|
|
916
1443
|
case "pov": {
|
|
@@ -981,11 +1508,15 @@ var DIVEScene = class extends Scene2 {
|
|
|
981
1508
|
}
|
|
982
1509
|
constructor() {
|
|
983
1510
|
super();
|
|
1511
|
+
this.background = new Color6(16777215);
|
|
984
1512
|
this.root = new DIVERoot();
|
|
985
1513
|
this.add(this.root);
|
|
986
1514
|
}
|
|
987
1515
|
SetBackground(color) {
|
|
988
|
-
this.background = new
|
|
1516
|
+
this.background = new Color6(color);
|
|
1517
|
+
}
|
|
1518
|
+
ComputeSceneBB() {
|
|
1519
|
+
return this.Root.ComputeSceneBB();
|
|
989
1520
|
}
|
|
990
1521
|
GetSceneObject(object) {
|
|
991
1522
|
return this.Root.GetSceneObject(object);
|
|
@@ -1004,36 +1535,12 @@ var DIVEScene = class extends Scene2 {
|
|
|
1004
1535
|
}
|
|
1005
1536
|
};
|
|
1006
1537
|
|
|
1007
|
-
// src/
|
|
1008
|
-
|
|
1009
|
-
var DIVEPerspectiveCameraDefaultSettings = {
|
|
1010
|
-
fov: 80,
|
|
1011
|
-
near: 0.1,
|
|
1012
|
-
far: 1e3
|
|
1013
|
-
};
|
|
1014
|
-
var _DIVEPerspectiveCamera = class _DIVEPerspectiveCamera extends PerspectiveCamera {
|
|
1015
|
-
constructor(settings = DIVEPerspectiveCameraDefaultSettings) {
|
|
1016
|
-
super(settings.fov, 1, settings.near, settings.far);
|
|
1017
|
-
this.onSetCameraLayer = () => {
|
|
1018
|
-
};
|
|
1019
|
-
this.layers.mask = _DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
1020
|
-
}
|
|
1021
|
-
OnResize(width, height) {
|
|
1022
|
-
this.aspect = width / height;
|
|
1023
|
-
this.updateProjectionMatrix();
|
|
1024
|
-
}
|
|
1025
|
-
SetCameraLayer(layer) {
|
|
1026
|
-
this.layers.mask = layer === "LIVE" ? _DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK : _DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
1027
|
-
this.onSetCameraLayer(this.layers.mask);
|
|
1028
|
-
}
|
|
1029
|
-
};
|
|
1030
|
-
_DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK = DEFAULT_LAYER_MASK | UI_LAYER_MASK | HELPER_LAYER_MASK | PRODUCT_LAYER_MASK;
|
|
1031
|
-
_DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK = PRODUCT_LAYER_MASK;
|
|
1032
|
-
var DIVEPerspectiveCamera = _DIVEPerspectiveCamera;
|
|
1538
|
+
// src/dive.ts
|
|
1539
|
+
init_PerspectiveCamera();
|
|
1033
1540
|
|
|
1034
1541
|
// src/controls/OrbitControls.ts
|
|
1035
1542
|
import { OrbitControls } from "three/examples/jsm/Addons.js";
|
|
1036
|
-
import { MathUtils as
|
|
1543
|
+
import { MathUtils as MathUtils2, Vector3 as Vector33 } from "three";
|
|
1037
1544
|
import { Easing, Tween } from "@tweenjs/tween.js";
|
|
1038
1545
|
var DIVEOrbitControlsDefaultSettings = {
|
|
1039
1546
|
enableDamping: true,
|
|
@@ -1061,10 +1568,20 @@ var _DIVEOrbitControls = class _DIVEOrbitControls extends OrbitControls {
|
|
|
1061
1568
|
this.enableDamping = settings.enableDamping;
|
|
1062
1569
|
this.dampingFactor = settings.dampingFactor;
|
|
1063
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
|
+
}
|
|
1064
1581
|
ZoomIn(by) {
|
|
1065
1582
|
const zoomBy = by || _DIVEOrbitControls.DEFAULT_ZOOM_FACTOR;
|
|
1066
1583
|
const { minDistance, maxDistance } = this;
|
|
1067
|
-
this.minDistance = this.maxDistance =
|
|
1584
|
+
this.minDistance = this.maxDistance = MathUtils2.clamp(this.getDistance() - zoomBy, minDistance + zoomBy, maxDistance - zoomBy);
|
|
1068
1585
|
this.update();
|
|
1069
1586
|
this.minDistance = minDistance;
|
|
1070
1587
|
this.maxDistance = maxDistance;
|
|
@@ -1072,7 +1589,7 @@ var _DIVEOrbitControls = class _DIVEOrbitControls extends OrbitControls {
|
|
|
1072
1589
|
ZoomOut(by) {
|
|
1073
1590
|
const zoomBy = by || _DIVEOrbitControls.DEFAULT_ZOOM_FACTOR;
|
|
1074
1591
|
const { minDistance, maxDistance } = this;
|
|
1075
|
-
this.minDistance = this.maxDistance =
|
|
1592
|
+
this.minDistance = this.maxDistance = MathUtils2.clamp(this.getDistance() + zoomBy, minDistance + zoomBy, maxDistance - zoomBy);
|
|
1076
1593
|
this.update();
|
|
1077
1594
|
this.minDistance = minDistance;
|
|
1078
1595
|
this.maxDistance = maxDistance;
|
|
@@ -1121,385 +1638,40 @@ var _DIVEOrbitControls = class _DIVEOrbitControls extends OrbitControls {
|
|
|
1121
1638
|
_DIVEOrbitControls.DEFAULT_ZOOM_FACTOR = 1;
|
|
1122
1639
|
var DIVEOrbitControls = _DIVEOrbitControls;
|
|
1123
1640
|
|
|
1124
|
-
// src/
|
|
1125
|
-
var
|
|
1126
|
-
|
|
1127
|
-
this.
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
}
|
|
1131
|
-
GenerateMedia(position, target, width, height) {
|
|
1132
|
-
const resetPosition = this.controller.object.position.clone();
|
|
1133
|
-
const resetRotation = this.controller.object.quaternion.clone();
|
|
1134
|
-
this.renderer.OnResize(width, height);
|
|
1135
|
-
this.controller.object.OnResize(width, height);
|
|
1136
|
-
this.controller.object.position.copy(position);
|
|
1137
|
-
this.controller.target.copy(target);
|
|
1138
|
-
this.controller.update();
|
|
1139
|
-
const dataUri = this.DrawCanvas().toDataURL();
|
|
1140
|
-
this.controller.object.position.copy(resetPosition);
|
|
1141
|
-
this.controller.object.quaternion.copy(resetRotation);
|
|
1142
|
-
return dataUri;
|
|
1143
|
-
}
|
|
1144
|
-
DrawCanvas(canvasElement) {
|
|
1145
|
-
const restore = this.renderer.domElement;
|
|
1146
|
-
if (canvasElement) {
|
|
1147
|
-
this.renderer.domElement = canvasElement;
|
|
1148
|
-
}
|
|
1149
|
-
this.controller.object.layers.mask = DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK;
|
|
1150
|
-
this.renderer.render(this.scene, this.controller.object);
|
|
1151
|
-
this.controller.object.layers.mask = DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
1152
|
-
const returnCanvas = this.renderer.domElement;
|
|
1153
|
-
if (canvasElement) {
|
|
1154
|
-
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);
|
|
1155
1647
|
}
|
|
1156
|
-
return
|
|
1157
|
-
}
|
|
1158
|
-
};
|
|
1159
|
-
|
|
1160
|
-
// src/interface/Selectable.ts
|
|
1161
|
-
function isSelectable(object) {
|
|
1162
|
-
return "isSelectable" in object;
|
|
1163
|
-
}
|
|
1164
|
-
|
|
1165
|
-
// src/toolbox/BaseTool.ts
|
|
1166
|
-
import { Raycaster as Raycaster2, Vector2, Vector3 as Vector32 } from "three";
|
|
1167
|
-
|
|
1168
|
-
// src/interface/Draggable.ts
|
|
1169
|
-
var isDraggable = (object) => {
|
|
1170
|
-
return "isDraggable" in object;
|
|
1171
|
-
};
|
|
1172
|
-
var findDraggableInterface = (child) => {
|
|
1173
|
-
if (child === void 0) return void 0;
|
|
1174
|
-
if (child.parent === null) {
|
|
1175
|
-
return void 0;
|
|
1176
|
-
}
|
|
1177
|
-
if (isDraggable(child)) {
|
|
1178
|
-
return child;
|
|
1179
|
-
}
|
|
1180
|
-
return findDraggableInterface(child.parent);
|
|
1181
|
-
};
|
|
1182
|
-
|
|
1183
|
-
// src/interface/Hoverable.ts
|
|
1184
|
-
var isHoverable = (object) => {
|
|
1185
|
-
return "isHoverable" in object;
|
|
1186
|
-
};
|
|
1187
|
-
var findHoverableInterface = (child) => {
|
|
1188
|
-
if (child === void 0) return void 0;
|
|
1189
|
-
if (child.parent === null) {
|
|
1190
|
-
return void 0;
|
|
1191
|
-
}
|
|
1192
|
-
if (isHoverable(child)) {
|
|
1193
|
-
return child;
|
|
1648
|
+
return this._selectTool;
|
|
1194
1649
|
}
|
|
1195
|
-
return findHoverableInterface(child.parent);
|
|
1196
|
-
};
|
|
1197
|
-
|
|
1198
|
-
// src/toolbox/BaseTool.ts
|
|
1199
|
-
var DIVEBaseTool = class {
|
|
1200
1650
|
constructor(scene, controller) {
|
|
1201
|
-
this.POINTER_DRAG_THRESHOLD = 1e-3;
|
|
1202
|
-
this.name = "BaseTool";
|
|
1203
|
-
this._canvas = controller.domElement;
|
|
1204
1651
|
this._scene = scene;
|
|
1205
1652
|
this._controller = controller;
|
|
1206
|
-
this.
|
|
1207
|
-
this.
|
|
1208
|
-
this._pointerMiddleDown = false;
|
|
1209
|
-
this._pointerSecondaryDown = false;
|
|
1210
|
-
this._lastPointerDown = new Vector2();
|
|
1211
|
-
this._lastPointerUp = new Vector2();
|
|
1212
|
-
this._raycaster = new Raycaster2();
|
|
1213
|
-
this._raycaster.layers.mask = PRODUCT_LAYER_MASK | UI_LAYER_MASK;
|
|
1214
|
-
this._intersects = [];
|
|
1215
|
-
this._hovered = null;
|
|
1216
|
-
this._dragging = false;
|
|
1217
|
-
this._dragStart = new Vector32();
|
|
1218
|
-
this._dragCurrent = new Vector32();
|
|
1219
|
-
this._dragEnd = new Vector32();
|
|
1220
|
-
this._dragDelta = new Vector32();
|
|
1221
|
-
this._draggable = null;
|
|
1222
|
-
this._dragRaycastOnObjects = null;
|
|
1223
|
-
}
|
|
1224
|
-
get _pointerAnyDown() {
|
|
1225
|
-
return this._pointerPrimaryDown || this._pointerMiddleDown || this._pointerSecondaryDown;
|
|
1226
|
-
}
|
|
1227
|
-
Activate() {
|
|
1228
|
-
}
|
|
1229
|
-
Deactivate() {
|
|
1653
|
+
this._selectTool = null;
|
|
1654
|
+
this._activeTool = null;
|
|
1230
1655
|
}
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
switch (e.button) {
|
|
1234
|
-
case 0:
|
|
1235
|
-
this._pointerPrimaryDown = true;
|
|
1236
|
-
break;
|
|
1237
|
-
case 1:
|
|
1238
|
-
this._pointerMiddleDown = true;
|
|
1239
|
-
break;
|
|
1240
|
-
case 2:
|
|
1241
|
-
this._pointerSecondaryDown = true;
|
|
1242
|
-
break;
|
|
1243
|
-
}
|
|
1244
|
-
this._lastPointerDown.copy(this._pointer);
|
|
1245
|
-
this._draggable = findDraggableInterface((_a = this._intersects[0]) == null ? void 0 : _a.object) || null;
|
|
1246
|
-
}
|
|
1247
|
-
onDragStart(e) {
|
|
1248
|
-
if (!this._draggable) return;
|
|
1249
|
-
if (this._dragRaycastOnObjects !== null) {
|
|
1250
|
-
this._intersects = this._raycaster.intersectObjects(this._dragRaycastOnObjects, true);
|
|
1251
|
-
}
|
|
1252
|
-
if (this._intersects.length === 0) return;
|
|
1253
|
-
this._dragStart.copy(this._intersects[0].point.clone());
|
|
1254
|
-
this._dragCurrent.copy(this._intersects[0].point.clone());
|
|
1255
|
-
this._dragEnd.copy(this._dragStart.clone());
|
|
1256
|
-
this._dragDelta.set(0, 0, 0);
|
|
1257
|
-
if (this._draggable && this._draggable.onDragStart) {
|
|
1258
|
-
this._draggable.onDragStart({
|
|
1259
|
-
dragStart: this._dragStart,
|
|
1260
|
-
dragCurrent: this._dragCurrent,
|
|
1261
|
-
dragEnd: this._dragEnd,
|
|
1262
|
-
dragDelta: this._dragDelta
|
|
1263
|
-
});
|
|
1264
|
-
this._dragging = true;
|
|
1265
|
-
this._controller.enabled = false;
|
|
1266
|
-
}
|
|
1267
|
-
}
|
|
1268
|
-
onPointerMove(e) {
|
|
1269
|
-
var _a;
|
|
1270
|
-
this._pointer.x = e.offsetX / this._canvas.clientWidth * 2 - 1;
|
|
1271
|
-
this._pointer.y = -(e.offsetY / this._canvas.clientHeight) * 2 + 1;
|
|
1272
|
-
this._raycaster.setFromCamera(this._pointer, this._controller.object);
|
|
1273
|
-
this._intersects = this.raycast(this._scene.children);
|
|
1274
|
-
const hoverable = findHoverableInterface((_a = this._intersects[0]) == null ? void 0 : _a.object);
|
|
1275
|
-
if (this._intersects[0] && hoverable) {
|
|
1276
|
-
if (!this._hovered) {
|
|
1277
|
-
if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
|
|
1278
|
-
this._hovered = hoverable;
|
|
1279
|
-
return;
|
|
1280
|
-
}
|
|
1281
|
-
if (this._hovered.uuid !== hoverable.uuid) {
|
|
1282
|
-
if (this._hovered.onPointerLeave) this._hovered.onPointerLeave();
|
|
1283
|
-
if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
|
|
1284
|
-
this._hovered = hoverable;
|
|
1285
|
-
return;
|
|
1286
|
-
}
|
|
1287
|
-
if (hoverable.onPointerOver) hoverable.onPointerOver(this._intersects[0]);
|
|
1288
|
-
this._hovered = hoverable;
|
|
1289
|
-
} else {
|
|
1290
|
-
if (this._hovered) {
|
|
1291
|
-
if (this._hovered.onPointerLeave) this._hovered.onPointerLeave();
|
|
1292
|
-
}
|
|
1293
|
-
this._hovered = null;
|
|
1294
|
-
}
|
|
1295
|
-
if (this._pointerAnyDown) {
|
|
1296
|
-
if (!this._dragging) {
|
|
1297
|
-
this.onDragStart(e);
|
|
1298
|
-
}
|
|
1299
|
-
this.onDrag(e);
|
|
1300
|
-
}
|
|
1301
|
-
}
|
|
1302
|
-
onDrag(e) {
|
|
1303
|
-
if (this._dragRaycastOnObjects !== null) {
|
|
1304
|
-
this._intersects = this._raycaster.intersectObjects(this._dragRaycastOnObjects, true);
|
|
1305
|
-
}
|
|
1306
|
-
const intersect = this._intersects[0];
|
|
1307
|
-
if (!intersect) return;
|
|
1308
|
-
this._dragCurrent.copy(intersect.point.clone());
|
|
1309
|
-
this._dragEnd.copy(intersect.point.clone());
|
|
1310
|
-
this._dragDelta.subVectors(this._dragCurrent.clone(), this._dragStart.clone());
|
|
1311
|
-
if (this._draggable && this._draggable.onDrag) {
|
|
1312
|
-
this._draggable.onDrag({
|
|
1313
|
-
dragStart: this._dragStart,
|
|
1314
|
-
dragCurrent: this._dragCurrent,
|
|
1315
|
-
dragEnd: this._dragEnd,
|
|
1316
|
-
dragDelta: this._dragDelta
|
|
1317
|
-
});
|
|
1318
|
-
}
|
|
1319
|
-
}
|
|
1320
|
-
onPointerUp(e) {
|
|
1321
|
-
if (this.pointerWasDragged() || this._dragging) {
|
|
1322
|
-
if (this._draggable) {
|
|
1323
|
-
this.onDragEnd(e);
|
|
1324
|
-
}
|
|
1325
|
-
} else {
|
|
1326
|
-
this.onClick(e);
|
|
1327
|
-
}
|
|
1328
|
-
switch (e.button) {
|
|
1329
|
-
case 0:
|
|
1330
|
-
this._pointerPrimaryDown = false;
|
|
1331
|
-
break;
|
|
1332
|
-
case 1:
|
|
1333
|
-
this._pointerMiddleDown = false;
|
|
1334
|
-
break;
|
|
1335
|
-
case 2:
|
|
1336
|
-
this._pointerSecondaryDown = false;
|
|
1337
|
-
break;
|
|
1338
|
-
}
|
|
1339
|
-
this._lastPointerUp.copy(this._pointer);
|
|
1340
|
-
}
|
|
1341
|
-
onClick(e) {
|
|
1342
|
-
}
|
|
1343
|
-
onDragEnd(e) {
|
|
1344
|
-
const intersect = this._intersects[0];
|
|
1345
|
-
if (intersect) {
|
|
1346
|
-
this._dragEnd.copy(intersect.point.clone());
|
|
1347
|
-
this._dragCurrent.copy(intersect.point.clone());
|
|
1348
|
-
this._dragDelta.subVectors(this._dragCurrent.clone(), this._dragStart.clone());
|
|
1349
|
-
}
|
|
1350
|
-
if (this._draggable && this._draggable.onDragEnd) {
|
|
1351
|
-
this._draggable.onDragEnd({
|
|
1352
|
-
dragStart: this._dragStart,
|
|
1353
|
-
dragCurrent: this._dragCurrent,
|
|
1354
|
-
dragEnd: this._dragEnd,
|
|
1355
|
-
dragDelta: this._dragDelta
|
|
1356
|
-
});
|
|
1357
|
-
}
|
|
1358
|
-
this._draggable = null;
|
|
1359
|
-
this._dragging = false;
|
|
1360
|
-
this._dragStart.set(0, 0, 0);
|
|
1361
|
-
this._dragCurrent.set(0, 0, 0);
|
|
1362
|
-
this._dragEnd.set(0, 0, 0);
|
|
1363
|
-
this._dragDelta.set(0, 0, 0);
|
|
1364
|
-
this._controller.enabled = true;
|
|
1365
|
-
}
|
|
1366
|
-
onWheel(e) {
|
|
1367
|
-
}
|
|
1368
|
-
raycast(objects) {
|
|
1369
|
-
if (objects !== void 0) return this._raycaster.intersectObjects(objects, true);
|
|
1370
|
-
return this._raycaster.intersectObjects(this._scene.children, true);
|
|
1371
|
-
}
|
|
1372
|
-
pointerWasDragged() {
|
|
1373
|
-
return this._lastPointerDown.distanceTo(this._pointer) > this.POINTER_DRAG_THRESHOLD;
|
|
1374
|
-
}
|
|
1375
|
-
};
|
|
1376
|
-
|
|
1377
|
-
// src/toolbox/transform/TransformTool.ts
|
|
1378
|
-
import { TransformControls } from "three/examples/jsm/Addons";
|
|
1379
|
-
var DIVETransformTool = class extends DIVEBaseTool {
|
|
1380
|
-
constructor(scene, controller) {
|
|
1381
|
-
super(scene, controller);
|
|
1382
|
-
this.name = "DIVETransformTool";
|
|
1383
|
-
this._gizmo = new TransformControls(this._controller.object, this._controller.domElement);
|
|
1384
|
-
this._gizmo.mode = "translate";
|
|
1385
|
-
this._gizmo.addEventListener("mouseDown", () => {
|
|
1386
|
-
controller.enabled = false;
|
|
1387
|
-
});
|
|
1388
|
-
this._gizmo.addEventListener("mouseUp", () => {
|
|
1389
|
-
controller.enabled = true;
|
|
1390
|
-
});
|
|
1391
|
-
this._gizmo.addEventListener("objectChange", () => {
|
|
1392
|
-
if (!this._gizmo.object) return;
|
|
1393
|
-
if (!("isMoveable" in this._gizmo.object)) return;
|
|
1394
|
-
if (!("onMove" in this._gizmo.object)) return;
|
|
1395
|
-
this._gizmo.object.onMove();
|
|
1396
|
-
});
|
|
1397
|
-
scene.add(this._gizmo);
|
|
1398
|
-
}
|
|
1399
|
-
Activate() {
|
|
1400
|
-
}
|
|
1401
|
-
SetGizmoMode(mode) {
|
|
1402
|
-
this._gizmo.mode = mode;
|
|
1403
|
-
}
|
|
1404
|
-
// public onPointerDown(e: PointerEvent): void {
|
|
1405
|
-
// super.onPointerDown(e);
|
|
1406
|
-
// // if (this._hovered) {
|
|
1407
|
-
// // this._dragRaycastOnObjects = this._gizmo.gizmoPlane.children;
|
|
1408
|
-
// // }
|
|
1409
|
-
// }
|
|
1410
|
-
// protected raycast(): Intersection[] {
|
|
1411
|
-
// return super.raycast(this._gizmo.gizmoNode.children);
|
|
1412
|
-
// }
|
|
1413
|
-
};
|
|
1414
|
-
|
|
1415
|
-
// src/toolbox/select/SelectTool.ts
|
|
1416
|
-
var DIVESelectTool = class extends DIVETransformTool {
|
|
1417
|
-
constructor(scene, controller) {
|
|
1418
|
-
super(scene, controller);
|
|
1419
|
-
this.name = "SelectTool";
|
|
1420
|
-
}
|
|
1421
|
-
Activate() {
|
|
1422
|
-
}
|
|
1423
|
-
Select(selectable) {
|
|
1424
|
-
if (selectable.onSelect) selectable.onSelect();
|
|
1425
|
-
this.AttachGizmo(selectable);
|
|
1426
|
-
}
|
|
1427
|
-
Deselect(selectable) {
|
|
1428
|
-
if (selectable.onDeselect) selectable.onDeselect();
|
|
1429
|
-
this.DetachGizmo();
|
|
1430
|
-
}
|
|
1431
|
-
DetachGizmo() {
|
|
1432
|
-
this._gizmo.detach();
|
|
1433
|
-
}
|
|
1434
|
-
AttachGizmo(selectable) {
|
|
1435
|
-
if ("isMoveable" in selectable) {
|
|
1436
|
-
const movable = selectable;
|
|
1437
|
-
this._gizmo.attach(movable);
|
|
1438
|
-
}
|
|
1439
|
-
}
|
|
1440
|
-
onClick(e) {
|
|
1441
|
-
super.onClick(e);
|
|
1442
|
-
const first = this._raycaster.intersectObjects(this._scene.Root.children, true)[0];
|
|
1443
|
-
const selectable = this.findSelectableInterface(first == null ? void 0 : first.object);
|
|
1444
|
-
if (!first || !selectable) {
|
|
1445
|
-
if (this._gizmo.object) {
|
|
1446
|
-
this.Deselect(this._gizmo.object);
|
|
1447
|
-
}
|
|
1448
|
-
return;
|
|
1449
|
-
}
|
|
1450
|
-
if (this._gizmo.object) {
|
|
1451
|
-
if (this._gizmo.object.uuid === selectable.uuid) return;
|
|
1452
|
-
this.Deselect(this._gizmo.object);
|
|
1453
|
-
}
|
|
1454
|
-
this.Select(selectable);
|
|
1455
|
-
}
|
|
1456
|
-
findSelectableInterface(child) {
|
|
1457
|
-
if (child === void 0) return void 0;
|
|
1458
|
-
if (child.parent === null) {
|
|
1459
|
-
return void 0;
|
|
1460
|
-
}
|
|
1461
|
-
if (isSelectable(child)) {
|
|
1462
|
-
return child;
|
|
1463
|
-
}
|
|
1464
|
-
return this.findSelectableInterface(child.parent);
|
|
1465
|
-
}
|
|
1466
|
-
};
|
|
1467
|
-
|
|
1468
|
-
// src/toolbox/Toolbox.ts
|
|
1469
|
-
var DIVEToolbox = class {
|
|
1470
|
-
constructor(scene, controller) {
|
|
1471
|
-
this.removeListenersCallback = () => {
|
|
1472
|
-
};
|
|
1473
|
-
this.selectTool = new DIVESelectTool(scene, controller);
|
|
1474
|
-
const pointerMove = this.onPointerMove.bind(this);
|
|
1475
|
-
const pointerDown = this.onPointerDown.bind(this);
|
|
1476
|
-
const pointerUp = this.onPointerUp.bind(this);
|
|
1477
|
-
const wheel = this.onWheel.bind(this);
|
|
1478
|
-
controller.domElement.addEventListener("pointermove", pointerMove);
|
|
1479
|
-
controller.domElement.addEventListener("pointerdown", pointerDown);
|
|
1480
|
-
controller.domElement.addEventListener("pointerup", pointerUp);
|
|
1481
|
-
controller.domElement.addEventListener("wheel", wheel);
|
|
1482
|
-
this.removeListenersCallback = () => {
|
|
1483
|
-
controller.domElement.removeEventListener("pointermove", pointerMove);
|
|
1484
|
-
controller.domElement.removeEventListener("pointerdown", pointerDown);
|
|
1485
|
-
controller.domElement.removeEventListener("pointerup", pointerUp);
|
|
1486
|
-
controller.domElement.removeEventListener("wheel", wheel);
|
|
1487
|
-
};
|
|
1488
|
-
this.activeTool = this.selectTool;
|
|
1489
|
-
this.activeTool.Activate();
|
|
1490
|
-
}
|
|
1491
|
-
dispose() {
|
|
1492
|
-
this.removeListenersCallback();
|
|
1656
|
+
Dispose() {
|
|
1657
|
+
this.removeEventListeners();
|
|
1493
1658
|
}
|
|
1494
1659
|
GetActiveTool() {
|
|
1495
|
-
return this.
|
|
1660
|
+
return this._activeTool;
|
|
1496
1661
|
}
|
|
1497
1662
|
UseTool(tool) {
|
|
1498
|
-
|
|
1663
|
+
var _a;
|
|
1664
|
+
(_a = this._activeTool) == null ? void 0 : _a.Deactivate();
|
|
1499
1665
|
switch (tool) {
|
|
1500
1666
|
case "select": {
|
|
1667
|
+
this.addEventListeners();
|
|
1501
1668
|
this.selectTool.Activate();
|
|
1502
|
-
this.
|
|
1669
|
+
this._activeTool = this.selectTool;
|
|
1670
|
+
break;
|
|
1671
|
+
}
|
|
1672
|
+
case "none": {
|
|
1673
|
+
this.removeEventListeners();
|
|
1674
|
+
this._activeTool = null;
|
|
1503
1675
|
break;
|
|
1504
1676
|
}
|
|
1505
1677
|
default: {
|
|
@@ -1510,31 +1682,43 @@ var DIVEToolbox = class {
|
|
|
1510
1682
|
SetGizmoMode(mode) {
|
|
1511
1683
|
this.selectTool.SetGizmoMode(mode);
|
|
1512
1684
|
}
|
|
1685
|
+
SetGizmoVisibility(active) {
|
|
1686
|
+
this.selectTool.SetGizmoVisibility(active);
|
|
1687
|
+
}
|
|
1513
1688
|
onPointerMove(e) {
|
|
1514
|
-
|
|
1689
|
+
var _a;
|
|
1690
|
+
(_a = this._activeTool) == null ? void 0 : _a.onPointerMove(e);
|
|
1515
1691
|
}
|
|
1516
1692
|
onPointerDown(e) {
|
|
1517
|
-
|
|
1693
|
+
var _a;
|
|
1694
|
+
(_a = this._activeTool) == null ? void 0 : _a.onPointerDown(e);
|
|
1518
1695
|
}
|
|
1519
1696
|
onPointerUp(e) {
|
|
1520
|
-
|
|
1697
|
+
var _a;
|
|
1698
|
+
(_a = this._activeTool) == null ? void 0 : _a.onPointerUp(e);
|
|
1521
1699
|
}
|
|
1522
1700
|
onWheel(e) {
|
|
1523
|
-
|
|
1701
|
+
var _a;
|
|
1702
|
+
(_a = this._activeTool) == null ? void 0 : _a.onWheel(e);
|
|
1524
1703
|
}
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
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));
|
|
1533
1715
|
}
|
|
1534
1716
|
};
|
|
1717
|
+
DIVEToolbox.DefaultTool = "select";
|
|
1535
1718
|
|
|
1536
1719
|
// src/axiscamera/AxisCamera.ts
|
|
1537
|
-
|
|
1720
|
+
init_VisibilityLayerMask();
|
|
1721
|
+
import { AxesHelper, Color as Color7, Matrix4, OrthographicCamera, Vector4 } from "three";
|
|
1538
1722
|
import SpriteText from "three-spritetext";
|
|
1539
1723
|
|
|
1540
1724
|
// src/constant/AxisHelperColors.ts
|
|
@@ -1547,7 +1731,7 @@ var AxesColorBlue = AxesColorBlueLetter;
|
|
|
1547
1731
|
|
|
1548
1732
|
// src/axiscamera/AxisCamera.ts
|
|
1549
1733
|
var DIVEAxisCamera = class extends OrthographicCamera {
|
|
1550
|
-
constructor() {
|
|
1734
|
+
constructor(renderer, scene, controls) {
|
|
1551
1735
|
super(-1, 1, 1, -1, 0.1, 100);
|
|
1552
1736
|
this.layers.mask = COORDINATE_LAYER_MASK;
|
|
1553
1737
|
this.axesHelper = new AxesHelper(0.5);
|
|
@@ -1555,9 +1739,9 @@ var DIVEAxisCamera = class extends OrthographicCamera {
|
|
|
1555
1739
|
this.axesHelper.material.depthTest = false;
|
|
1556
1740
|
this.axesHelper.position.set(0, 0, -1);
|
|
1557
1741
|
this.axesHelper.setColors(
|
|
1558
|
-
new
|
|
1559
|
-
new
|
|
1560
|
-
new
|
|
1742
|
+
new Color7(AxesColorRed),
|
|
1743
|
+
new Color7(AxesColorGreen),
|
|
1744
|
+
new Color7(AxesColorBlue)
|
|
1561
1745
|
);
|
|
1562
1746
|
const x = new SpriteText("X", 0.2, AxesColorRedLetter);
|
|
1563
1747
|
const y = new SpriteText("Y", 0.2, AxesColorGreenLetter);
|
|
@@ -1572,6 +1756,26 @@ var DIVEAxisCamera = class extends OrthographicCamera {
|
|
|
1572
1756
|
this.axesHelper.add(y);
|
|
1573
1757
|
this.axesHelper.add(z);
|
|
1574
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);
|
|
1575
1779
|
}
|
|
1576
1780
|
SetFromCameraMatrix(matrix) {
|
|
1577
1781
|
this.axesHelper.rotation.setFromRotationMatrix(new Matrix4().extractRotation(matrix).invert());
|
|
@@ -1691,13 +1895,63 @@ var DIVEMath = {
|
|
|
1691
1895
|
};
|
|
1692
1896
|
|
|
1693
1897
|
// src/dive.ts
|
|
1898
|
+
import { generateUUID as generateUUID2 } from "three/src/math/MathUtils";
|
|
1694
1899
|
var DIVEDefaultSettings = {
|
|
1695
1900
|
autoResize: true,
|
|
1901
|
+
displayAxes: false,
|
|
1696
1902
|
renderer: DIVERendererDefaultSettings,
|
|
1697
1903
|
perspectiveCamera: DIVEPerspectiveCameraDefaultSettings,
|
|
1698
1904
|
orbitControls: DIVEOrbitControlsDefaultSettings
|
|
1699
1905
|
};
|
|
1700
|
-
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
|
+
}
|
|
1701
1955
|
// getters
|
|
1702
1956
|
get Communication() {
|
|
1703
1957
|
return this.communication;
|
|
@@ -1707,6 +1961,7 @@ var DIVE = class {
|
|
|
1707
1961
|
}
|
|
1708
1962
|
// setters
|
|
1709
1963
|
set Settings(settings) {
|
|
1964
|
+
var _a;
|
|
1710
1965
|
const settingsDelta = getObjectDelta(this._settings, settings);
|
|
1711
1966
|
if (settingsDelta.renderer) this.renderer = new DIVERenderer(this._settings.renderer);
|
|
1712
1967
|
if (settingsDelta.perspectiveCamera) {
|
|
@@ -1726,6 +1981,12 @@ var DIVE = class {
|
|
|
1726
1981
|
this.removeResizeObserver();
|
|
1727
1982
|
}
|
|
1728
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
|
+
}
|
|
1729
1990
|
Object.assign(this._settings, settings);
|
|
1730
1991
|
}
|
|
1731
1992
|
constructor(settings) {
|
|
@@ -1737,28 +1998,14 @@ var DIVE = class {
|
|
|
1737
1998
|
this.scene = new DIVEScene();
|
|
1738
1999
|
this.perspectiveCamera = new DIVEPerspectiveCamera(this._settings.perspectiveCamera);
|
|
1739
2000
|
this.orbitControls = new DIVEOrbitControls(this.perspectiveCamera, this.renderer, this._settings.orbitControls);
|
|
1740
|
-
this.mediaCreator = new DIVEMediaCreator(this.renderer, this.scene, this.orbitControls);
|
|
1741
2001
|
this.toolbox = new DIVEToolbox(this.scene, this.orbitControls);
|
|
1742
|
-
this.communication = new DIVECommunication(this.
|
|
1743
|
-
this.animationSystem =
|
|
1744
|
-
this.
|
|
1745
|
-
this.
|
|
1746
|
-
}
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
const restoreViewport = new Vector4();
|
|
1750
|
-
this.renderer.AddPostRenderCallback(() => {
|
|
1751
|
-
const restoreBackground = this.scene.background;
|
|
1752
|
-
this.scene.background = null;
|
|
1753
|
-
this.renderer.getViewport(restoreViewport);
|
|
1754
|
-
this.renderer.setViewport(0, 0, 150, 150);
|
|
1755
|
-
this.renderer.autoClear = false;
|
|
1756
|
-
this.axisCamera.SetFromCameraMatrix(this.perspectiveCamera.matrix);
|
|
1757
|
-
this.renderer.render(this.scene, this.axisCamera);
|
|
1758
|
-
this.renderer.setViewport(restoreViewport);
|
|
1759
|
-
this.renderer.autoClear = true;
|
|
1760
|
-
this.scene.background = restoreBackground;
|
|
1761
|
-
});
|
|
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
|
+
}
|
|
1762
2009
|
if (this._settings.autoResize) {
|
|
1763
2010
|
this.addResizeObserver();
|
|
1764
2011
|
}
|
|
@@ -1769,6 +2016,14 @@ var DIVE = class {
|
|
|
1769
2016
|
}
|
|
1770
2017
|
};
|
|
1771
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
|
+
}
|
|
1772
2027
|
// methods
|
|
1773
2028
|
OnResize(width, height) {
|
|
1774
2029
|
this.renderer.OnResize(width, height);
|