@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.cjs
CHANGED
|
@@ -22,6 +22,9 @@ var __spreadValues = (a, b) => {
|
|
|
22
22
|
return a;
|
|
23
23
|
};
|
|
24
24
|
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
25
|
+
var __esm = (fn, res) => function __init() {
|
|
26
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
27
|
+
};
|
|
25
28
|
var __export = (target, all) => {
|
|
26
29
|
for (var name in all)
|
|
27
30
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -64,6 +67,466 @@ var __async = (__this, __arguments, generator) => {
|
|
|
64
67
|
});
|
|
65
68
|
};
|
|
66
69
|
|
|
70
|
+
// src/constant/VisibilityLayerMask.ts
|
|
71
|
+
var DEFAULT_LAYER_MASK, COORDINATE_LAYER_MASK, UI_LAYER_MASK, HELPER_LAYER_MASK, PRODUCT_LAYER_MASK;
|
|
72
|
+
var init_VisibilityLayerMask = __esm({
|
|
73
|
+
"src/constant/VisibilityLayerMask.ts"() {
|
|
74
|
+
"use strict";
|
|
75
|
+
DEFAULT_LAYER_MASK = 1;
|
|
76
|
+
COORDINATE_LAYER_MASK = 2;
|
|
77
|
+
UI_LAYER_MASK = 4;
|
|
78
|
+
HELPER_LAYER_MASK = 8;
|
|
79
|
+
PRODUCT_LAYER_MASK = 16;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// src/interface/Draggable.ts
|
|
84
|
+
var isDraggable, findDraggableInterface;
|
|
85
|
+
var init_Draggable = __esm({
|
|
86
|
+
"src/interface/Draggable.ts"() {
|
|
87
|
+
"use strict";
|
|
88
|
+
isDraggable = (object) => {
|
|
89
|
+
return "isDraggable" in object;
|
|
90
|
+
};
|
|
91
|
+
findDraggableInterface = (child) => {
|
|
92
|
+
if (child === void 0) return void 0;
|
|
93
|
+
if (child.parent === null) {
|
|
94
|
+
return void 0;
|
|
95
|
+
}
|
|
96
|
+
if (isDraggable(child)) {
|
|
97
|
+
return child;
|
|
98
|
+
}
|
|
99
|
+
return findDraggableInterface(child.parent);
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// src/interface/Hoverable.ts
|
|
105
|
+
var isHoverable, findHoverableInterface;
|
|
106
|
+
var init_Hoverable = __esm({
|
|
107
|
+
"src/interface/Hoverable.ts"() {
|
|
108
|
+
"use strict";
|
|
109
|
+
isHoverable = (object) => {
|
|
110
|
+
return "isHoverable" in object;
|
|
111
|
+
};
|
|
112
|
+
findHoverableInterface = (child) => {
|
|
113
|
+
if (child === void 0) return void 0;
|
|
114
|
+
if (child.parent === null) {
|
|
115
|
+
return void 0;
|
|
116
|
+
}
|
|
117
|
+
if (isHoverable(child)) {
|
|
118
|
+
return child;
|
|
119
|
+
}
|
|
120
|
+
return findHoverableInterface(child.parent);
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// src/toolbox/BaseTool.ts
|
|
126
|
+
var import_three3, DIVEBaseTool;
|
|
127
|
+
var init_BaseTool = __esm({
|
|
128
|
+
"src/toolbox/BaseTool.ts"() {
|
|
129
|
+
"use strict";
|
|
130
|
+
import_three3 = require("three");
|
|
131
|
+
init_VisibilityLayerMask();
|
|
132
|
+
init_Draggable();
|
|
133
|
+
init_Hoverable();
|
|
134
|
+
DIVEBaseTool = class {
|
|
135
|
+
constructor(scene, controller) {
|
|
136
|
+
this.POINTER_DRAG_THRESHOLD = 1e-3;
|
|
137
|
+
this.name = "BaseTool";
|
|
138
|
+
this._canvas = controller.domElement;
|
|
139
|
+
this._scene = scene;
|
|
140
|
+
this._controller = controller;
|
|
141
|
+
this._pointer = new import_three3.Vector2();
|
|
142
|
+
this._pointerPrimaryDown = false;
|
|
143
|
+
this._pointerMiddleDown = false;
|
|
144
|
+
this._pointerSecondaryDown = false;
|
|
145
|
+
this._lastPointerDown = new import_three3.Vector2();
|
|
146
|
+
this._lastPointerUp = new import_three3.Vector2();
|
|
147
|
+
this._raycaster = new import_three3.Raycaster();
|
|
148
|
+
this._raycaster.layers.mask = PRODUCT_LAYER_MASK | UI_LAYER_MASK;
|
|
149
|
+
this._intersects = [];
|
|
150
|
+
this._hovered = null;
|
|
151
|
+
this._dragging = false;
|
|
152
|
+
this._dragStart = new import_three3.Vector3();
|
|
153
|
+
this._dragCurrent = new import_three3.Vector3();
|
|
154
|
+
this._dragEnd = new import_three3.Vector3();
|
|
155
|
+
this._dragDelta = new import_three3.Vector3();
|
|
156
|
+
this._draggable = null;
|
|
157
|
+
this._dragRaycastOnObjects = null;
|
|
158
|
+
}
|
|
159
|
+
get _pointerAnyDown() {
|
|
160
|
+
return this._pointerPrimaryDown || this._pointerMiddleDown || this._pointerSecondaryDown;
|
|
161
|
+
}
|
|
162
|
+
Activate() {
|
|
163
|
+
}
|
|
164
|
+
Deactivate() {
|
|
165
|
+
}
|
|
166
|
+
onPointerDown(e) {
|
|
167
|
+
var _a;
|
|
168
|
+
switch (e.button) {
|
|
169
|
+
case 0:
|
|
170
|
+
this._pointerPrimaryDown = true;
|
|
171
|
+
break;
|
|
172
|
+
case 1:
|
|
173
|
+
this._pointerMiddleDown = true;
|
|
174
|
+
break;
|
|
175
|
+
case 2:
|
|
176
|
+
this._pointerSecondaryDown = true;
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
this._lastPointerDown.copy(this._pointer);
|
|
180
|
+
this._draggable = findDraggableInterface((_a = this._intersects[0]) == null ? void 0 : _a.object) || null;
|
|
181
|
+
}
|
|
182
|
+
onDragStart(e) {
|
|
183
|
+
if (!this._draggable) return;
|
|
184
|
+
if (this._dragRaycastOnObjects !== null) {
|
|
185
|
+
this._intersects = this._raycaster.intersectObjects(this._dragRaycastOnObjects, true);
|
|
186
|
+
}
|
|
187
|
+
if (this._intersects.length === 0) return;
|
|
188
|
+
this._dragStart.copy(this._intersects[0].point.clone());
|
|
189
|
+
this._dragCurrent.copy(this._intersects[0].point.clone());
|
|
190
|
+
this._dragEnd.copy(this._dragStart.clone());
|
|
191
|
+
this._dragDelta.set(0, 0, 0);
|
|
192
|
+
if (this._draggable && this._draggable.onDragStart) {
|
|
193
|
+
this._draggable.onDragStart({
|
|
194
|
+
dragStart: this._dragStart,
|
|
195
|
+
dragCurrent: this._dragCurrent,
|
|
196
|
+
dragEnd: this._dragEnd,
|
|
197
|
+
dragDelta: this._dragDelta
|
|
198
|
+
});
|
|
199
|
+
this._dragging = true;
|
|
200
|
+
this._controller.enabled = false;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
onPointerMove(e) {
|
|
204
|
+
var _a;
|
|
205
|
+
this._pointer.x = e.offsetX / this._canvas.clientWidth * 2 - 1;
|
|
206
|
+
this._pointer.y = -(e.offsetY / this._canvas.clientHeight) * 2 + 1;
|
|
207
|
+
this._raycaster.setFromCamera(this._pointer, this._controller.object);
|
|
208
|
+
this._intersects = this.raycast(this._scene.children);
|
|
209
|
+
const hoverable = findHoverableInterface((_a = this._intersects[0]) == null ? void 0 : _a.object);
|
|
210
|
+
if (this._intersects[0] && hoverable) {
|
|
211
|
+
if (!this._hovered) {
|
|
212
|
+
if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
|
|
213
|
+
this._hovered = hoverable;
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (this._hovered.uuid !== hoverable.uuid) {
|
|
217
|
+
if (this._hovered.onPointerLeave) this._hovered.onPointerLeave();
|
|
218
|
+
if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
|
|
219
|
+
this._hovered = hoverable;
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
if (hoverable.onPointerOver) hoverable.onPointerOver(this._intersects[0]);
|
|
223
|
+
this._hovered = hoverable;
|
|
224
|
+
} else {
|
|
225
|
+
if (this._hovered) {
|
|
226
|
+
if (this._hovered.onPointerLeave) this._hovered.onPointerLeave();
|
|
227
|
+
}
|
|
228
|
+
this._hovered = null;
|
|
229
|
+
}
|
|
230
|
+
if (this._pointerAnyDown) {
|
|
231
|
+
if (!this._dragging) {
|
|
232
|
+
this.onDragStart(e);
|
|
233
|
+
}
|
|
234
|
+
this.onDrag(e);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
onDrag(e) {
|
|
238
|
+
if (this._dragRaycastOnObjects !== null) {
|
|
239
|
+
this._intersects = this._raycaster.intersectObjects(this._dragRaycastOnObjects, true);
|
|
240
|
+
}
|
|
241
|
+
const intersect = this._intersects[0];
|
|
242
|
+
if (!intersect) return;
|
|
243
|
+
this._dragCurrent.copy(intersect.point.clone());
|
|
244
|
+
this._dragEnd.copy(intersect.point.clone());
|
|
245
|
+
this._dragDelta.subVectors(this._dragCurrent.clone(), this._dragStart.clone());
|
|
246
|
+
if (this._draggable && this._draggable.onDrag) {
|
|
247
|
+
this._draggable.onDrag({
|
|
248
|
+
dragStart: this._dragStart,
|
|
249
|
+
dragCurrent: this._dragCurrent,
|
|
250
|
+
dragEnd: this._dragEnd,
|
|
251
|
+
dragDelta: this._dragDelta
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
onPointerUp(e) {
|
|
256
|
+
if (this.pointerWasDragged() || this._dragging) {
|
|
257
|
+
if (this._draggable) {
|
|
258
|
+
this.onDragEnd(e);
|
|
259
|
+
}
|
|
260
|
+
} else {
|
|
261
|
+
this.onClick(e);
|
|
262
|
+
}
|
|
263
|
+
switch (e.button) {
|
|
264
|
+
case 0:
|
|
265
|
+
this._pointerPrimaryDown = false;
|
|
266
|
+
break;
|
|
267
|
+
case 1:
|
|
268
|
+
this._pointerMiddleDown = false;
|
|
269
|
+
break;
|
|
270
|
+
case 2:
|
|
271
|
+
this._pointerSecondaryDown = false;
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
this._lastPointerUp.copy(this._pointer);
|
|
275
|
+
}
|
|
276
|
+
onClick(e) {
|
|
277
|
+
}
|
|
278
|
+
onDragEnd(e) {
|
|
279
|
+
const intersect = this._intersects[0];
|
|
280
|
+
if (intersect) {
|
|
281
|
+
this._dragEnd.copy(intersect.point.clone());
|
|
282
|
+
this._dragCurrent.copy(intersect.point.clone());
|
|
283
|
+
this._dragDelta.subVectors(this._dragCurrent.clone(), this._dragStart.clone());
|
|
284
|
+
}
|
|
285
|
+
if (this._draggable && this._draggable.onDragEnd) {
|
|
286
|
+
this._draggable.onDragEnd({
|
|
287
|
+
dragStart: this._dragStart,
|
|
288
|
+
dragCurrent: this._dragCurrent,
|
|
289
|
+
dragEnd: this._dragEnd,
|
|
290
|
+
dragDelta: this._dragDelta
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
this._draggable = null;
|
|
294
|
+
this._dragging = false;
|
|
295
|
+
this._dragStart.set(0, 0, 0);
|
|
296
|
+
this._dragCurrent.set(0, 0, 0);
|
|
297
|
+
this._dragEnd.set(0, 0, 0);
|
|
298
|
+
this._dragDelta.set(0, 0, 0);
|
|
299
|
+
this._controller.enabled = true;
|
|
300
|
+
}
|
|
301
|
+
onWheel(e) {
|
|
302
|
+
}
|
|
303
|
+
raycast(objects) {
|
|
304
|
+
if (objects !== void 0) return this._raycaster.intersectObjects(objects, true).filter((i) => i.object.visible);
|
|
305
|
+
return this._raycaster.intersectObjects(this._scene.children, true).filter((i) => i.object.visible);
|
|
306
|
+
}
|
|
307
|
+
pointerWasDragged() {
|
|
308
|
+
return this._lastPointerDown.distanceTo(this._pointer) > this.POINTER_DRAG_THRESHOLD;
|
|
309
|
+
}
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
// src/toolbox/transform/TransformTool.ts
|
|
315
|
+
var import_Addons, DIVETransformTool;
|
|
316
|
+
var init_TransformTool = __esm({
|
|
317
|
+
"src/toolbox/transform/TransformTool.ts"() {
|
|
318
|
+
"use strict";
|
|
319
|
+
init_BaseTool();
|
|
320
|
+
import_Addons = require("three/examples/jsm/Addons");
|
|
321
|
+
DIVETransformTool = class extends DIVEBaseTool {
|
|
322
|
+
constructor(scene, controller) {
|
|
323
|
+
super(scene, controller);
|
|
324
|
+
this.isTransformTool = true;
|
|
325
|
+
this.name = "DIVETransformTool";
|
|
326
|
+
this._gizmo = new import_Addons.TransformControls(this._controller.object, this._controller.domElement);
|
|
327
|
+
this._gizmo.mode = "translate";
|
|
328
|
+
this._gizmo.addEventListener("mouseDown", () => {
|
|
329
|
+
controller.enabled = false;
|
|
330
|
+
});
|
|
331
|
+
this._gizmo.addEventListener("mouseUp", () => {
|
|
332
|
+
controller.enabled = true;
|
|
333
|
+
});
|
|
334
|
+
this._gizmo.addEventListener("objectChange", () => {
|
|
335
|
+
if (!this._gizmo.object) return;
|
|
336
|
+
if (!("isMoveable" in this._gizmo.object)) return;
|
|
337
|
+
if (!("onMove" in this._gizmo.object)) return;
|
|
338
|
+
this._gizmo.object.onMove();
|
|
339
|
+
});
|
|
340
|
+
scene.add(this._gizmo);
|
|
341
|
+
}
|
|
342
|
+
Activate() {
|
|
343
|
+
}
|
|
344
|
+
SetGizmoMode(mode) {
|
|
345
|
+
this._gizmo.mode = mode;
|
|
346
|
+
}
|
|
347
|
+
SetGizmoVisibility(active) {
|
|
348
|
+
const contains = this._scene.children.includes(this._gizmo);
|
|
349
|
+
if (active && !contains) {
|
|
350
|
+
this._scene.add(this._gizmo);
|
|
351
|
+
} else if (!active && contains) {
|
|
352
|
+
this._scene.remove(this._gizmo);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
// public onPointerDown(e: PointerEvent): void {
|
|
356
|
+
// super.onPointerDown(e);
|
|
357
|
+
// // if (this._hovered) {
|
|
358
|
+
// // this._dragRaycastOnObjects = this._gizmo.gizmoPlane.children;
|
|
359
|
+
// // }
|
|
360
|
+
// }
|
|
361
|
+
// protected raycast(): Intersection[] {
|
|
362
|
+
// return super.raycast(this._gizmo.gizmoNode.children);
|
|
363
|
+
// }
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
// src/interface/Selectable.ts
|
|
369
|
+
function isSelectable(object) {
|
|
370
|
+
return "isSelectable" in object;
|
|
371
|
+
}
|
|
372
|
+
function findSelectableInterface(child) {
|
|
373
|
+
if (child === void 0) return void 0;
|
|
374
|
+
if (child.parent === null) {
|
|
375
|
+
return void 0;
|
|
376
|
+
}
|
|
377
|
+
if (isSelectable(child)) {
|
|
378
|
+
return child;
|
|
379
|
+
}
|
|
380
|
+
return findSelectableInterface(child.parent);
|
|
381
|
+
}
|
|
382
|
+
var init_Selectable = __esm({
|
|
383
|
+
"src/interface/Selectable.ts"() {
|
|
384
|
+
"use strict";
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
// src/toolbox/select/SelectTool.ts
|
|
389
|
+
var SelectTool_exports = {};
|
|
390
|
+
__export(SelectTool_exports, {
|
|
391
|
+
DIVESelectTool: () => DIVESelectTool,
|
|
392
|
+
isSelectTool: () => isSelectTool
|
|
393
|
+
});
|
|
394
|
+
var isSelectTool, DIVESelectTool;
|
|
395
|
+
var init_SelectTool = __esm({
|
|
396
|
+
"src/toolbox/select/SelectTool.ts"() {
|
|
397
|
+
"use strict";
|
|
398
|
+
init_TransformTool();
|
|
399
|
+
init_Selectable();
|
|
400
|
+
isSelectTool = (tool) => {
|
|
401
|
+
return tool.isSelectTool !== void 0;
|
|
402
|
+
};
|
|
403
|
+
DIVESelectTool = class extends DIVETransformTool {
|
|
404
|
+
constructor(scene, controller) {
|
|
405
|
+
super(scene, controller);
|
|
406
|
+
this.isSelectTool = true;
|
|
407
|
+
this.name = "SelectTool";
|
|
408
|
+
}
|
|
409
|
+
Activate() {
|
|
410
|
+
}
|
|
411
|
+
Select(selectable) {
|
|
412
|
+
if (selectable.onSelect) selectable.onSelect();
|
|
413
|
+
this.AttachGizmo(selectable);
|
|
414
|
+
}
|
|
415
|
+
Deselect(selectable) {
|
|
416
|
+
if (selectable.onDeselect) selectable.onDeselect();
|
|
417
|
+
this.DetachGizmo();
|
|
418
|
+
}
|
|
419
|
+
AttachGizmo(selectable) {
|
|
420
|
+
if ("isMoveable" in selectable) {
|
|
421
|
+
const movable = selectable;
|
|
422
|
+
this._gizmo.attach(movable);
|
|
423
|
+
this.SetGizmoVisibility(movable.visible);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
DetachGizmo() {
|
|
427
|
+
this._gizmo.detach();
|
|
428
|
+
}
|
|
429
|
+
onClick(e) {
|
|
430
|
+
super.onClick(e);
|
|
431
|
+
const first = this._raycaster.intersectObjects(this._scene.Root.children, true).filter((intersect) => intersect.object.visible)[0];
|
|
432
|
+
const selectable = findSelectableInterface(first == null ? void 0 : first.object);
|
|
433
|
+
if (!first || !selectable) {
|
|
434
|
+
if (this._gizmo.object) {
|
|
435
|
+
this.Deselect(this._gizmo.object);
|
|
436
|
+
}
|
|
437
|
+
return;
|
|
438
|
+
}
|
|
439
|
+
if (this._gizmo.object) {
|
|
440
|
+
if (this._gizmo.object.uuid === selectable.uuid) return;
|
|
441
|
+
this.Deselect(this._gizmo.object);
|
|
442
|
+
}
|
|
443
|
+
this.Select(selectable);
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
// src/camera/PerspectiveCamera.ts
|
|
450
|
+
var import_three4, DIVEPerspectiveCameraDefaultSettings, _DIVEPerspectiveCamera, DIVEPerspectiveCamera;
|
|
451
|
+
var init_PerspectiveCamera = __esm({
|
|
452
|
+
"src/camera/PerspectiveCamera.ts"() {
|
|
453
|
+
"use strict";
|
|
454
|
+
import_three4 = require("three");
|
|
455
|
+
init_VisibilityLayerMask();
|
|
456
|
+
DIVEPerspectiveCameraDefaultSettings = {
|
|
457
|
+
fov: 80,
|
|
458
|
+
near: 0.1,
|
|
459
|
+
far: 1e3
|
|
460
|
+
};
|
|
461
|
+
_DIVEPerspectiveCamera = class _DIVEPerspectiveCamera extends import_three4.PerspectiveCamera {
|
|
462
|
+
constructor(settings = DIVEPerspectiveCameraDefaultSettings) {
|
|
463
|
+
super(settings.fov, 1, settings.near, settings.far);
|
|
464
|
+
this.onSetCameraLayer = () => {
|
|
465
|
+
};
|
|
466
|
+
this.layers.mask = _DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
467
|
+
}
|
|
468
|
+
OnResize(width, height) {
|
|
469
|
+
this.aspect = width / height;
|
|
470
|
+
this.updateProjectionMatrix();
|
|
471
|
+
}
|
|
472
|
+
SetCameraLayer(layer) {
|
|
473
|
+
this.layers.mask = layer === "LIVE" ? _DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK : _DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
474
|
+
this.onSetCameraLayer(this.layers.mask);
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
_DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK = DEFAULT_LAYER_MASK | UI_LAYER_MASK | HELPER_LAYER_MASK | PRODUCT_LAYER_MASK;
|
|
478
|
+
_DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK = PRODUCT_LAYER_MASK;
|
|
479
|
+
DIVEPerspectiveCamera = _DIVEPerspectiveCamera;
|
|
480
|
+
}
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
// src/mediacreator/MediaCreator.ts
|
|
484
|
+
var MediaCreator_exports = {};
|
|
485
|
+
__export(MediaCreator_exports, {
|
|
486
|
+
DIVEMediaCreator: () => DIVEMediaCreator
|
|
487
|
+
});
|
|
488
|
+
var DIVEMediaCreator;
|
|
489
|
+
var init_MediaCreator = __esm({
|
|
490
|
+
"src/mediacreator/MediaCreator.ts"() {
|
|
491
|
+
"use strict";
|
|
492
|
+
init_PerspectiveCamera();
|
|
493
|
+
DIVEMediaCreator = class {
|
|
494
|
+
constructor(renderer, scene, controller) {
|
|
495
|
+
this.renderer = renderer;
|
|
496
|
+
this.scene = scene;
|
|
497
|
+
this.controller = controller;
|
|
498
|
+
}
|
|
499
|
+
GenerateMedia(position, target, width, height) {
|
|
500
|
+
const resetPosition = this.controller.object.position.clone();
|
|
501
|
+
const resetRotation = this.controller.object.quaternion.clone();
|
|
502
|
+
this.renderer.OnResize(width, height);
|
|
503
|
+
this.controller.object.OnResize(width, height);
|
|
504
|
+
this.controller.object.position.copy(position);
|
|
505
|
+
this.controller.target.copy(target);
|
|
506
|
+
this.controller.update();
|
|
507
|
+
const dataUri = this.DrawCanvas().toDataURL();
|
|
508
|
+
this.controller.object.position.copy(resetPosition);
|
|
509
|
+
this.controller.object.quaternion.copy(resetRotation);
|
|
510
|
+
return dataUri;
|
|
511
|
+
}
|
|
512
|
+
DrawCanvas(canvasElement) {
|
|
513
|
+
const restore = this.renderer.domElement;
|
|
514
|
+
if (canvasElement) {
|
|
515
|
+
this.renderer.domElement = canvasElement;
|
|
516
|
+
}
|
|
517
|
+
this.controller.object.layers.mask = DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK;
|
|
518
|
+
this.renderer.render(this.scene, this.controller.object);
|
|
519
|
+
this.controller.object.layers.mask = DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
520
|
+
const returnCanvas = this.renderer.domElement;
|
|
521
|
+
if (canvasElement) {
|
|
522
|
+
this.renderer.domElement = restore;
|
|
523
|
+
}
|
|
524
|
+
return returnCanvas;
|
|
525
|
+
}
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
});
|
|
529
|
+
|
|
67
530
|
// src/dive.ts
|
|
68
531
|
var dive_exports = {};
|
|
69
532
|
__export(dive_exports, {
|
|
@@ -74,7 +537,6 @@ __export(dive_exports, {
|
|
|
74
537
|
default: () => DIVE
|
|
75
538
|
});
|
|
76
539
|
module.exports = __toCommonJS(dive_exports);
|
|
77
|
-
var import_three17 = require("three");
|
|
78
540
|
|
|
79
541
|
// src/renderer/Renderer.ts
|
|
80
542
|
var import_three = require("three");
|
|
@@ -106,6 +568,11 @@ var DIVERenderer = class extends import_three.WebGLRenderer {
|
|
|
106
568
|
this.toneMapping = rendererSettings.toneMapping;
|
|
107
569
|
this.debug.checkShaderErrors = false;
|
|
108
570
|
}
|
|
571
|
+
// Stops renderings and disposes the renderer.
|
|
572
|
+
Dispose() {
|
|
573
|
+
this.StopRenderer();
|
|
574
|
+
this.dispose();
|
|
575
|
+
}
|
|
109
576
|
// Starts the renderer with the given scene and camera.
|
|
110
577
|
StartRenderer(scene, cam) {
|
|
111
578
|
this.setAnimationLoop(() => {
|
|
@@ -197,25 +664,17 @@ var DIVERenderer = class extends import_three.WebGLRenderer {
|
|
|
197
664
|
};
|
|
198
665
|
|
|
199
666
|
// src/scene/Scene.ts
|
|
200
|
-
var
|
|
667
|
+
var import_three13 = require("three");
|
|
201
668
|
|
|
202
669
|
// src/scene/root/Root.ts
|
|
203
|
-
var
|
|
670
|
+
var import_three12 = require("three");
|
|
204
671
|
|
|
205
672
|
// src/scene/root/lightroot/LightRoot.ts
|
|
206
|
-
var
|
|
673
|
+
var import_three7 = require("three");
|
|
207
674
|
|
|
208
675
|
// src/light/AmbientLight.ts
|
|
209
676
|
var import_three2 = require("three");
|
|
210
|
-
|
|
211
|
-
// src/constant/VisibilityLayerMask.ts
|
|
212
|
-
var DEFAULT_LAYER_MASK = 1;
|
|
213
|
-
var COORDINATE_LAYER_MASK = 2;
|
|
214
|
-
var UI_LAYER_MASK = 4;
|
|
215
|
-
var HELPER_LAYER_MASK = 8;
|
|
216
|
-
var PRODUCT_LAYER_MASK = 16;
|
|
217
|
-
|
|
218
|
-
// src/light/AmbientLight.ts
|
|
677
|
+
init_VisibilityLayerMask();
|
|
219
678
|
var DIVEAmbientLight = class extends import_three2.Object3D {
|
|
220
679
|
constructor() {
|
|
221
680
|
super();
|
|
@@ -236,25 +695,34 @@ var DIVEAmbientLight = class extends import_three2.Object3D {
|
|
|
236
695
|
};
|
|
237
696
|
|
|
238
697
|
// src/light/PointLight.ts
|
|
239
|
-
var
|
|
698
|
+
var import_three5 = require("three");
|
|
240
699
|
|
|
241
700
|
// src/com/Communication.ts
|
|
242
|
-
var
|
|
701
|
+
var import_MathUtils = require("three/src/math/MathUtils");
|
|
702
|
+
init_SelectTool();
|
|
243
703
|
var _DIVECommunication = class _DIVECommunication {
|
|
244
|
-
constructor(scene, controls, toolbox
|
|
704
|
+
constructor(renderer, scene, controls, toolbox) {
|
|
245
705
|
this.registered = /* @__PURE__ */ new Map();
|
|
246
706
|
// private listeners: { [key: string]: EventListener[] } = {};
|
|
247
707
|
this.listeners = /* @__PURE__ */ new Map();
|
|
248
|
-
this.id =
|
|
708
|
+
this.id = (0, import_MathUtils.generateUUID)();
|
|
709
|
+
this.renderer = renderer;
|
|
249
710
|
this.scene = scene;
|
|
250
711
|
this.controller = controls;
|
|
251
712
|
this.toolbox = toolbox;
|
|
252
|
-
this.
|
|
713
|
+
this._mediaGenerator = null;
|
|
253
714
|
_DIVECommunication.__instances.push(this);
|
|
254
715
|
}
|
|
255
716
|
static get(id) {
|
|
256
717
|
return this.__instances.find((instance) => Array.from(instance.registered.values()).find((object) => object.id === id));
|
|
257
718
|
}
|
|
719
|
+
get mediaGenerator() {
|
|
720
|
+
if (!this._mediaGenerator) {
|
|
721
|
+
const DIVEMediaCreator2 = (init_MediaCreator(), __toCommonJS(MediaCreator_exports)).default;
|
|
722
|
+
this._mediaGenerator = new DIVEMediaCreator2(this.renderer, this.scene, this.controller);
|
|
723
|
+
}
|
|
724
|
+
return this._mediaGenerator;
|
|
725
|
+
}
|
|
258
726
|
DestroyInstance() {
|
|
259
727
|
const existingIndex = _DIVECommunication.__instances.findIndex((entry) => entry.id === this.id);
|
|
260
728
|
if (existingIndex === -1) return false;
|
|
@@ -324,6 +792,10 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
324
792
|
returnValue = this.resetCamera(payload);
|
|
325
793
|
break;
|
|
326
794
|
}
|
|
795
|
+
case "COMPUTE_ENCOMPASSING_VIEW": {
|
|
796
|
+
returnValue = this.computeEncompassingView(payload);
|
|
797
|
+
break;
|
|
798
|
+
}
|
|
327
799
|
case "SET_CAMERA_LAYER": {
|
|
328
800
|
returnValue = this.setCameraLayer(payload);
|
|
329
801
|
break;
|
|
@@ -434,8 +906,10 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
434
906
|
const sceneObject = this.scene.GetSceneObject(object);
|
|
435
907
|
if (!sceneObject) return false;
|
|
436
908
|
if (!("isSelectable" in sceneObject)) return false;
|
|
437
|
-
this.toolbox.
|
|
438
|
-
|
|
909
|
+
const activeTool = this.toolbox.GetActiveTool();
|
|
910
|
+
if (activeTool && isSelectTool(activeTool)) {
|
|
911
|
+
activeTool.AttachGizmo(sceneObject);
|
|
912
|
+
}
|
|
439
913
|
Object.assign(payload, object);
|
|
440
914
|
return true;
|
|
441
915
|
}
|
|
@@ -445,8 +919,10 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
445
919
|
const sceneObject = this.scene.GetSceneObject(object);
|
|
446
920
|
if (!sceneObject) return false;
|
|
447
921
|
if (!("isSelectable" in sceneObject)) return false;
|
|
448
|
-
this.toolbox.
|
|
449
|
-
|
|
922
|
+
const activeTool = this.toolbox.GetActiveTool();
|
|
923
|
+
if (activeTool && isSelectTool(activeTool)) {
|
|
924
|
+
activeTool.DetachGizmo();
|
|
925
|
+
}
|
|
450
926
|
Object.assign(payload, object);
|
|
451
927
|
return true;
|
|
452
928
|
}
|
|
@@ -501,6 +977,12 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
501
977
|
this.controller.RevertLast(payload.duration);
|
|
502
978
|
return true;
|
|
503
979
|
}
|
|
980
|
+
computeEncompassingView(payload) {
|
|
981
|
+
const sceneBB = this.scene.ComputeSceneBB();
|
|
982
|
+
const transform = this.controller.ComputeEncompassingView(sceneBB);
|
|
983
|
+
Object.assign(payload, transform);
|
|
984
|
+
return transform;
|
|
985
|
+
}
|
|
504
986
|
zoomCamera(payload) {
|
|
505
987
|
if (payload.direction === "IN") this.controller.ZoomIn(payload.by);
|
|
506
988
|
if (payload.direction === "OUT") this.controller.ZoomOut(payload.by);
|
|
@@ -521,10 +1003,12 @@ var _DIVECommunication = class _DIVECommunication {
|
|
|
521
1003
|
updateScene(payload) {
|
|
522
1004
|
if (payload.name !== void 0) this.scene.name = payload.name;
|
|
523
1005
|
if (payload.backgroundColor !== void 0) this.scene.SetBackground(payload.backgroundColor);
|
|
1006
|
+
if (payload.gridEnabled !== void 0) this.scene.Root.Grid.SetVisibility(payload.gridEnabled);
|
|
524
1007
|
if (payload.floorEnabled !== void 0) this.scene.Root.Floor.SetVisibility(payload.floorEnabled);
|
|
525
1008
|
if (payload.floorColor !== void 0) this.scene.Root.Floor.SetColor(payload.floorColor);
|
|
526
1009
|
payload.name = this.scene.name;
|
|
527
1010
|
payload.backgroundColor = "#" + this.scene.background.getHexString();
|
|
1011
|
+
payload.gridEnabled = this.scene.Root.Grid.visible;
|
|
528
1012
|
payload.floorEnabled = this.scene.Root.Floor.visible;
|
|
529
1013
|
payload.floorColor = "#" + this.scene.Root.Floor.material.color.getHexString();
|
|
530
1014
|
return true;
|
|
@@ -547,23 +1031,24 @@ _DIVECommunication.__instances = [];
|
|
|
547
1031
|
var DIVECommunication = _DIVECommunication;
|
|
548
1032
|
|
|
549
1033
|
// src/light/PointLight.ts
|
|
550
|
-
|
|
1034
|
+
init_VisibilityLayerMask();
|
|
1035
|
+
var DIVEPointLight = class extends import_three5.Object3D {
|
|
551
1036
|
constructor() {
|
|
552
1037
|
super();
|
|
553
1038
|
this.isMoveable = true;
|
|
554
1039
|
this.isSelectable = true;
|
|
555
1040
|
this.gizmo = null;
|
|
556
1041
|
this.name = "DIVEPointLight";
|
|
557
|
-
this.light = new
|
|
1042
|
+
this.light = new import_three5.PointLight(16777215, 1);
|
|
558
1043
|
this.light.layers.mask = PRODUCT_LAYER_MASK;
|
|
559
1044
|
this.light.castShadow = true;
|
|
560
1045
|
this.light.shadow.mapSize.width = 512;
|
|
561
1046
|
this.light.shadow.mapSize.height = 512;
|
|
562
1047
|
this.add(this.light);
|
|
563
1048
|
const geoSize = 0.1;
|
|
564
|
-
const geometry = new
|
|
565
|
-
const material = new
|
|
566
|
-
this.mesh = new
|
|
1049
|
+
const geometry = new import_three5.SphereGeometry(geoSize, geoSize * 320, geoSize * 320);
|
|
1050
|
+
const material = new import_three5.MeshBasicMaterial({ color: this.light.color, transparent: true, opacity: 0.8, side: import_three5.FrontSide });
|
|
1051
|
+
this.mesh = new import_three5.Mesh(geometry, material);
|
|
567
1052
|
this.mesh.layers.mask = UI_LAYER_MASK;
|
|
568
1053
|
this.add(this.mesh);
|
|
569
1054
|
}
|
|
@@ -593,16 +1078,17 @@ var DIVEPointLight = class extends import_three4.Object3D {
|
|
|
593
1078
|
};
|
|
594
1079
|
|
|
595
1080
|
// src/light/SceneLight.ts
|
|
596
|
-
|
|
597
|
-
var
|
|
1081
|
+
init_VisibilityLayerMask();
|
|
1082
|
+
var import_three6 = require("three");
|
|
1083
|
+
var DIVESceneLight = class extends import_three6.Object3D {
|
|
598
1084
|
constructor() {
|
|
599
1085
|
super();
|
|
600
1086
|
this.name = "DIVESceneLight";
|
|
601
|
-
this._hemiLight = new
|
|
1087
|
+
this._hemiLight = new import_three6.HemisphereLight(16777215, 16777215, 2);
|
|
602
1088
|
this._hemiLight.layers.mask = PRODUCT_LAYER_MASK;
|
|
603
1089
|
this._hemiLight.position.set(0, 50, 0);
|
|
604
1090
|
this.add(this._hemiLight);
|
|
605
|
-
this._dirLight = new
|
|
1091
|
+
this._dirLight = new import_three6.DirectionalLight(16777215, 3);
|
|
606
1092
|
this._dirLight.layers.mask = PRODUCT_LAYER_MASK;
|
|
607
1093
|
this._dirLight.position.set(1, 1.75, 1);
|
|
608
1094
|
this._dirLight.position.multiplyScalar(30);
|
|
@@ -632,7 +1118,7 @@ var DIVESceneLight = class extends import_three5.Object3D {
|
|
|
632
1118
|
};
|
|
633
1119
|
|
|
634
1120
|
// src/scene/root/lightroot/LightRoot.ts
|
|
635
|
-
var DIVELightRoot = class extends
|
|
1121
|
+
var DIVELightRoot = class extends import_three7.Object3D {
|
|
636
1122
|
constructor() {
|
|
637
1123
|
super();
|
|
638
1124
|
this.name = "LightRoot";
|
|
@@ -676,7 +1162,7 @@ var DIVELightRoot = class extends import_three6.Object3D {
|
|
|
676
1162
|
if (light.position !== void 0 && light.position !== null) sceneObject.position.set(light.position.x, light.position.y, light.position.z);
|
|
677
1163
|
if (light.intensity !== void 0 && light.intensity !== null) sceneObject.SetIntensity(light.intensity);
|
|
678
1164
|
if (light.enabled !== void 0 && light.enabled !== null) sceneObject.SetEnabled(light.enabled);
|
|
679
|
-
if (light.color !== void 0 && light.color !== null) sceneObject.SetColor(new
|
|
1165
|
+
if (light.color !== void 0 && light.color !== null) sceneObject.SetColor(new import_three7.Color(light.color));
|
|
680
1166
|
if (light.visible !== void 0 && light.visible !== null) sceneObject.visible = light.visible;
|
|
681
1167
|
}
|
|
682
1168
|
DeleteLight(light) {
|
|
@@ -707,10 +1193,11 @@ var DIVELightRoot = class extends import_three6.Object3D {
|
|
|
707
1193
|
};
|
|
708
1194
|
|
|
709
1195
|
// src/scene/root/modelroot/ModelRoot.ts
|
|
710
|
-
var
|
|
1196
|
+
var import_three9 = require("three");
|
|
711
1197
|
|
|
712
1198
|
// src/model/Model.ts
|
|
713
|
-
var
|
|
1199
|
+
var import_three8 = require("three");
|
|
1200
|
+
init_VisibilityLayerMask();
|
|
714
1201
|
|
|
715
1202
|
// src/helper/findSceneRecursive/findSceneRecursive.ts
|
|
716
1203
|
var findSceneRecursive = (object) => {
|
|
@@ -721,14 +1208,14 @@ var findSceneRecursive = (object) => {
|
|
|
721
1208
|
};
|
|
722
1209
|
|
|
723
1210
|
// src/model/Model.ts
|
|
724
|
-
var DIVEModel = class extends
|
|
1211
|
+
var DIVEModel = class extends import_three8.Object3D {
|
|
725
1212
|
constructor() {
|
|
726
1213
|
super();
|
|
727
1214
|
this.isSelectable = true;
|
|
728
1215
|
this.isMoveable = true;
|
|
729
1216
|
this.gizmo = null;
|
|
730
1217
|
this.layers.mask = PRODUCT_LAYER_MASK;
|
|
731
|
-
this.boundingBox = new
|
|
1218
|
+
this.boundingBox = new import_three8.Box3();
|
|
732
1219
|
}
|
|
733
1220
|
SetModel(gltf) {
|
|
734
1221
|
this.clear();
|
|
@@ -744,7 +1231,7 @@ var DIVEModel = class extends import_three7.Object3D {
|
|
|
744
1231
|
this.position.set(position.x, position.y, position.z);
|
|
745
1232
|
}
|
|
746
1233
|
SetRotation(rotation) {
|
|
747
|
-
this.rotation.setFromVector3(new
|
|
1234
|
+
this.rotation.setFromVector3(new import_three8.Vector3(rotation.x, rotation.y, rotation.z));
|
|
748
1235
|
}
|
|
749
1236
|
SetScale(scale) {
|
|
750
1237
|
this.scale.set(scale.x, scale.y, scale.z);
|
|
@@ -771,9 +1258,9 @@ var DIVEModel = class extends import_three7.Object3D {
|
|
|
771
1258
|
return;
|
|
772
1259
|
}
|
|
773
1260
|
const bottomY = this.boundingBox.min.y * this.scale.y;
|
|
774
|
-
const bbBottomCenter = this.localToWorld(this.boundingBox.getCenter(new
|
|
1261
|
+
const bbBottomCenter = this.localToWorld(this.boundingBox.getCenter(new import_three8.Vector3()).multiply(this.scale));
|
|
775
1262
|
bbBottomCenter.y = bottomY + this.position.y;
|
|
776
|
-
const raycaster = new
|
|
1263
|
+
const raycaster = new import_three8.Raycaster(bbBottomCenter, new import_three8.Vector3(0, -1, 0));
|
|
777
1264
|
raycaster.layers.mask = PRODUCT_LAYER_MASK;
|
|
778
1265
|
const intersections = raycaster.intersectObjects(findSceneRecursive(this).Root.children, true);
|
|
779
1266
|
if (intersections.length > 0) {
|
|
@@ -782,7 +1269,7 @@ var DIVEModel = class extends import_three7.Object3D {
|
|
|
782
1269
|
const meshBB = mesh.geometry.boundingBox;
|
|
783
1270
|
const worldPos = mesh.localToWorld(meshBB.max.clone());
|
|
784
1271
|
const oldPos = this.position.clone();
|
|
785
|
-
const newPos = this.position.clone().setY(worldPos.y).add(new
|
|
1272
|
+
const newPos = this.position.clone().setY(worldPos.y).add(new import_three8.Vector3(0, bottomY, 0));
|
|
786
1273
|
this.position.copy(newPos);
|
|
787
1274
|
if (this.position.y === oldPos.y) return;
|
|
788
1275
|
(_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 });
|
|
@@ -803,13 +1290,13 @@ var DIVEModel = class extends import_three7.Object3D {
|
|
|
803
1290
|
};
|
|
804
1291
|
|
|
805
1292
|
// src/loadingmanager/LoadingManager.ts
|
|
806
|
-
var
|
|
1293
|
+
var import_Addons2 = require("three/examples/jsm/Addons.js");
|
|
807
1294
|
var DIVELoadingManager = class {
|
|
808
1295
|
// ... maybe extend with other loaders later
|
|
809
1296
|
constructor() {
|
|
810
1297
|
this.progress = /* @__PURE__ */ new Map();
|
|
811
|
-
this.gltfloader = new
|
|
812
|
-
this.dracoloader = new
|
|
1298
|
+
this.gltfloader = new import_Addons2.GLTFLoader();
|
|
1299
|
+
this.dracoloader = new import_Addons2.DRACOLoader();
|
|
813
1300
|
this.dracoloader.setDecoderPath("https://www.gstatic.com/draco/v1/decoders/");
|
|
814
1301
|
this.gltfloader.setDRACOLoader(this.dracoloader);
|
|
815
1302
|
}
|
|
@@ -835,7 +1322,7 @@ var DIVELoadingManager = class {
|
|
|
835
1322
|
};
|
|
836
1323
|
|
|
837
1324
|
// src/scene/root/modelroot/ModelRoot.ts
|
|
838
|
-
var DIVEModelRoot = class extends
|
|
1325
|
+
var DIVEModelRoot = class extends import_three9.Object3D {
|
|
839
1326
|
constructor() {
|
|
840
1327
|
super();
|
|
841
1328
|
this.name = "ModelRoot";
|
|
@@ -904,10 +1391,11 @@ var DIVEModelRoot = class extends import_three8.Object3D {
|
|
|
904
1391
|
};
|
|
905
1392
|
|
|
906
1393
|
// src/primitive/floor/Floor.ts
|
|
907
|
-
var
|
|
908
|
-
|
|
1394
|
+
var import_three10 = require("three");
|
|
1395
|
+
init_VisibilityLayerMask();
|
|
1396
|
+
var DIVEFloor = class extends import_three10.Mesh {
|
|
909
1397
|
constructor() {
|
|
910
|
-
super(new
|
|
1398
|
+
super(new import_three10.PlaneGeometry(1e4, 1e4), new import_three10.MeshStandardMaterial({ color: new import_three10.Color(150 / 255, 150 / 255, 150 / 255) }));
|
|
911
1399
|
this.isFloor = true;
|
|
912
1400
|
this.name = "Floor";
|
|
913
1401
|
this.layers.mask = PRODUCT_LAYER_MASK;
|
|
@@ -918,7 +1406,7 @@ var DIVEFloor = class extends import_three9.Mesh {
|
|
|
918
1406
|
this.visible = visible;
|
|
919
1407
|
}
|
|
920
1408
|
SetColor(color) {
|
|
921
|
-
this.material.color = new
|
|
1409
|
+
this.material.color = new import_three10.Color(color);
|
|
922
1410
|
}
|
|
923
1411
|
};
|
|
924
1412
|
|
|
@@ -927,20 +1415,24 @@ var GRID_CENTER_LINE_COLOR = "#888888";
|
|
|
927
1415
|
var GRID_SIDE_LINE_COLOR = "#dddddd";
|
|
928
1416
|
|
|
929
1417
|
// src/grid/Grid.ts
|
|
930
|
-
|
|
931
|
-
var
|
|
1418
|
+
init_VisibilityLayerMask();
|
|
1419
|
+
var import_three11 = require("three");
|
|
1420
|
+
var DIVEGrid = class extends import_three11.Object3D {
|
|
932
1421
|
constructor() {
|
|
933
1422
|
super();
|
|
934
1423
|
this.name = "Grid";
|
|
935
|
-
const grid = new
|
|
1424
|
+
const grid = new import_three11.GridHelper(100, 100, GRID_CENTER_LINE_COLOR, GRID_SIDE_LINE_COLOR);
|
|
936
1425
|
grid.material.depthTest = false;
|
|
937
1426
|
grid.layers.mask = HELPER_LAYER_MASK;
|
|
938
1427
|
this.add(grid);
|
|
939
1428
|
}
|
|
1429
|
+
SetVisibility(visible) {
|
|
1430
|
+
this.visible = visible;
|
|
1431
|
+
}
|
|
940
1432
|
};
|
|
941
1433
|
|
|
942
1434
|
// src/scene/root/Root.ts
|
|
943
|
-
var DIVERoot = class extends
|
|
1435
|
+
var DIVERoot = class extends import_three12.Object3D {
|
|
944
1436
|
get Floor() {
|
|
945
1437
|
return this.floor;
|
|
946
1438
|
}
|
|
@@ -959,6 +1451,15 @@ var DIVERoot = class extends import_three11.Object3D {
|
|
|
959
1451
|
this.grid = new DIVEGrid();
|
|
960
1452
|
this.add(this.grid);
|
|
961
1453
|
}
|
|
1454
|
+
ComputeSceneBB() {
|
|
1455
|
+
const bb = new import_three12.Box3();
|
|
1456
|
+
this.modelRoot.traverse((object) => {
|
|
1457
|
+
if ("isObject3D" in object) {
|
|
1458
|
+
bb.expandByObject(object);
|
|
1459
|
+
}
|
|
1460
|
+
});
|
|
1461
|
+
return bb;
|
|
1462
|
+
}
|
|
962
1463
|
GetSceneObject(object) {
|
|
963
1464
|
switch (object.entityType) {
|
|
964
1465
|
case "pov": {
|
|
@@ -1023,17 +1524,21 @@ var DIVERoot = class extends import_three11.Object3D {
|
|
|
1023
1524
|
};
|
|
1024
1525
|
|
|
1025
1526
|
// src/scene/Scene.ts
|
|
1026
|
-
var DIVEScene = class extends
|
|
1527
|
+
var DIVEScene = class extends import_three13.Scene {
|
|
1027
1528
|
get Root() {
|
|
1028
1529
|
return this.root;
|
|
1029
1530
|
}
|
|
1030
1531
|
constructor() {
|
|
1031
1532
|
super();
|
|
1533
|
+
this.background = new import_three13.Color(16777215);
|
|
1032
1534
|
this.root = new DIVERoot();
|
|
1033
1535
|
this.add(this.root);
|
|
1034
1536
|
}
|
|
1035
1537
|
SetBackground(color) {
|
|
1036
|
-
this.background = new
|
|
1538
|
+
this.background = new import_three13.Color(color);
|
|
1539
|
+
}
|
|
1540
|
+
ComputeSceneBB() {
|
|
1541
|
+
return this.Root.ComputeSceneBB();
|
|
1037
1542
|
}
|
|
1038
1543
|
GetSceneObject(object) {
|
|
1039
1544
|
return this.Root.GetSceneObject(object);
|
|
@@ -1052,42 +1557,18 @@ var DIVEScene = class extends import_three12.Scene {
|
|
|
1052
1557
|
}
|
|
1053
1558
|
};
|
|
1054
1559
|
|
|
1055
|
-
// src/
|
|
1056
|
-
|
|
1057
|
-
var DIVEPerspectiveCameraDefaultSettings = {
|
|
1058
|
-
fov: 80,
|
|
1059
|
-
near: 0.1,
|
|
1060
|
-
far: 1e3
|
|
1061
|
-
};
|
|
1062
|
-
var _DIVEPerspectiveCamera = class _DIVEPerspectiveCamera extends import_three13.PerspectiveCamera {
|
|
1063
|
-
constructor(settings = DIVEPerspectiveCameraDefaultSettings) {
|
|
1064
|
-
super(settings.fov, 1, settings.near, settings.far);
|
|
1065
|
-
this.onSetCameraLayer = () => {
|
|
1066
|
-
};
|
|
1067
|
-
this.layers.mask = _DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
1068
|
-
}
|
|
1069
|
-
OnResize(width, height) {
|
|
1070
|
-
this.aspect = width / height;
|
|
1071
|
-
this.updateProjectionMatrix();
|
|
1072
|
-
}
|
|
1073
|
-
SetCameraLayer(layer) {
|
|
1074
|
-
this.layers.mask = layer === "LIVE" ? _DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK : _DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
1075
|
-
this.onSetCameraLayer(this.layers.mask);
|
|
1076
|
-
}
|
|
1077
|
-
};
|
|
1078
|
-
_DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK = DEFAULT_LAYER_MASK | UI_LAYER_MASK | HELPER_LAYER_MASK | PRODUCT_LAYER_MASK;
|
|
1079
|
-
_DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK = PRODUCT_LAYER_MASK;
|
|
1080
|
-
var DIVEPerspectiveCamera = _DIVEPerspectiveCamera;
|
|
1560
|
+
// src/dive.ts
|
|
1561
|
+
init_PerspectiveCamera();
|
|
1081
1562
|
|
|
1082
1563
|
// src/controls/OrbitControls.ts
|
|
1083
|
-
var
|
|
1564
|
+
var import_Addons3 = require("three/examples/jsm/Addons.js");
|
|
1084
1565
|
var import_three14 = require("three");
|
|
1085
1566
|
var import_tween = require("@tweenjs/tween.js");
|
|
1086
1567
|
var DIVEOrbitControlsDefaultSettings = {
|
|
1087
1568
|
enableDamping: true,
|
|
1088
1569
|
dampingFactor: 0.04
|
|
1089
1570
|
};
|
|
1090
|
-
var _DIVEOrbitControls = class _DIVEOrbitControls extends
|
|
1571
|
+
var _DIVEOrbitControls = class _DIVEOrbitControls extends import_Addons3.OrbitControls {
|
|
1091
1572
|
constructor(camera, renderer, settings = DIVEOrbitControlsDefaultSettings) {
|
|
1092
1573
|
super(camera, renderer.domElement);
|
|
1093
1574
|
this.last = null;
|
|
@@ -1109,6 +1590,16 @@ var _DIVEOrbitControls = class _DIVEOrbitControls extends import_Addons2.OrbitCo
|
|
|
1109
1590
|
this.enableDamping = settings.enableDamping;
|
|
1110
1591
|
this.dampingFactor = settings.dampingFactor;
|
|
1111
1592
|
}
|
|
1593
|
+
ComputeEncompassingView(bb) {
|
|
1594
|
+
const center = bb.getCenter(new import_three14.Vector3());
|
|
1595
|
+
const size = bb.getSize(new import_three14.Vector3());
|
|
1596
|
+
const distance = Math.max(size.x, size.y, size.z) * 1.25;
|
|
1597
|
+
const direction = this.object.position.clone().normalize();
|
|
1598
|
+
return {
|
|
1599
|
+
position: direction.multiplyScalar(distance),
|
|
1600
|
+
target: center
|
|
1601
|
+
};
|
|
1602
|
+
}
|
|
1112
1603
|
ZoomIn(by) {
|
|
1113
1604
|
const zoomBy = by || _DIVEOrbitControls.DEFAULT_ZOOM_FACTOR;
|
|
1114
1605
|
const { minDistance, maxDistance } = this;
|
|
@@ -1169,394 +1660,40 @@ var _DIVEOrbitControls = class _DIVEOrbitControls extends import_Addons2.OrbitCo
|
|
|
1169
1660
|
_DIVEOrbitControls.DEFAULT_ZOOM_FACTOR = 1;
|
|
1170
1661
|
var DIVEOrbitControls = _DIVEOrbitControls;
|
|
1171
1662
|
|
|
1172
|
-
// src/
|
|
1173
|
-
var
|
|
1174
|
-
|
|
1175
|
-
this.
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
}
|
|
1179
|
-
GenerateMedia(position, target, width, height) {
|
|
1180
|
-
const resetPosition = this.controller.object.position.clone();
|
|
1181
|
-
const resetRotation = this.controller.object.quaternion.clone();
|
|
1182
|
-
this.renderer.OnResize(width, height);
|
|
1183
|
-
this.controller.object.OnResize(width, height);
|
|
1184
|
-
this.controller.object.position.copy(position);
|
|
1185
|
-
this.controller.target.copy(target);
|
|
1186
|
-
this.controller.update();
|
|
1187
|
-
const dataUri = this.DrawCanvas().toDataURL();
|
|
1188
|
-
this.controller.object.position.copy(resetPosition);
|
|
1189
|
-
this.controller.object.quaternion.copy(resetRotation);
|
|
1190
|
-
return dataUri;
|
|
1191
|
-
}
|
|
1192
|
-
DrawCanvas(canvasElement) {
|
|
1193
|
-
const restore = this.renderer.domElement;
|
|
1194
|
-
if (canvasElement) {
|
|
1195
|
-
this.renderer.domElement = canvasElement;
|
|
1196
|
-
}
|
|
1197
|
-
this.controller.object.layers.mask = DIVEPerspectiveCamera.LIVE_VIEW_LAYER_MASK;
|
|
1198
|
-
this.renderer.render(this.scene, this.controller.object);
|
|
1199
|
-
this.controller.object.layers.mask = DIVEPerspectiveCamera.EDITOR_VIEW_LAYER_MASK;
|
|
1200
|
-
const returnCanvas = this.renderer.domElement;
|
|
1201
|
-
if (canvasElement) {
|
|
1202
|
-
this.renderer.domElement = restore;
|
|
1663
|
+
// src/toolbox/Toolbox.ts
|
|
1664
|
+
var DIVEToolbox = class {
|
|
1665
|
+
get selectTool() {
|
|
1666
|
+
if (!this._selectTool) {
|
|
1667
|
+
const DIVESelectTool2 = (init_SelectTool(), __toCommonJS(SelectTool_exports)).DIVESelectTool;
|
|
1668
|
+
this._selectTool = new DIVESelectTool2(this._scene, this._controller);
|
|
1203
1669
|
}
|
|
1204
|
-
return
|
|
1205
|
-
}
|
|
1206
|
-
};
|
|
1207
|
-
|
|
1208
|
-
// src/interface/Selectable.ts
|
|
1209
|
-
function isSelectable(object) {
|
|
1210
|
-
return "isSelectable" in object;
|
|
1211
|
-
}
|
|
1212
|
-
|
|
1213
|
-
// src/toolbox/BaseTool.ts
|
|
1214
|
-
var import_three15 = require("three");
|
|
1215
|
-
|
|
1216
|
-
// src/interface/Draggable.ts
|
|
1217
|
-
var isDraggable = (object) => {
|
|
1218
|
-
return "isDraggable" in object;
|
|
1219
|
-
};
|
|
1220
|
-
var findDraggableInterface = (child) => {
|
|
1221
|
-
if (child === void 0) return void 0;
|
|
1222
|
-
if (child.parent === null) {
|
|
1223
|
-
return void 0;
|
|
1670
|
+
return this._selectTool;
|
|
1224
1671
|
}
|
|
1225
|
-
if (isDraggable(child)) {
|
|
1226
|
-
return child;
|
|
1227
|
-
}
|
|
1228
|
-
return findDraggableInterface(child.parent);
|
|
1229
|
-
};
|
|
1230
|
-
|
|
1231
|
-
// src/interface/Hoverable.ts
|
|
1232
|
-
var isHoverable = (object) => {
|
|
1233
|
-
return "isHoverable" in object;
|
|
1234
|
-
};
|
|
1235
|
-
var findHoverableInterface = (child) => {
|
|
1236
|
-
if (child === void 0) return void 0;
|
|
1237
|
-
if (child.parent === null) {
|
|
1238
|
-
return void 0;
|
|
1239
|
-
}
|
|
1240
|
-
if (isHoverable(child)) {
|
|
1241
|
-
return child;
|
|
1242
|
-
}
|
|
1243
|
-
return findHoverableInterface(child.parent);
|
|
1244
|
-
};
|
|
1245
|
-
|
|
1246
|
-
// src/toolbox/BaseTool.ts
|
|
1247
|
-
var DIVEBaseTool = class {
|
|
1248
1672
|
constructor(scene, controller) {
|
|
1249
|
-
this.POINTER_DRAG_THRESHOLD = 1e-3;
|
|
1250
|
-
this.name = "BaseTool";
|
|
1251
|
-
this._canvas = controller.domElement;
|
|
1252
1673
|
this._scene = scene;
|
|
1253
1674
|
this._controller = controller;
|
|
1254
|
-
this.
|
|
1255
|
-
this.
|
|
1256
|
-
this._pointerMiddleDown = false;
|
|
1257
|
-
this._pointerSecondaryDown = false;
|
|
1258
|
-
this._lastPointerDown = new import_three15.Vector2();
|
|
1259
|
-
this._lastPointerUp = new import_three15.Vector2();
|
|
1260
|
-
this._raycaster = new import_three15.Raycaster();
|
|
1261
|
-
this._raycaster.layers.mask = PRODUCT_LAYER_MASK | UI_LAYER_MASK;
|
|
1262
|
-
this._intersects = [];
|
|
1263
|
-
this._hovered = null;
|
|
1264
|
-
this._dragging = false;
|
|
1265
|
-
this._dragStart = new import_three15.Vector3();
|
|
1266
|
-
this._dragCurrent = new import_three15.Vector3();
|
|
1267
|
-
this._dragEnd = new import_three15.Vector3();
|
|
1268
|
-
this._dragDelta = new import_three15.Vector3();
|
|
1269
|
-
this._draggable = null;
|
|
1270
|
-
this._dragRaycastOnObjects = null;
|
|
1271
|
-
}
|
|
1272
|
-
get _pointerAnyDown() {
|
|
1273
|
-
return this._pointerPrimaryDown || this._pointerMiddleDown || this._pointerSecondaryDown;
|
|
1274
|
-
}
|
|
1275
|
-
Activate() {
|
|
1276
|
-
}
|
|
1277
|
-
Deactivate() {
|
|
1278
|
-
}
|
|
1279
|
-
onPointerDown(e) {
|
|
1280
|
-
var _a;
|
|
1281
|
-
switch (e.button) {
|
|
1282
|
-
case 0:
|
|
1283
|
-
this._pointerPrimaryDown = true;
|
|
1284
|
-
break;
|
|
1285
|
-
case 1:
|
|
1286
|
-
this._pointerMiddleDown = true;
|
|
1287
|
-
break;
|
|
1288
|
-
case 2:
|
|
1289
|
-
this._pointerSecondaryDown = true;
|
|
1290
|
-
break;
|
|
1291
|
-
}
|
|
1292
|
-
this._lastPointerDown.copy(this._pointer);
|
|
1293
|
-
this._draggable = findDraggableInterface((_a = this._intersects[0]) == null ? void 0 : _a.object) || null;
|
|
1294
|
-
}
|
|
1295
|
-
onDragStart(e) {
|
|
1296
|
-
if (!this._draggable) return;
|
|
1297
|
-
if (this._dragRaycastOnObjects !== null) {
|
|
1298
|
-
this._intersects = this._raycaster.intersectObjects(this._dragRaycastOnObjects, true);
|
|
1299
|
-
}
|
|
1300
|
-
if (this._intersects.length === 0) return;
|
|
1301
|
-
this._dragStart.copy(this._intersects[0].point.clone());
|
|
1302
|
-
this._dragCurrent.copy(this._intersects[0].point.clone());
|
|
1303
|
-
this._dragEnd.copy(this._dragStart.clone());
|
|
1304
|
-
this._dragDelta.set(0, 0, 0);
|
|
1305
|
-
if (this._draggable && this._draggable.onDragStart) {
|
|
1306
|
-
this._draggable.onDragStart({
|
|
1307
|
-
dragStart: this._dragStart,
|
|
1308
|
-
dragCurrent: this._dragCurrent,
|
|
1309
|
-
dragEnd: this._dragEnd,
|
|
1310
|
-
dragDelta: this._dragDelta
|
|
1311
|
-
});
|
|
1312
|
-
this._dragging = true;
|
|
1313
|
-
this._controller.enabled = false;
|
|
1314
|
-
}
|
|
1315
|
-
}
|
|
1316
|
-
onPointerMove(e) {
|
|
1317
|
-
var _a;
|
|
1318
|
-
this._pointer.x = e.offsetX / this._canvas.clientWidth * 2 - 1;
|
|
1319
|
-
this._pointer.y = -(e.offsetY / this._canvas.clientHeight) * 2 + 1;
|
|
1320
|
-
this._raycaster.setFromCamera(this._pointer, this._controller.object);
|
|
1321
|
-
this._intersects = this.raycast(this._scene.children);
|
|
1322
|
-
const hoverable = findHoverableInterface((_a = this._intersects[0]) == null ? void 0 : _a.object);
|
|
1323
|
-
if (this._intersects[0] && hoverable) {
|
|
1324
|
-
if (!this._hovered) {
|
|
1325
|
-
if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
|
|
1326
|
-
this._hovered = hoverable;
|
|
1327
|
-
return;
|
|
1328
|
-
}
|
|
1329
|
-
if (this._hovered.uuid !== hoverable.uuid) {
|
|
1330
|
-
if (this._hovered.onPointerLeave) this._hovered.onPointerLeave();
|
|
1331
|
-
if (hoverable.onPointerEnter) hoverable.onPointerEnter(this._intersects[0]);
|
|
1332
|
-
this._hovered = hoverable;
|
|
1333
|
-
return;
|
|
1334
|
-
}
|
|
1335
|
-
if (hoverable.onPointerOver) hoverable.onPointerOver(this._intersects[0]);
|
|
1336
|
-
this._hovered = hoverable;
|
|
1337
|
-
} else {
|
|
1338
|
-
if (this._hovered) {
|
|
1339
|
-
if (this._hovered.onPointerLeave) this._hovered.onPointerLeave();
|
|
1340
|
-
}
|
|
1341
|
-
this._hovered = null;
|
|
1342
|
-
}
|
|
1343
|
-
if (this._pointerAnyDown) {
|
|
1344
|
-
if (!this._dragging) {
|
|
1345
|
-
this.onDragStart(e);
|
|
1346
|
-
}
|
|
1347
|
-
this.onDrag(e);
|
|
1348
|
-
}
|
|
1349
|
-
}
|
|
1350
|
-
onDrag(e) {
|
|
1351
|
-
if (this._dragRaycastOnObjects !== null) {
|
|
1352
|
-
this._intersects = this._raycaster.intersectObjects(this._dragRaycastOnObjects, true);
|
|
1353
|
-
}
|
|
1354
|
-
const intersect = this._intersects[0];
|
|
1355
|
-
if (!intersect) return;
|
|
1356
|
-
this._dragCurrent.copy(intersect.point.clone());
|
|
1357
|
-
this._dragEnd.copy(intersect.point.clone());
|
|
1358
|
-
this._dragDelta.subVectors(this._dragCurrent.clone(), this._dragStart.clone());
|
|
1359
|
-
if (this._draggable && this._draggable.onDrag) {
|
|
1360
|
-
this._draggable.onDrag({
|
|
1361
|
-
dragStart: this._dragStart,
|
|
1362
|
-
dragCurrent: this._dragCurrent,
|
|
1363
|
-
dragEnd: this._dragEnd,
|
|
1364
|
-
dragDelta: this._dragDelta
|
|
1365
|
-
});
|
|
1366
|
-
}
|
|
1367
|
-
}
|
|
1368
|
-
onPointerUp(e) {
|
|
1369
|
-
if (this.pointerWasDragged() || this._dragging) {
|
|
1370
|
-
if (this._draggable) {
|
|
1371
|
-
this.onDragEnd(e);
|
|
1372
|
-
}
|
|
1373
|
-
} else {
|
|
1374
|
-
this.onClick(e);
|
|
1375
|
-
}
|
|
1376
|
-
switch (e.button) {
|
|
1377
|
-
case 0:
|
|
1378
|
-
this._pointerPrimaryDown = false;
|
|
1379
|
-
break;
|
|
1380
|
-
case 1:
|
|
1381
|
-
this._pointerMiddleDown = false;
|
|
1382
|
-
break;
|
|
1383
|
-
case 2:
|
|
1384
|
-
this._pointerSecondaryDown = false;
|
|
1385
|
-
break;
|
|
1386
|
-
}
|
|
1387
|
-
this._lastPointerUp.copy(this._pointer);
|
|
1388
|
-
}
|
|
1389
|
-
onClick(e) {
|
|
1675
|
+
this._selectTool = null;
|
|
1676
|
+
this._activeTool = null;
|
|
1390
1677
|
}
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
if (intersect) {
|
|
1394
|
-
this._dragEnd.copy(intersect.point.clone());
|
|
1395
|
-
this._dragCurrent.copy(intersect.point.clone());
|
|
1396
|
-
this._dragDelta.subVectors(this._dragCurrent.clone(), this._dragStart.clone());
|
|
1397
|
-
}
|
|
1398
|
-
if (this._draggable && this._draggable.onDragEnd) {
|
|
1399
|
-
this._draggable.onDragEnd({
|
|
1400
|
-
dragStart: this._dragStart,
|
|
1401
|
-
dragCurrent: this._dragCurrent,
|
|
1402
|
-
dragEnd: this._dragEnd,
|
|
1403
|
-
dragDelta: this._dragDelta
|
|
1404
|
-
});
|
|
1405
|
-
}
|
|
1406
|
-
this._draggable = null;
|
|
1407
|
-
this._dragging = false;
|
|
1408
|
-
this._dragStart.set(0, 0, 0);
|
|
1409
|
-
this._dragCurrent.set(0, 0, 0);
|
|
1410
|
-
this._dragEnd.set(0, 0, 0);
|
|
1411
|
-
this._dragDelta.set(0, 0, 0);
|
|
1412
|
-
this._controller.enabled = true;
|
|
1413
|
-
}
|
|
1414
|
-
onWheel(e) {
|
|
1415
|
-
}
|
|
1416
|
-
raycast(objects) {
|
|
1417
|
-
if (objects !== void 0) return this._raycaster.intersectObjects(objects, true).filter((i) => i.object.visible);
|
|
1418
|
-
return this._raycaster.intersectObjects(this._scene.children, true).filter((i) => i.object.visible);
|
|
1419
|
-
}
|
|
1420
|
-
pointerWasDragged() {
|
|
1421
|
-
return this._lastPointerDown.distanceTo(this._pointer) > this.POINTER_DRAG_THRESHOLD;
|
|
1422
|
-
}
|
|
1423
|
-
};
|
|
1424
|
-
|
|
1425
|
-
// src/toolbox/transform/TransformTool.ts
|
|
1426
|
-
var import_Addons3 = require("three/examples/jsm/Addons");
|
|
1427
|
-
var DIVETransformTool = class extends DIVEBaseTool {
|
|
1428
|
-
constructor(scene, controller) {
|
|
1429
|
-
super(scene, controller);
|
|
1430
|
-
this.name = "DIVETransformTool";
|
|
1431
|
-
this._gizmo = new import_Addons3.TransformControls(this._controller.object, this._controller.domElement);
|
|
1432
|
-
this._gizmo.mode = "translate";
|
|
1433
|
-
this._gizmo.addEventListener("mouseDown", () => {
|
|
1434
|
-
controller.enabled = false;
|
|
1435
|
-
});
|
|
1436
|
-
this._gizmo.addEventListener("mouseUp", () => {
|
|
1437
|
-
controller.enabled = true;
|
|
1438
|
-
});
|
|
1439
|
-
this._gizmo.addEventListener("objectChange", () => {
|
|
1440
|
-
if (!this._gizmo.object) return;
|
|
1441
|
-
if (!("isMoveable" in this._gizmo.object)) return;
|
|
1442
|
-
if (!("onMove" in this._gizmo.object)) return;
|
|
1443
|
-
this._gizmo.object.onMove();
|
|
1444
|
-
});
|
|
1445
|
-
scene.add(this._gizmo);
|
|
1446
|
-
}
|
|
1447
|
-
Activate() {
|
|
1448
|
-
}
|
|
1449
|
-
SetGizmoMode(mode) {
|
|
1450
|
-
this._gizmo.mode = mode;
|
|
1451
|
-
}
|
|
1452
|
-
SetGizmoVisibility(active) {
|
|
1453
|
-
const contains = this._scene.children.includes(this._gizmo);
|
|
1454
|
-
if (active && !contains) {
|
|
1455
|
-
this._scene.add(this._gizmo);
|
|
1456
|
-
} else if (!active && contains) {
|
|
1457
|
-
this._scene.remove(this._gizmo);
|
|
1458
|
-
}
|
|
1459
|
-
}
|
|
1460
|
-
// public onPointerDown(e: PointerEvent): void {
|
|
1461
|
-
// super.onPointerDown(e);
|
|
1462
|
-
// // if (this._hovered) {
|
|
1463
|
-
// // this._dragRaycastOnObjects = this._gizmo.gizmoPlane.children;
|
|
1464
|
-
// // }
|
|
1465
|
-
// }
|
|
1466
|
-
// protected raycast(): Intersection[] {
|
|
1467
|
-
// return super.raycast(this._gizmo.gizmoNode.children);
|
|
1468
|
-
// }
|
|
1469
|
-
};
|
|
1470
|
-
|
|
1471
|
-
// src/toolbox/select/SelectTool.ts
|
|
1472
|
-
var DIVESelectTool = class extends DIVETransformTool {
|
|
1473
|
-
constructor(scene, controller) {
|
|
1474
|
-
super(scene, controller);
|
|
1475
|
-
this.name = "SelectTool";
|
|
1476
|
-
}
|
|
1477
|
-
Activate() {
|
|
1478
|
-
}
|
|
1479
|
-
Select(selectable) {
|
|
1480
|
-
if (selectable.onSelect) selectable.onSelect();
|
|
1481
|
-
this.AttachGizmo(selectable);
|
|
1482
|
-
}
|
|
1483
|
-
Deselect(selectable) {
|
|
1484
|
-
if (selectable.onDeselect) selectable.onDeselect();
|
|
1485
|
-
this.DetachGizmo();
|
|
1486
|
-
}
|
|
1487
|
-
DetachGizmo() {
|
|
1488
|
-
this._gizmo.detach();
|
|
1489
|
-
}
|
|
1490
|
-
AttachGizmo(selectable) {
|
|
1491
|
-
if ("isMoveable" in selectable) {
|
|
1492
|
-
const movable = selectable;
|
|
1493
|
-
this._gizmo.attach(movable);
|
|
1494
|
-
this.SetGizmoVisibility(movable.visible);
|
|
1495
|
-
}
|
|
1496
|
-
}
|
|
1497
|
-
onClick(e) {
|
|
1498
|
-
super.onClick(e);
|
|
1499
|
-
const first = this._raycaster.intersectObjects(this._scene.Root.children, true).filter((intersect) => intersect.object.visible)[0];
|
|
1500
|
-
const selectable = this.findSelectableInterface(first == null ? void 0 : first.object);
|
|
1501
|
-
if (!first || !selectable) {
|
|
1502
|
-
if (this._gizmo.object) {
|
|
1503
|
-
this.Deselect(this._gizmo.object);
|
|
1504
|
-
}
|
|
1505
|
-
return;
|
|
1506
|
-
}
|
|
1507
|
-
if (this._gizmo.object) {
|
|
1508
|
-
if (this._gizmo.object.uuid === selectable.uuid) return;
|
|
1509
|
-
this.Deselect(this._gizmo.object);
|
|
1510
|
-
}
|
|
1511
|
-
this.Select(selectable);
|
|
1512
|
-
}
|
|
1513
|
-
findSelectableInterface(child) {
|
|
1514
|
-
if (child === void 0) return void 0;
|
|
1515
|
-
if (child.parent === null) {
|
|
1516
|
-
return void 0;
|
|
1517
|
-
}
|
|
1518
|
-
if (isSelectable(child)) {
|
|
1519
|
-
return child;
|
|
1520
|
-
}
|
|
1521
|
-
return this.findSelectableInterface(child.parent);
|
|
1522
|
-
}
|
|
1523
|
-
};
|
|
1524
|
-
|
|
1525
|
-
// src/toolbox/Toolbox.ts
|
|
1526
|
-
var DIVEToolbox = class {
|
|
1527
|
-
constructor(scene, controller) {
|
|
1528
|
-
this.removeListenersCallback = () => {
|
|
1529
|
-
};
|
|
1530
|
-
this.selectTool = new DIVESelectTool(scene, controller);
|
|
1531
|
-
const pointerMove = this.onPointerMove.bind(this);
|
|
1532
|
-
const pointerDown = this.onPointerDown.bind(this);
|
|
1533
|
-
const pointerUp = this.onPointerUp.bind(this);
|
|
1534
|
-
const wheel = this.onWheel.bind(this);
|
|
1535
|
-
controller.domElement.addEventListener("pointermove", pointerMove);
|
|
1536
|
-
controller.domElement.addEventListener("pointerdown", pointerDown);
|
|
1537
|
-
controller.domElement.addEventListener("pointerup", pointerUp);
|
|
1538
|
-
controller.domElement.addEventListener("wheel", wheel);
|
|
1539
|
-
this.removeListenersCallback = () => {
|
|
1540
|
-
controller.domElement.removeEventListener("pointermove", pointerMove);
|
|
1541
|
-
controller.domElement.removeEventListener("pointerdown", pointerDown);
|
|
1542
|
-
controller.domElement.removeEventListener("pointerup", pointerUp);
|
|
1543
|
-
controller.domElement.removeEventListener("wheel", wheel);
|
|
1544
|
-
};
|
|
1545
|
-
this.activeTool = this.selectTool;
|
|
1546
|
-
this.activeTool.Activate();
|
|
1547
|
-
}
|
|
1548
|
-
dispose() {
|
|
1549
|
-
this.removeListenersCallback();
|
|
1678
|
+
Dispose() {
|
|
1679
|
+
this.removeEventListeners();
|
|
1550
1680
|
}
|
|
1551
1681
|
GetActiveTool() {
|
|
1552
|
-
return this.
|
|
1682
|
+
return this._activeTool;
|
|
1553
1683
|
}
|
|
1554
1684
|
UseTool(tool) {
|
|
1555
|
-
|
|
1685
|
+
var _a;
|
|
1686
|
+
(_a = this._activeTool) == null ? void 0 : _a.Deactivate();
|
|
1556
1687
|
switch (tool) {
|
|
1557
1688
|
case "select": {
|
|
1689
|
+
this.addEventListeners();
|
|
1558
1690
|
this.selectTool.Activate();
|
|
1559
|
-
this.
|
|
1691
|
+
this._activeTool = this.selectTool;
|
|
1692
|
+
break;
|
|
1693
|
+
}
|
|
1694
|
+
case "none": {
|
|
1695
|
+
this.removeEventListeners();
|
|
1696
|
+
this._activeTool = null;
|
|
1560
1697
|
break;
|
|
1561
1698
|
}
|
|
1562
1699
|
default: {
|
|
@@ -1571,31 +1708,40 @@ var DIVEToolbox = class {
|
|
|
1571
1708
|
this.selectTool.SetGizmoVisibility(active);
|
|
1572
1709
|
}
|
|
1573
1710
|
onPointerMove(e) {
|
|
1574
|
-
|
|
1711
|
+
var _a;
|
|
1712
|
+
(_a = this._activeTool) == null ? void 0 : _a.onPointerMove(e);
|
|
1575
1713
|
}
|
|
1576
1714
|
onPointerDown(e) {
|
|
1577
|
-
|
|
1715
|
+
var _a;
|
|
1716
|
+
(_a = this._activeTool) == null ? void 0 : _a.onPointerDown(e);
|
|
1578
1717
|
}
|
|
1579
1718
|
onPointerUp(e) {
|
|
1580
|
-
|
|
1719
|
+
var _a;
|
|
1720
|
+
(_a = this._activeTool) == null ? void 0 : _a.onPointerUp(e);
|
|
1581
1721
|
}
|
|
1582
1722
|
onWheel(e) {
|
|
1583
|
-
|
|
1723
|
+
var _a;
|
|
1724
|
+
(_a = this._activeTool) == null ? void 0 : _a.onWheel(e);
|
|
1584
1725
|
}
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
(
|
|
1726
|
+
addEventListeners() {
|
|
1727
|
+
this._controller.domElement.addEventListener("pointermove", (e) => this.onPointerMove(e));
|
|
1728
|
+
this._controller.domElement.addEventListener("pointerdown", (e) => this.onPointerDown(e));
|
|
1729
|
+
this._controller.domElement.addEventListener("pointerup", (e) => this.onPointerUp(e));
|
|
1730
|
+
this._controller.domElement.addEventListener("wheel", (e) => this.onWheel(e));
|
|
1731
|
+
}
|
|
1732
|
+
removeEventListeners() {
|
|
1733
|
+
this._controller.domElement.removeEventListener("pointermove", (e) => this.onPointerMove(e));
|
|
1734
|
+
this._controller.domElement.removeEventListener("pointerdown", (e) => this.onPointerDown(e));
|
|
1735
|
+
this._controller.domElement.removeEventListener("pointerup", (e) => this.onPointerUp(e));
|
|
1736
|
+
this._controller.domElement.removeEventListener("wheel", (e) => this.onWheel(e));
|
|
1593
1737
|
}
|
|
1594
1738
|
};
|
|
1739
|
+
DIVEToolbox.DefaultTool = "select";
|
|
1595
1740
|
|
|
1596
1741
|
// src/axiscamera/AxisCamera.ts
|
|
1597
|
-
var
|
|
1742
|
+
var import_three15 = require("three");
|
|
1598
1743
|
var import_three_spritetext = __toESM(require("three-spritetext"), 1);
|
|
1744
|
+
init_VisibilityLayerMask();
|
|
1599
1745
|
|
|
1600
1746
|
// src/constant/AxisHelperColors.ts
|
|
1601
1747
|
var AxesColorRedLetter = "#c20017";
|
|
@@ -1606,18 +1752,18 @@ var AxesColorGreen = AxesColorGreenLetter;
|
|
|
1606
1752
|
var AxesColorBlue = AxesColorBlueLetter;
|
|
1607
1753
|
|
|
1608
1754
|
// src/axiscamera/AxisCamera.ts
|
|
1609
|
-
var DIVEAxisCamera = class extends
|
|
1610
|
-
constructor() {
|
|
1755
|
+
var DIVEAxisCamera = class extends import_three15.OrthographicCamera {
|
|
1756
|
+
constructor(renderer, scene, controls) {
|
|
1611
1757
|
super(-1, 1, 1, -1, 0.1, 100);
|
|
1612
1758
|
this.layers.mask = COORDINATE_LAYER_MASK;
|
|
1613
|
-
this.axesHelper = new
|
|
1759
|
+
this.axesHelper = new import_three15.AxesHelper(0.5);
|
|
1614
1760
|
this.axesHelper.layers.mask = COORDINATE_LAYER_MASK;
|
|
1615
1761
|
this.axesHelper.material.depthTest = false;
|
|
1616
1762
|
this.axesHelper.position.set(0, 0, -1);
|
|
1617
1763
|
this.axesHelper.setColors(
|
|
1618
|
-
new
|
|
1619
|
-
new
|
|
1620
|
-
new
|
|
1764
|
+
new import_three15.Color(AxesColorRed),
|
|
1765
|
+
new import_three15.Color(AxesColorGreen),
|
|
1766
|
+
new import_three15.Color(AxesColorBlue)
|
|
1621
1767
|
);
|
|
1622
1768
|
const x = new import_three_spritetext.default("X", 0.2, AxesColorRedLetter);
|
|
1623
1769
|
const y = new import_three_spritetext.default("Y", 0.2, AxesColorGreenLetter);
|
|
@@ -1632,9 +1778,29 @@ var DIVEAxisCamera = class extends import_three16.OrthographicCamera {
|
|
|
1632
1778
|
this.axesHelper.add(y);
|
|
1633
1779
|
this.axesHelper.add(z);
|
|
1634
1780
|
this.add(this.axesHelper);
|
|
1781
|
+
this._renderer = renderer;
|
|
1782
|
+
this._scene = scene;
|
|
1783
|
+
this._scene.add(this);
|
|
1784
|
+
const restoreViewport = new import_three15.Vector4();
|
|
1785
|
+
this._renderCallbackId = renderer.AddPostRenderCallback(() => {
|
|
1786
|
+
const restoreBackground = scene.background;
|
|
1787
|
+
scene.background = null;
|
|
1788
|
+
renderer.getViewport(restoreViewport);
|
|
1789
|
+
renderer.setViewport(0, 0, 150, 150);
|
|
1790
|
+
renderer.autoClear = false;
|
|
1791
|
+
this.SetFromCameraMatrix(controls.object.matrix);
|
|
1792
|
+
renderer.render(scene, this);
|
|
1793
|
+
renderer.setViewport(restoreViewport);
|
|
1794
|
+
renderer.autoClear = true;
|
|
1795
|
+
scene.background = restoreBackground;
|
|
1796
|
+
});
|
|
1797
|
+
}
|
|
1798
|
+
Dispose() {
|
|
1799
|
+
this._renderer.RemovePostRenderCallback(this._renderCallbackId);
|
|
1800
|
+
this._scene.remove(this);
|
|
1635
1801
|
}
|
|
1636
1802
|
SetFromCameraMatrix(matrix) {
|
|
1637
|
-
this.axesHelper.rotation.setFromRotationMatrix(new
|
|
1803
|
+
this.axesHelper.rotation.setFromRotationMatrix(new import_three15.Matrix4().extractRotation(matrix).invert());
|
|
1638
1804
|
}
|
|
1639
1805
|
};
|
|
1640
1806
|
|
|
@@ -1751,13 +1917,63 @@ var DIVEMath = {
|
|
|
1751
1917
|
};
|
|
1752
1918
|
|
|
1753
1919
|
// src/dive.ts
|
|
1920
|
+
var import_MathUtils2 = require("three/src/math/MathUtils");
|
|
1754
1921
|
var DIVEDefaultSettings = {
|
|
1755
1922
|
autoResize: true,
|
|
1923
|
+
displayAxes: false,
|
|
1756
1924
|
renderer: DIVERendererDefaultSettings,
|
|
1757
1925
|
perspectiveCamera: DIVEPerspectiveCameraDefaultSettings,
|
|
1758
1926
|
orbitControls: DIVEOrbitControlsDefaultSettings
|
|
1759
1927
|
};
|
|
1760
|
-
var DIVE = class {
|
|
1928
|
+
var DIVE = class _DIVE {
|
|
1929
|
+
// static members
|
|
1930
|
+
static QuickView(uri) {
|
|
1931
|
+
const dive = new _DIVE();
|
|
1932
|
+
dive.Communication.PerformAction("SET_CAMERA_TRANSFORM", {
|
|
1933
|
+
position: { x: 0, y: 2, z: 2 },
|
|
1934
|
+
target: { x: 0, y: 0.5, z: 0 }
|
|
1935
|
+
});
|
|
1936
|
+
const lightid = (0, import_MathUtils2.generateUUID)();
|
|
1937
|
+
dive.Communication.PerformAction("ADD_OBJECT", {
|
|
1938
|
+
entityType: "light",
|
|
1939
|
+
type: "scene",
|
|
1940
|
+
name: "light",
|
|
1941
|
+
id: lightid,
|
|
1942
|
+
enabled: true,
|
|
1943
|
+
visible: true,
|
|
1944
|
+
intensity: 1,
|
|
1945
|
+
color: 16777215
|
|
1946
|
+
});
|
|
1947
|
+
const modelid = (0, import_MathUtils2.generateUUID)();
|
|
1948
|
+
dive.Communication.Subscribe("MODEL_LOADED", (data) => {
|
|
1949
|
+
if (data.id !== modelid) return;
|
|
1950
|
+
dive.Communication.PerformAction("PLACE_ON_FLOOR", {
|
|
1951
|
+
id: modelid
|
|
1952
|
+
});
|
|
1953
|
+
const transform = dive.Communication.PerformAction("COMPUTE_ENCOMPASSING_VIEW", {});
|
|
1954
|
+
dive.Communication.PerformAction("SET_CAMERA_TRANSFORM", {
|
|
1955
|
+
position: transform.position,
|
|
1956
|
+
target: transform.target
|
|
1957
|
+
});
|
|
1958
|
+
});
|
|
1959
|
+
dive.Communication.PerformAction("ADD_OBJECT", {
|
|
1960
|
+
entityType: "model",
|
|
1961
|
+
name: "object",
|
|
1962
|
+
id: modelid,
|
|
1963
|
+
position: { x: 0, y: 0, z: 0 },
|
|
1964
|
+
rotation: { x: 0, y: 0, z: 0 },
|
|
1965
|
+
scale: { x: 1, y: 1, z: 1 },
|
|
1966
|
+
uri,
|
|
1967
|
+
visible: true,
|
|
1968
|
+
loaded: false
|
|
1969
|
+
});
|
|
1970
|
+
dive.Communication.PerformAction("UPDATE_SCENE", {
|
|
1971
|
+
backgroundColor: 16777215,
|
|
1972
|
+
gridEnabled: false,
|
|
1973
|
+
floorColor: 16777215
|
|
1974
|
+
});
|
|
1975
|
+
return dive;
|
|
1976
|
+
}
|
|
1761
1977
|
// getters
|
|
1762
1978
|
get Communication() {
|
|
1763
1979
|
return this.communication;
|
|
@@ -1767,6 +1983,7 @@ var DIVE = class {
|
|
|
1767
1983
|
}
|
|
1768
1984
|
// setters
|
|
1769
1985
|
set Settings(settings) {
|
|
1986
|
+
var _a;
|
|
1770
1987
|
const settingsDelta = getObjectDelta(this._settings, settings);
|
|
1771
1988
|
if (settingsDelta.renderer) this.renderer = new DIVERenderer(this._settings.renderer);
|
|
1772
1989
|
if (settingsDelta.perspectiveCamera) {
|
|
@@ -1786,6 +2003,12 @@ var DIVE = class {
|
|
|
1786
2003
|
this.removeResizeObserver();
|
|
1787
2004
|
}
|
|
1788
2005
|
}
|
|
2006
|
+
if (settingsDelta.displayAxes) {
|
|
2007
|
+
this.axisCamera = new DIVEAxisCamera(this.renderer, this.scene, this.orbitControls);
|
|
2008
|
+
} else {
|
|
2009
|
+
(_a = this.axisCamera) == null ? void 0 : _a.Dispose();
|
|
2010
|
+
this.axisCamera = null;
|
|
2011
|
+
}
|
|
1789
2012
|
Object.assign(this._settings, settings);
|
|
1790
2013
|
}
|
|
1791
2014
|
constructor(settings) {
|
|
@@ -1797,28 +2020,14 @@ var DIVE = class {
|
|
|
1797
2020
|
this.scene = new DIVEScene();
|
|
1798
2021
|
this.perspectiveCamera = new DIVEPerspectiveCamera(this._settings.perspectiveCamera);
|
|
1799
2022
|
this.orbitControls = new DIVEOrbitControls(this.perspectiveCamera, this.renderer, this._settings.orbitControls);
|
|
1800
|
-
this.mediaCreator = new DIVEMediaCreator(this.renderer, this.scene, this.orbitControls);
|
|
1801
2023
|
this.toolbox = new DIVEToolbox(this.scene, this.orbitControls);
|
|
1802
|
-
this.communication = new DIVECommunication(this.
|
|
1803
|
-
this.animationSystem =
|
|
1804
|
-
this.
|
|
1805
|
-
this.
|
|
1806
|
-
}
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
const restoreViewport = new import_three17.Vector4();
|
|
1810
|
-
this.renderer.AddPostRenderCallback(() => {
|
|
1811
|
-
const restoreBackground = this.scene.background;
|
|
1812
|
-
this.scene.background = null;
|
|
1813
|
-
this.renderer.getViewport(restoreViewport);
|
|
1814
|
-
this.renderer.setViewport(0, 0, 150, 150);
|
|
1815
|
-
this.renderer.autoClear = false;
|
|
1816
|
-
this.axisCamera.SetFromCameraMatrix(this.perspectiveCamera.matrix);
|
|
1817
|
-
this.renderer.render(this.scene, this.axisCamera);
|
|
1818
|
-
this.renderer.setViewport(restoreViewport);
|
|
1819
|
-
this.renderer.autoClear = true;
|
|
1820
|
-
this.scene.background = restoreBackground;
|
|
1821
|
-
});
|
|
2024
|
+
this.communication = new DIVECommunication(this.renderer, this.scene, this.orbitControls, this.toolbox);
|
|
2025
|
+
this.animationSystem = null;
|
|
2026
|
+
if (this._settings.displayAxes) {
|
|
2027
|
+
this.axisCamera = new DIVEAxisCamera(this.renderer, this.scene, this.orbitControls);
|
|
2028
|
+
} else {
|
|
2029
|
+
this.axisCamera = null;
|
|
2030
|
+
}
|
|
1822
2031
|
if (this._settings.autoResize) {
|
|
1823
2032
|
this.addResizeObserver();
|
|
1824
2033
|
}
|
|
@@ -1829,6 +2038,14 @@ var DIVE = class {
|
|
|
1829
2038
|
}
|
|
1830
2039
|
};
|
|
1831
2040
|
}
|
|
2041
|
+
Dispose() {
|
|
2042
|
+
var _a;
|
|
2043
|
+
this.removeResizeObserver();
|
|
2044
|
+
this.renderer.Dispose();
|
|
2045
|
+
(_a = this.axisCamera) == null ? void 0 : _a.Dispose();
|
|
2046
|
+
this.toolbox.Dispose();
|
|
2047
|
+
this.communication.DestroyInstance();
|
|
2048
|
+
}
|
|
1832
2049
|
// methods
|
|
1833
2050
|
OnResize(width, height) {
|
|
1834
2051
|
this.renderer.OnResize(width, height);
|