@inweb/viewer-three 27.5.0 → 27.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.
Files changed (53) hide show
  1. package/dist/extensions/components/LightHelperComponent.js +1 -1
  2. package/dist/extensions/components/LightHelperComponent.js.map +1 -1
  3. package/dist/extensions/components/LightHelperComponent.min.js +1 -1
  4. package/dist/extensions/components/LightHelperComponent.module.js +1 -1
  5. package/dist/extensions/components/LightHelperComponent.module.js.map +1 -1
  6. package/dist/extensions/components/StatsPanelComponent.js +0 -1
  7. package/dist/extensions/components/StatsPanelComponent.js.map +1 -1
  8. package/dist/extensions/components/StatsPanelComponent.min.js +1 -1
  9. package/dist/extensions/components/StatsPanelComponent.module.js +0 -1
  10. package/dist/extensions/components/StatsPanelComponent.module.js.map +1 -1
  11. package/dist/extensions/loaders/GLTFCloudLoader.js +7 -2
  12. package/dist/extensions/loaders/GLTFCloudLoader.js.map +1 -1
  13. package/dist/extensions/loaders/GLTFCloudLoader.min.js +1 -1
  14. package/dist/extensions/loaders/GLTFCloudLoader.module.js +7 -2
  15. package/dist/extensions/loaders/GLTFCloudLoader.module.js.map +1 -1
  16. package/dist/extensions/loaders/GLTFFileLoader.js +2 -1
  17. package/dist/extensions/loaders/GLTFFileLoader.js.map +1 -1
  18. package/dist/extensions/loaders/GLTFFileLoader.min.js +1 -1
  19. package/dist/extensions/loaders/GLTFFileLoader.module.js +2 -1
  20. package/dist/extensions/loaders/GLTFFileLoader.module.js.map +1 -1
  21. package/dist/extensions/loaders/IFCXLoader.js +10 -5
  22. package/dist/extensions/loaders/IFCXLoader.js.map +1 -1
  23. package/dist/extensions/loaders/IFCXLoader.min.js +1 -1
  24. package/dist/extensions/loaders/IFCXLoader.module.js +10 -5
  25. package/dist/extensions/loaders/IFCXLoader.module.js.map +1 -1
  26. package/dist/viewer-three.js +161 -157
  27. package/dist/viewer-three.js.map +1 -1
  28. package/dist/viewer-three.min.js +3 -3
  29. package/dist/viewer-three.module.js +68 -53
  30. package/dist/viewer-three.module.js.map +1 -1
  31. package/extensions/components/LightHelperComponent.ts +1 -1
  32. package/extensions/components/StatsPanelComponent.ts +0 -1
  33. package/extensions/loaders/GLTFCloudLoader.ts +8 -2
  34. package/extensions/loaders/GLTFFileLoader.ts +3 -2
  35. package/extensions/loaders/IFCX/IFCXFileLoader.ts +11 -5
  36. package/lib/Viewer/Viewer.d.ts +1 -1
  37. package/lib/Viewer/measurement/Snapper.d.ts +1 -1
  38. package/package.json +5 -5
  39. package/src/Viewer/Viewer.ts +14 -16
  40. package/src/Viewer/commands/GetSelected2.ts +1 -1
  41. package/src/Viewer/commands/SetSelected.ts +1 -1
  42. package/src/Viewer/components/BackgroundComponent.ts +1 -1
  43. package/src/Viewer/components/CameraComponent.ts +1 -1
  44. package/src/Viewer/components/CanvasRemoveComponent.ts +0 -1
  45. package/src/Viewer/components/HighlighterUtils.ts +2 -2
  46. package/src/Viewer/components/SelectionComponent.ts +4 -2
  47. package/src/Viewer/helpers/SectionsHelper.js +4 -8
  48. package/src/Viewer/helpers/WCSHelper.ts +7 -5
  49. package/src/Viewer/loaders/DynamicGltfLoader/DynamicModelImpl.ts +19 -14
  50. package/src/Viewer/loaders/GLTFBinaryParser.ts +2 -2
  51. package/src/Viewer/loaders/GLTFFileDynamicLoader.ts +2 -2
  52. package/src/Viewer/measurement/Snapper.ts +2 -2
  53. package/src/Viewer/models/ModelImpl.ts +38 -25
@@ -95,8 +95,8 @@ export class ModelImpl implements IModelImpl {
95
95
  if (object.material) disposeMaterials(object.material);
96
96
  }
97
97
 
98
- this.handleToObjects = undefined;
99
- this.originalObjects = undefined;
98
+ this.handleToObjects.clear();
99
+ this.originalObjects.clear();
100
100
 
101
101
  this.scene.traverse(disposeObject);
102
102
  this.scene.clear();
@@ -308,7 +308,7 @@ export class ModelImpl implements IModelImpl {
308
308
  }
309
309
 
