@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.
- package/dist/extensions/components/LightHelperComponent.js +1 -1
- package/dist/extensions/components/LightHelperComponent.js.map +1 -1
- package/dist/extensions/components/LightHelperComponent.min.js +1 -1
- package/dist/extensions/components/LightHelperComponent.module.js +1 -1
- package/dist/extensions/components/LightHelperComponent.module.js.map +1 -1
- package/dist/extensions/components/StatsPanelComponent.js +0 -1
- package/dist/extensions/components/StatsPanelComponent.js.map +1 -1
- package/dist/extensions/components/StatsPanelComponent.min.js +1 -1
- package/dist/extensions/components/StatsPanelComponent.module.js +0 -1
- package/dist/extensions/components/StatsPanelComponent.module.js.map +1 -1
- package/dist/extensions/loaders/GLTFCloudLoader.js +7 -2
- package/dist/extensions/loaders/GLTFCloudLoader.js.map +1 -1
- package/dist/extensions/loaders/GLTFCloudLoader.min.js +1 -1
- package/dist/extensions/loaders/GLTFCloudLoader.module.js +7 -2
- package/dist/extensions/loaders/GLTFCloudLoader.module.js.map +1 -1
- package/dist/extensions/loaders/GLTFFileLoader.js +2 -1
- package/dist/extensions/loaders/GLTFFileLoader.js.map +1 -1
- package/dist/extensions/loaders/GLTFFileLoader.min.js +1 -1
- package/dist/extensions/loaders/GLTFFileLoader.module.js +2 -1
- package/dist/extensions/loaders/GLTFFileLoader.module.js.map +1 -1
- package/dist/extensions/loaders/IFCXLoader.js +10 -5
- package/dist/extensions/loaders/IFCXLoader.js.map +1 -1
- package/dist/extensions/loaders/IFCXLoader.min.js +1 -1
- package/dist/extensions/loaders/IFCXLoader.module.js +10 -5
- package/dist/extensions/loaders/IFCXLoader.module.js.map +1 -1
- package/dist/viewer-three.js +161 -157
- package/dist/viewer-three.js.map +1 -1
- package/dist/viewer-three.min.js +3 -3
- package/dist/viewer-three.module.js +68 -53
- package/dist/viewer-three.module.js.map +1 -1
- package/extensions/components/LightHelperComponent.ts +1 -1
- package/extensions/components/StatsPanelComponent.ts +0 -1
- package/extensions/loaders/GLTFCloudLoader.ts +8 -2
- package/extensions/loaders/GLTFFileLoader.ts +3 -2
- package/extensions/loaders/IFCX/IFCXFileLoader.ts +11 -5
- package/lib/Viewer/Viewer.d.ts +1 -1
- package/lib/Viewer/measurement/Snapper.d.ts +1 -1
- package/package.json +5 -5
- package/src/Viewer/Viewer.ts +14 -16
- package/src/Viewer/commands/GetSelected2.ts +1 -1
- package/src/Viewer/commands/SetSelected.ts +1 -1
- package/src/Viewer/components/BackgroundComponent.ts +1 -1
- package/src/Viewer/components/CameraComponent.ts +1 -1
- package/src/Viewer/components/CanvasRemoveComponent.ts +0 -1
- package/src/Viewer/components/HighlighterUtils.ts +2 -2
- package/src/Viewer/components/SelectionComponent.ts +4 -2
- package/src/Viewer/helpers/SectionsHelper.js +4 -8
- package/src/Viewer/helpers/WCSHelper.ts +7 -5
- package/src/Viewer/loaders/DynamicGltfLoader/DynamicModelImpl.ts +19 -14
- package/src/Viewer/loaders/GLTFBinaryParser.ts +2 -2
- package/src/Viewer/loaders/GLTFFileDynamicLoader.ts +2 -2
- package/src/Viewer/measurement/Snapper.ts +2 -2
- package/src/Viewer/models/ModelImpl.ts +38 -25
|
@@ -815,7 +815,7 @@ class Snapper {
|
|
|
815
815
|
const object = intersections[0].object;
|
|
816
816
|
const intersectionPoint = intersections[0].point;
|
|
817
817
|
const localPoint = object.worldToLocal(intersectionPoint.clone());
|
|
818
|
-
let snapPoint;
|
|
818
|
+
let snapPoint = undefined;
|
|
819
819
|
let snapDistance = this.getDetectRadius(intersectionPoint);
|
|
820
820
|
const geometry = object.geometry;
|
|
821
821
|
const positions = geometry.attributes.position.array;
|
|
@@ -2700,7 +2700,7 @@ class BackgroundComponent {
|
|
|
2700
2700
|
}
|
|
2701
2701
|
dispose() {
|
|
2702
2702
|
this.viewer.removeEventListener("optionschange", this.syncOptions);
|
|
2703
|
-
this.viewer.scene.background =
|
|
2703
|
+
this.viewer.scene.background = null;
|
|
2704
2704
|
}
|
|
2705
2705
|
}
|
|
2706
2706
|
|
|
@@ -2776,7 +2776,7 @@ class CameraComponent {
|
|
|
2776
2776
|
if (mode === this.getCameraMode(currentCamera))
|
|
2777
2777
|
return;
|
|
2778
2778
|
const target = this.viewer.target.clone();
|
|
2779
|
-
let camera;
|
|
2779
|
+
let camera = null;
|
|
2780
2780
|
if (currentCamera.isOrthographicCamera) {
|
|
2781
2781
|
const fov = currentCamera.userData.fov || 45;
|
|
2782
2782
|
const fieldHeight = (currentCamera.top - currentCamera.bottom) / currentCamera.zoom;
|
|
@@ -3067,7 +3067,6 @@ class CanvasRemoveComponent {
|
|
|
3067
3067
|
}
|
|
3068
3068
|
dispose() {
|
|
3069
3069
|
this.mutationObserver.disconnect();
|
|
3070
|
-
this.mutationObserver = undefined;
|
|
3071
3070
|
}
|
|
3072
3071
|
}
|
|
3073
3072
|
|
|
@@ -4276,11 +4275,13 @@ class WCSHelper extends Object3D {
|
|
|
4276
4275
|
canvas.width = 64;
|
|
4277
4276
|
canvas.height = 64;
|
|
4278
4277
|
const context = canvas.getContext("2d");
|
|
4279
|
-
context
|
|
4280
|
-
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
|
|
4278
|
+
if (context) {
|
|
4279
|
+
context.clearRect(0, 0, 64, 64);
|
|
4280
|
+
context.font = "24px Arial";
|
|
4281
|
+
context.textAlign = "center";
|
|
4282
|
+
context.fillStyle = color.getStyle();
|
|
4283
|
+
context.fillText(text, 32, 41);
|
|
4284
|
+
}
|
|
4284
4285
|
const texture = new CanvasTexture(canvas);
|
|
4285
4286
|
texture.colorSpace = SRGBColorSpace;
|
|
4286
4287
|
return new SpriteMaterial({ map: texture, toneMapped: false });
|
|
@@ -4409,8 +4410,8 @@ class ModelImpl {
|
|
|
4409
4410
|
if (object.material)
|
|
4410
4411
|
disposeMaterials(object.material);
|
|
4411
4412
|
}
|
|
4412
|
-
this.handleToObjects
|
|
4413
|
-
this.originalObjects
|
|
4413
|
+
this.handleToObjects.clear();
|
|
4414
|
+
this.originalObjects.clear();
|
|
4414
4415
|
this.scene.traverse(disposeObject);
|
|
4415
4416
|
this.scene.clear();
|
|
4416
4417
|
}
|
|
@@ -4676,44 +4677,54 @@ class ModelImpl {
|
|
|
4676
4677
|
centersCache.set(handle, target.clone());
|
|
4677
4678
|
return target;
|
|
4678
4679
|
};
|
|
4679
|
-
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4680
|
+
const calcObjectOffset = (object, target) => {
|
|
4681
|
+
const parent = object.parent;
|
|
4682
|
+
if (!parent || parent.userData.originalCenter === undefined)
|
|
4683
|
+
return target;
|
|
4684
|
+
return target.subVectors(object.userData.originalCenter, parent.userData.originalCenter);
|
|
4685
|
+
};
|
|
4686
|
+
const calcObjectDepth = (object) => {
|
|
4687
|
+
if (object.userData.depth !== undefined)
|
|
4688
|
+
return object.userData.depth;
|
|
4689
|
+
const parent = object.parent;
|
|
4690
|
+
const depth = parent && object !== explodeRoot ? calcObjectDepth(parent) + 1 : 0;
|
|
4691
|
+
object.userData.depth = depth;
|
|
4686
4692
|
object.userData.originalPosition = object.position.clone();
|
|
4687
4693
|
object.userData.originalCenter = calcObjectCenter(object, new Vector3());
|
|
4688
|
-
|
|
4689
|
-
|
|
4694
|
+
object.userData.originalOffset = calcObjectOffset(object, new Vector3());
|
|
4695
|
+
return depth;
|
|
4696
|
+
};
|
|
4690
4697
|
const explodeScale = scale / 100;
|
|
4691
4698
|
const explodeRoot = this.scene;
|
|
4692
|
-
|
|
4693
|
-
|
|
4699
|
+
const explodeObjects = this.getObjects();
|
|
4700
|
+
if (explodeRoot.userData.explodeDepth === undefined) {
|
|
4701
|
+
let maxDepth = 0;
|
|
4702
|
+
explodeObjects.forEach((object) => {
|
|
4703
|
+
const depth = calcObjectDepth(object);
|
|
4704
|
+
if (depth > maxDepth)
|
|
4705
|
+
maxDepth = depth;
|
|
4706
|
+
});
|
|
4707
|
+
explodeRoot.userData.explodeDepth = maxDepth;
|
|
4694
4708
|
}
|
|
4695
4709
|
const maxDepth = explodeRoot.userData.explodeDepth;
|
|
4696
4710
|
const scaledExplodeDepth = explodeScale * maxDepth + 1;
|
|
4697
4711
|
const explodeDepth = 0 | scaledExplodeDepth;
|
|
4698
4712
|
const currentSegmentFraction = scaledExplodeDepth - explodeDepth;
|
|
4699
|
-
|
|
4713
|
+
const explodeObject = (object) => {
|
|
4700
4714
|
if (object.isCamera)
|
|
4701
4715
|
return;
|
|
4702
|
-
if (object.userData.isHighlightWireframe)
|
|
4703
|
-
return;
|
|
4704
4716
|
object.position.copy(object.userData.originalPosition);
|
|
4717
|
+
const depth = object.userData.depth;
|
|
4705
4718
|
if (depth > 0 && depth <= explodeDepth) {
|
|
4706
4719
|
let objectScale = explodeScale * coeff;
|
|
4707
4720
|
if (depth === explodeDepth)
|
|
4708
4721
|
objectScale *= currentSegmentFraction;
|
|
4709
|
-
|
|
4710
|
-
const objectCenter = object.userData.originalCenter;
|
|
4711
|
-
const localOffset = objectCenter.clone().sub(parentCenter).multiplyScalar(objectScale);
|
|
4712
|
-
object.position.add(localOffset);
|
|
4722
|
+
object.position.addScaledVector(object.userData.originalOffset, objectScale);
|
|
4713
4723
|
}
|
|
4714
|
-
|
|
4715
|
-
|
|
4716
|
-
|
|
4724
|
+
};
|
|
4725
|
+
explodeObjects.forEach((object) => {
|
|
4726
|
+
explodeObject(object);
|
|
4727
|
+
});
|
|
4717
4728
|
this.scene.updateMatrixWorld();
|
|
4718
4729
|
return this;
|
|
4719
4730
|
}
|
|
@@ -4816,6 +4827,12 @@ class DynamicModelImpl extends ModelImpl {
|
|
|
4816
4827
|
centersCache.set(handle, target.clone());
|
|
4817
4828
|
return target;
|
|
4818
4829
|
};
|
|
4830
|
+
const calcObjectOffset = (object, target) => {
|
|
4831
|
+
const parent = object.parent;
|
|
4832
|
+
if (!parent || parent.userData.originalCenter === undefined)
|
|
4833
|
+
return target;
|
|
4834
|
+
return target.subVectors(object.userData.originalCenter, parent.userData.originalCenter);
|
|
4835
|
+
};
|
|
4819
4836
|
const calcObjectDepth = (object) => {
|
|
4820
4837
|
if (object.userData.depth !== undefined)
|
|
4821
4838
|
return object.userData.depth;
|
|
@@ -4824,13 +4841,15 @@ class DynamicModelImpl extends ModelImpl {
|
|
|
4824
4841
|
object.userData.depth = depth;
|
|
4825
4842
|
object.userData.originalPosition = object.position.clone();
|
|
4826
4843
|
object.userData.originalCenter = calcObjectCenter(object, new Vector3());
|
|
4844
|
+
object.userData.originalOffset = calcObjectOffset(object, new Vector3());
|
|
4827
4845
|
return depth;
|
|
4828
4846
|
};
|
|
4829
4847
|
const explodeScale = scale / 100;
|
|
4830
4848
|
const explodeRoot = this.scene.children[0];
|
|
4831
|
-
|
|
4849
|
+
const explodeObjects = this.getObjects();
|
|
4850
|
+
if (explodeRoot.userData.explodeDepth === undefined) {
|
|
4832
4851
|
let maxDepth = 0;
|
|
4833
|
-
|
|
4852
|
+
explodeObjects.forEach((object) => {
|
|
4834
4853
|
const depth = calcObjectDepth(object);
|
|
4835
4854
|
if (depth > maxDepth)
|
|
4836
4855
|
maxDepth = depth;
|
|
@@ -4842,29 +4861,26 @@ class DynamicModelImpl extends ModelImpl {
|
|
|
4842
4861
|
const explodeDepth = 0 | scaledExplodeDepth;
|
|
4843
4862
|
const currentSegmentFraction = scaledExplodeDepth - explodeDepth;
|
|
4844
4863
|
const offsetCache = new Map();
|
|
4845
|
-
const
|
|
4864
|
+
const calcExplodeOffset = (object, target) => {
|
|
4846
4865
|
if (offsetCache.has(object))
|
|
4847
4866
|
return target.copy(offsetCache.get(object));
|
|
4848
4867
|
const parent = object.parent;
|
|
4849
4868
|
if (parent && object !== explodeRoot)
|
|
4850
|
-
|
|
4869
|
+
calcExplodeOffset(parent, target);
|
|
4851
4870
|
const depth = object.userData.depth;
|
|
4852
4871
|
if (depth > 0 && depth <= explodeDepth) {
|
|
4853
4872
|
let objectScale = explodeScale * coeff;
|
|
4854
4873
|
if (depth === explodeDepth)
|
|
4855
4874
|
objectScale *= currentSegmentFraction;
|
|
4856
|
-
|
|
4857
|
-
const objectCenter = object.userData.originalCenter;
|
|
4858
|
-
const localOffset = objectCenter.clone().sub(parentCenter).multiplyScalar(objectScale);
|
|
4859
|
-
target.add(localOffset);
|
|
4875
|
+
target.addScaledVector(object.userData.originalOffset, objectScale);
|
|
4860
4876
|
}
|
|
4861
4877
|
offsetCache.set(object, target.clone());
|
|
4862
4878
|
return target;
|
|
4863
4879
|
};
|
|
4864
4880
|
const transformMap = new Map();
|
|
4865
|
-
|
|
4866
|
-
const
|
|
4867
|
-
transformMap.set(object, new Matrix4().makeTranslation(
|
|
4881
|
+
explodeObjects.forEach((object) => {
|
|
4882
|
+
const offset = calcExplodeOffset(object, new Vector3());
|
|
4883
|
+
transformMap.set(object, new Matrix4().makeTranslation(offset));
|
|
4868
4884
|
});
|
|
4869
4885
|
this.gltfLoader.applyObjectTransforms(transformMap);
|
|
4870
4886
|
this.scene.updateMatrixWorld();
|
|
@@ -8074,10 +8090,10 @@ class GLTFBinaryParser {
|
|
|
8074
8090
|
}
|
|
8075
8091
|
offset += chunkLength;
|
|
8076
8092
|
}
|
|
8077
|
-
if (
|
|
8093
|
+
if (this.content === undefined) {
|
|
8078
8094
|
throw new Error("GLTFBinaryParser: JSON content not found.");
|
|
8079
8095
|
}
|
|
8080
|
-
if (
|
|
8096
|
+
if (this.body === undefined) {
|
|
8081
8097
|
throw new Error("GLTFBinaryParser: Binary buffer chunk not found or type not supported.");
|
|
8082
8098
|
}
|
|
8083
8099
|
}
|
|
@@ -8160,11 +8176,11 @@ class GLTFFileDynamicLoader extends Loader {
|
|
|
8160
8176
|
if (this.manager)
|
|
8161
8177
|
this.manager.dispose();
|
|
8162
8178
|
}
|
|
8163
|
-
isSupport(file, format) {
|
|
8179
|
+
isSupport(file, format = "") {
|
|
8164
8180
|
return ((typeof file === "string" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&
|
|
8165
8181
|
/(gltf|glb)$/i.test(format));
|
|
8166
8182
|
}
|
|
8167
|
-
async load(file, format, params) {
|
|
8183
|
+
async load(file, format, params = {}) {
|
|
8168
8184
|
this.manager = new GLTFLoadingManager(file, params);
|
|
8169
8185
|
const scene = new Group();
|
|
8170
8186
|
this.gltfLoader = new DynamicGltfLoader(this.viewer.camera, scene, this.viewer.renderer);
|
|
@@ -8399,7 +8415,9 @@ class Viewer extends EventEmitter2 {
|
|
|
8399
8415
|
this.canvasEvents.forEach((x) => canvas.addEventListener(x, this.canvaseventlistener));
|
|
8400
8416
|
this._markup.initialize(this.canvas, this.canvasEvents, this, this);
|
|
8401
8417
|
for (const name of components.getComponents().keys()) {
|
|
8402
|
-
|
|
8418
|
+
const component = components.createComponent(name, this);
|
|
8419
|
+
if (component)
|
|
8420
|
+
this._components.push(component);
|
|
8403
8421
|
}
|
|
8404
8422
|
this.syncOptions();
|
|
8405
8423
|
this.syncOverlay();
|
|
@@ -8421,10 +8439,7 @@ class Viewer extends EventEmitter2 {
|
|
|
8421
8439
|
this.setActiveDragger();
|
|
8422
8440
|
this._components.forEach((component) => component.dispose());
|
|
8423
8441
|
this._components.length = 0;
|
|
8424
|
-
|
|
8425
|
-
this._markup.dispose();
|
|
8426
|
-
this._markup = undefined;
|
|
8427
|
-
}
|
|
8442
|
+
this._markup.dispose();
|
|
8428
8443
|
if (this.canvas) {
|
|
8429
8444
|
this.canvasEvents.forEach((x) => this.canvas.removeEventListener(x, this.canvaseventlistener));
|
|
8430
8445
|
this.canvas = undefined;
|
|
@@ -8677,7 +8692,7 @@ class Viewer extends EventEmitter2 {
|
|
|
8677
8692
|
}
|
|
8678
8693
|
}
|
|
8679
8694
|
getComponent(name) {
|
|
8680
|
-
return this._components.find((component) => component.name === name);
|
|
8695
|
+
return this._components.find((component) => component.name === name) || null;
|
|
8681
8696
|
}
|
|
8682
8697
|
drawViewpoint(viewpoint) {
|
|
8683
8698
|
var _a, _b, _c, _d;
|