310
310
  getVisibleObjects(): Object3D[] {
311
- const objects = [];
311
+ const objects: Object3D[] = [];
312
312
  this.scene.traverseVisible((object) => object.userData.handle && objects.push(object));
313
313
  return objects;
314
314
  }
@@ -316,7 +316,7 @@ export class ModelImpl implements IModelImpl {
316
316
  getObjectsByHandles(handles: string | string[]): Object3D[] {
317
317
  if (!Array.isArray(handles)) handles = [handles];
318
318
 
319
- const ownHandles = [];
319
+ const ownHandles: string[] = [];
320
320
  handles.forEach((handle) => {
321
321
  const index = handle.indexOf(":");
322
322
  if (index !== -1) {
@@ -328,7 +328,7 @@ export class ModelImpl implements IModelImpl {
328
328
 
329
329
  const handlesSet = new Set<string>(ownHandles);
330
330
 
331
- const objects = [];
331
+ const objects: Object3D[][] = [];
332
332
  handlesSet.forEach((handle) => {
333
333
  objects.push(Array.from(this.handleToObjects.get(handle) || []));
334
334
  });
@@ -427,25 +427,40 @@ export class ModelImpl implements IModelImpl {
427
427
  return target;
428
428
  };
429
429
 
430
- function calcExplodeDepth(object: Object3D, depth: number): number {
431
- let result = depth;
430
+ const calcObjectOffset = (object: Object3D, target: Vector3): Vector3 => {
431
+ const parent = object.parent;
432
+ if (!parent || parent.userData.originalCenter === undefined) return target;
432
433
 
433
- object.children.forEach((x: Object3D) => {
434
- const objectDepth = calcExplodeDepth(x, depth + 1);
435
- if (result < objectDepth) result = objectDepth;
436
- });
434
+ return target.subVectors(object.userData.originalCenter, parent.userData.originalCenter);
435
+ };
436
+
437
+ const calcObjectDepth = (object: Object3D): number => {
438
+ if (object.userData.depth !== undefined) return object.userData.depth;
439
+
440
+ const parent = object.parent;
441
+ const depth = parent && object !== explodeRoot ? calcObjectDepth(parent) + 1 : 0;
437
442
 
443
+ object.userData.depth = depth;
438
444
  object.userData.originalPosition = object.position.clone();
439
445
  object.userData.originalCenter = calcObjectCenter(object, new Vector3());
446
+ object.userData.originalOffset = calcObjectOffset(object, new Vector3());
440
447
 
441
- return result;
442
- }
448
+ return depth;
449
+ };
443
450
 
444
451
  const explodeScale = scale / 100;
445
452
  const explodeRoot = this.scene;
453
+ const explodeObjects = this.getObjects();
454
+
455
+ if (explodeRoot.userData.explodeDepth === undefined) {
456
+ let maxDepth = 0;
446
457
 
447
- if (!explodeRoot.userData.explodeDepth) {
448
- explodeRoot.userData.explodeDepth = calcExplodeDepth(explodeRoot, 1);
458
+ explodeObjects.forEach((object: Object3D) => {
459
+ const depth = calcObjectDepth(object);
460
+ if (depth > maxDepth) maxDepth = depth;
461
+ });
462
+
463
+ explodeRoot.userData.explodeDepth = maxDepth;
449
464
  }
450
465
 
451
466
  const maxDepth = explodeRoot.userData.explodeDepth;
@@ -453,27 +468,25 @@ export class ModelImpl implements IModelImpl {
453
468
  const explodeDepth = 0 | scaledExplodeDepth;
454
469
  const currentSegmentFraction = scaledExplodeDepth - explodeDepth;
455
470
 
456
- function explodeObject(object: any, depth: number) {
471
+ const explodeObject = (object: any) => {
457
472
  if (object.isCamera) return;
458
- if (object.userData.isHighlightWireframe) return;
459
473
 
460
474
  object.position.copy(object.userData.originalPosition);
461
475
 
476
+ const depth = object.userData.depth;
477
+
462
478
  if (depth > 0 && depth <= explodeDepth) {
463
479
  let objectScale = explodeScale * coeff;
464
480
  if (depth === explodeDepth) objectScale *= currentSegmentFraction;
465
481
 
466
- const parentCenter = object.parent.userData.originalCenter;
467
- const objectCenter = object.userData.originalCenter;
468
- const localOffset = objectCenter.clone().sub(parentCenter).multiplyScalar(objectScale);
469
-
470
- object.position.add(localOffset);
482
+ object.position.addScaledVector(object.userData.originalOffset, objectScale);
471
483
  }
484
+ };
472
485
 
473
- object.children.forEach((x: Object3D) => explodeObject(x, depth + 1));
474
- }
486
+ explodeObjects.forEach((object: Object3D) => {
487
+ explodeObject(object);
488
+ });
475
489
 
476
- explodeObject(explodeRoot, 0);
477
490
  this.scene.updateMatrixWorld();
478
491
 
479
492
  return this;