@inweb/viewer-three 27.1.0 → 27.1.1
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/InfoPanelComponent.js +7 -9
- package/dist/extensions/components/InfoPanelComponent.js.map +1 -1
- package/dist/extensions/components/InfoPanelComponent.min.js +1 -1
- package/dist/extensions/components/InfoPanelComponent.module.js +7 -9
- package/dist/extensions/components/InfoPanelComponent.module.js.map +1 -1
- package/dist/extensions/loaders/GLTFCloudLoader.js +1 -1
- 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 +1 -1
- package/dist/extensions/loaders/GLTFCloudLoader.module.js.map +1 -1
- package/dist/extensions/loaders/GLTFFileLoader.js +1 -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 +1 -1
- package/dist/extensions/loaders/GLTFFileLoader.module.js.map +1 -1
- package/dist/extensions/loaders/IFCXLoader.js +2 -2
- 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 +2 -2
- package/dist/extensions/loaders/IFCXLoader.module.js.map +1 -1
- package/dist/extensions/loaders/PotreeLoader.js +1 -1
- package/dist/extensions/loaders/PotreeLoader.js.map +1 -1
- package/dist/extensions/loaders/PotreeLoader.min.js +1 -1
- package/dist/extensions/loaders/PotreeLoader.module.js +1 -1
- package/dist/extensions/loaders/PotreeLoader.module.js.map +1 -1
- package/dist/viewer-three.js +35 -26
- package/dist/viewer-three.js.map +1 -1
- package/dist/viewer-three.min.js +2 -2
- package/dist/viewer-three.module.js +35 -26
- package/dist/viewer-three.module.js.map +1 -1
- package/extensions/components/InfoPanelComponent.ts +8 -11
- package/extensions/loaders/GLTFCloudLoader.ts +1 -1
- package/extensions/loaders/GLTFFileLoader.ts +1 -1
- package/extensions/loaders/IFCX/IFCXCloudLoader.ts +1 -1
- package/extensions/loaders/IFCX/IFCXFileLoader.ts +1 -1
- package/extensions/loaders/Potree/PotreeFileLoader.ts +1 -1
- package/lib/Viewer/Viewer.d.ts +1 -1
- package/lib/Viewer/commands/CreatePreview.d.ts +1 -1
- package/lib/Viewer/components/RenderLoopComponent.d.ts +1 -1
- package/lib/Viewer/draggers/FlyDragger.d.ts +1 -0
- package/lib/Viewer/draggers/WalkDragger.d.ts +1 -0
- package/lib/Viewer/loaders/index.d.ts +2 -1
- package/package.json +5 -5
- package/src/Viewer/Viewer.ts +28 -25
- package/src/Viewer/commands/CreatePreview.ts +2 -2
- package/src/Viewer/components/InfoComponent.ts +4 -4
- package/src/Viewer/components/RenderLoopComponent.ts +2 -2
- package/src/Viewer/draggers/FlyDragger.ts +8 -1
- package/src/Viewer/draggers/WalkDragger.ts +8 -1
- package/src/Viewer/loaders/GLTFCloudDynamicLoader.ts +2 -2
- package/src/Viewer/loaders/GLTFFileDynamicLoader.ts +2 -2
- package/src/Viewer/loaders/index.ts +2 -1
|
@@ -131,8 +131,8 @@ class PotreeFileLoader extends Loader {
|
|
|
131
131
|
this.viewer.models.push(modelImpl);
|
|
132
132
|
this.viewer.syncOptions();
|
|
133
133
|
this.viewer.syncOverlay();
|
|
134
|
-
this.viewer.update();
|
|
135
134
|
this.viewer.emitEvent({ type: "databasechunk", data: pco, file });
|
|
135
|
+
this.viewer.update(true);
|
|
136
136
|
return this;
|
|
137
137
|
}
|
|
138
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PotreeLoader.module.js","sources":["../../../extensions/loaders/Potree/PotreeModelImpl.ts","../../../extensions/loaders/Potree/PotreeFileLoader.ts","../../../extensions/loaders/Potree/index.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Box3 } from \"three\";\nimport { PointCloudOctree } from \"potree-core\";\nimport { IInfo, Info } from \"@inweb/viewer-core\";\nimport { ModelImpl } from \"@inweb/viewer-three\";\n\n// Potree model implementation.\n\nexport class PotreeModelImpl extends ModelImpl {\n public pco: PointCloudOctree;\n\n override getInfo(): IInfo {\n // ===================== AI-CODE-START ======================\n // Source: Claude Sonnet 4.5\n // Date: 2025-10-02\n // Reviewer: roman.mochalov@opendesign.com\n // Issue: CLOUD-5738\n\n let totalPoints = 0;\n let totalNodes = 0;\n let loadedGeometryBytes = 0;\n let estimatedTotalGeometryBytes = 0;\n let geometryBytes = 0;\n\n const bytesPerPoint = this.pco.pcoGeometry?.pointAttributes?.byteSize || 0;\n\n if (this.pco.pcoGeometry && this.pco.pcoGeometry.root) {\n this.pco.pcoGeometry.root.traverse((node: any) => {\n totalNodes++;\n\n const numPoints = node.numPoints || 0;\n totalPoints += numPoints;\n\n if (node.loaded && node.geometry) {\n if (node.geometry.attributes) {\n for (const name in node.geometry.attributes) {\n const attribute = node.geometry.attributes[name];\n if (attribute && attribute.array) {\n loadedGeometryBytes += attribute.array.byteLength;\n }\n }\n }\n\n if (node.geometry.index && node.geometry.index.array) {\n loadedGeometryBytes += node.geometry.index.array.byteLength;\n }\n }\n\n if (bytesPerPoint > 0 && numPoints > 0) {\n estimatedTotalGeometryBytes += numPoints * (bytesPerPoint * 2 - 1);\n }\n }, true);\n }\n\n geometryBytes = Math.max(loadedGeometryBytes, estimatedTotalGeometryBytes);\n\n // ===================== AI-CODE-END ======================\n\n const info = new Info();\n\n info.scene.objects = totalNodes;\n info.scene.points = totalPoints;\n info.scene.triangles = 0;\n info.scene.lines = 0;\n info.scene.edges = 0;\n\n info.memory.geometries = totalNodes;\n info.memory.geometryBytes = Math.floor(geometryBytes);\n info.memory.textures = 0;\n info.memory.textureBytes = 0;\n info.memory.materials = 1;\n info.memory.totalEstimatedGpuBytes = Math.floor(geometryBytes);\n\n info.optimizedScene.objects = info.scene.objects;\n info.optimizedScene.triangles = info.scene.triangles;\n info.optimizedScene.points = info.scene.points;\n info.optimizedScene.lines = info.scene.lines;\n info.optimizedScene.edges = info.scene.edges;\n\n return info;\n }\n\n override getExtents(target: Box3): Box3 {\n return target.union(this.pco.pcoGeometry.boundingBox);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Euler, Vector3 } from \"three\";\nimport { PointColorType, PointCloudOctree, PointSizeType, PointShape, Potree } from \"potree-core\";\nimport { Loader, LoadParams, Viewer } from \"@inweb/viewer-three\";\n\nimport { PotreeModelImpl } from \"./PotreeModelImpl\";\n\nexport type PotreeLoadParams = LoadParams & {\n path?: string;\n position?: Vector3;\n rotation?: Euler;\n scale?: Vector3;\n};\n\nexport class PotreeFileLoader extends Loader {\n public viewer: Viewer;\n public potree: Potree;\n public pointClouds: PointCloudOctree[];\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n\n this.potree = new Potree();\n this.pointClouds = [];\n\n this.viewer.addEventListener(\"render\", this.updatePointClouds);\n this.viewer.addEventListener(\"changecamera\", this.updatePointClouds);\n }\n\n override dispose() {\n this.pointClouds.forEach((pco) => pco.dispose());\n\n this.viewer.removeEventListener(\"render\", this.updatePointClouds);\n this.viewer.removeEventListener(\"changecamera\", this.updatePointClouds);\n }\n\n override isSupport(file: any, format?: string): boolean {\n return typeof file === \"string\" && /(cloud.js|metadata.json)$/i.test(file);\n }\n\n override async load(file: any, format?: string, params: PotreeLoadParams = {}): Promise<this> {\n const path = (params.path || \"\") + file;\n const index = path.lastIndexOf(\"/\");\n const baseUrl = path.slice(0, index + 1);\n const url = path.slice(index + 1);\n\n const pco = await this.potree.loadPointCloud(url, baseUrl);\n pco.material.size = 1.0;\n pco.material.shape = 2;\n pco.material.inputColorEncoding = 1;\n pco.material.outputColorEncoding = 1;\n pco.material.pointColorType = PointColorType.RGB; // RGB | DEPTH | HEIGHT | POINT_INDEX | LOD | CLASSIFICATION\n pco.material.pointSizeType = PointSizeType.ADAPTIVE; // ADAPTIVE | FIXED\n pco.material.shape = PointShape.CIRCLE; // CIRCLE | SQUARE\n\n if (params.position) pco.position.copy(params.position);\n if (params.rotation) pco.rotation.copy(params.rotation);\n if (params.scale) pco.scale.copy(params.scale);\n\n this.pointClouds.push(pco);\n\n const modelImpl = new PotreeModelImpl(pco);\n modelImpl.id = params.modelId || this.extractFileName(file);\n modelImpl.pco = pco;\n\n this.viewer.scene.add(pco);\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: pco, file });\n\n return this;\n }\n\n updatePointClouds = () => {\n const result = this.potree.updatePointClouds(this.pointClouds, this.viewer.camera, this.viewer.renderer);\n if (result.exceededMaxLoadsToGPU || result.nodeLoadPromises.length > 0) this.viewer.update();\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { loaders } from \"@inweb/viewer-three\";\n\nimport { PotreeFileLoader } from \"./PotreeFileLoader\";\n\nloaders.registerLoader(\"potree-file\", (viewer: any) => new PotreeFileLoader(viewer));\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PotreeLoader.module.js","sources":["../../../extensions/loaders/Potree/PotreeModelImpl.ts","../../../extensions/loaders/Potree/PotreeFileLoader.ts","../../../extensions/loaders/Potree/index.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Box3 } from \"three\";\nimport { PointCloudOctree } from \"potree-core\";\nimport { IInfo, Info } from \"@inweb/viewer-core\";\nimport { ModelImpl } from \"@inweb/viewer-three\";\n\n// Potree model implementation.\n\nexport class PotreeModelImpl extends ModelImpl {\n public pco: PointCloudOctree;\n\n override getInfo(): IInfo {\n // ===================== AI-CODE-START ======================\n // Source: Claude Sonnet 4.5\n // Date: 2025-10-02\n // Reviewer: roman.mochalov@opendesign.com\n // Issue: CLOUD-5738\n\n let totalPoints = 0;\n let totalNodes = 0;\n let loadedGeometryBytes = 0;\n let estimatedTotalGeometryBytes = 0;\n let geometryBytes = 0;\n\n const bytesPerPoint = this.pco.pcoGeometry?.pointAttributes?.byteSize || 0;\n\n if (this.pco.pcoGeometry && this.pco.pcoGeometry.root) {\n this.pco.pcoGeometry.root.traverse((node: any) => {\n totalNodes++;\n\n const numPoints = node.numPoints || 0;\n totalPoints += numPoints;\n\n if (node.loaded && node.geometry) {\n if (node.geometry.attributes) {\n for (const name in node.geometry.attributes) {\n const attribute = node.geometry.attributes[name];\n if (attribute && attribute.array) {\n loadedGeometryBytes += attribute.array.byteLength;\n }\n }\n }\n\n if (node.geometry.index && node.geometry.index.array) {\n loadedGeometryBytes += node.geometry.index.array.byteLength;\n }\n }\n\n if (bytesPerPoint > 0 && numPoints > 0) {\n estimatedTotalGeometryBytes += numPoints * (bytesPerPoint * 2 - 1);\n }\n }, true);\n }\n\n geometryBytes = Math.max(loadedGeometryBytes, estimatedTotalGeometryBytes);\n\n // ===================== AI-CODE-END ======================\n\n const info = new Info();\n\n info.scene.objects = totalNodes;\n info.scene.points = totalPoints;\n info.scene.triangles = 0;\n info.scene.lines = 0;\n info.scene.edges = 0;\n\n info.memory.geometries = totalNodes;\n info.memory.geometryBytes = Math.floor(geometryBytes);\n info.memory.textures = 0;\n info.memory.textureBytes = 0;\n info.memory.materials = 1;\n info.memory.totalEstimatedGpuBytes = Math.floor(geometryBytes);\n\n info.optimizedScene.objects = info.scene.objects;\n info.optimizedScene.triangles = info.scene.triangles;\n info.optimizedScene.points = info.scene.points;\n info.optimizedScene.lines = info.scene.lines;\n info.optimizedScene.edges = info.scene.edges;\n\n return info;\n }\n\n override getExtents(target: Box3): Box3 {\n return target.union(this.pco.pcoGeometry.boundingBox);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Euler, Vector3 } from \"three\";\nimport { PointColorType, PointCloudOctree, PointSizeType, PointShape, Potree } from \"potree-core\";\nimport { Loader, LoadParams, Viewer } from \"@inweb/viewer-three\";\n\nimport { PotreeModelImpl } from \"./PotreeModelImpl\";\n\nexport type PotreeLoadParams = LoadParams & {\n path?: string;\n position?: Vector3;\n rotation?: Euler;\n scale?: Vector3;\n};\n\nexport class PotreeFileLoader extends Loader {\n public viewer: Viewer;\n public potree: Potree;\n public pointClouds: PointCloudOctree[];\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n\n this.potree = new Potree();\n this.pointClouds = [];\n\n this.viewer.addEventListener(\"render\", this.updatePointClouds);\n this.viewer.addEventListener(\"changecamera\", this.updatePointClouds);\n }\n\n override dispose() {\n this.pointClouds.forEach((pco) => pco.dispose());\n\n this.viewer.removeEventListener(\"render\", this.updatePointClouds);\n this.viewer.removeEventListener(\"changecamera\", this.updatePointClouds);\n }\n\n override isSupport(file: any, format?: string): boolean {\n return typeof file === \"string\" && /(cloud.js|metadata.json)$/i.test(file);\n }\n\n override async load(file: any, format?: string, params: PotreeLoadParams = {}): Promise<this> {\n const path = (params.path || \"\") + file;\n const index = path.lastIndexOf(\"/\");\n const baseUrl = path.slice(0, index + 1);\n const url = path.slice(index + 1);\n\n const pco = await this.potree.loadPointCloud(url, baseUrl);\n pco.material.size = 1.0;\n pco.material.shape = 2;\n pco.material.inputColorEncoding = 1;\n pco.material.outputColorEncoding = 1;\n pco.material.pointColorType = PointColorType.RGB; // RGB | DEPTH | HEIGHT | POINT_INDEX | LOD | CLASSIFICATION\n pco.material.pointSizeType = PointSizeType.ADAPTIVE; // ADAPTIVE | FIXED\n pco.material.shape = PointShape.CIRCLE; // CIRCLE | SQUARE\n\n if (params.position) pco.position.copy(params.position);\n if (params.rotation) pco.rotation.copy(params.rotation);\n if (params.scale) pco.scale.copy(params.scale);\n\n this.pointClouds.push(pco);\n\n const modelImpl = new PotreeModelImpl(pco);\n modelImpl.id = params.modelId || this.extractFileName(file);\n modelImpl.pco = pco;\n\n this.viewer.scene.add(pco);\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: pco, file });\n this.viewer.update(true);\n\n return this;\n }\n\n updatePointClouds = () => {\n const result = this.potree.updatePointClouds(this.pointClouds, this.viewer.camera, this.viewer.renderer);\n if (result.exceededMaxLoadsToGPU || result.nodeLoadPromises.length > 0) this.viewer.update();\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { loaders } from \"@inweb/viewer-three\";\n\nimport { PotreeFileLoader } from \"./PotreeFileLoader\";\n\nloaders.registerLoader(\"potree-file\", (viewer: any) => new PotreeFileLoader(viewer));\n"],"names":[],"mappings":"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"}
|
package/dist/viewer-three.js
CHANGED
|
@@ -34934,11 +34934,13 @@ void main() {
|
|
|
34934
34934
|
};
|
|
34935
34935
|
this.viewerRender = () => {
|
|
34936
34936
|
this.joyStickControls.update();
|
|
34937
|
-
this.controls.update();
|
|
34938
34937
|
};
|
|
34939
34938
|
this.viewerZoom = () => {
|
|
34940
34939
|
this.controls.rotateDelta.set(0, 0);
|
|
34941
34940
|
};
|
|
34941
|
+
this.animate = () => {
|
|
34942
|
+
this.controls.update();
|
|
34943
|
+
};
|
|
34942
34944
|
const meshOnlyGround = [];
|
|
34943
34945
|
viewer.models.forEach((model) => model.getVisibleObjects().forEach((obj) => {
|
|
34944
34946
|
if (obj instanceof Mesh) {
|
|
@@ -34951,12 +34953,14 @@ void main() {
|
|
|
34951
34953
|
this.joyStickControls = new JoyStickControls(viewer.camera, viewer.canvas, viewer.canvas, meshOnlyGround);
|
|
34952
34954
|
this.joyStickControls.addEventListener("change", this.controlsChange);
|
|
34953
34955
|
this.viewer = viewer;
|
|
34956
|
+
this.viewer.addEventListener("animate", this.animate);
|
|
34954
34957
|
this.viewer.addEventListener("render", this.viewerRender);
|
|
34955
34958
|
this.viewer.addEventListener("zoom", this.viewerZoom);
|
|
34956
34959
|
this.viewer.addEventListener("changecameramode", this.updateControlsCamera);
|
|
34957
34960
|
this.updateControls();
|
|
34958
34961
|
}
|
|
34959
34962
|
dispose() {
|
|
34963
|
+
this.viewer.removeEventListener("animate", this.animate);
|
|
34960
34964
|
this.viewer.removeEventListener("render", this.viewerRender);
|
|
34961
34965
|
this.viewer.removeEventListener("zoom", this.viewerZoom);
|
|
34962
34966
|
this.viewer.removeEventListener("changecameramode", this.updateControlsCamera);
|
|
@@ -35136,23 +35140,27 @@ void main() {
|
|
|
35136
35140
|
};
|
|
35137
35141
|
this.viewerRender = () => {
|
|
35138
35142
|
this.joyStickControls.update();
|
|
35139
|
-
this.controls.update();
|
|
35140
35143
|
};
|
|
35141
35144
|
this.viewerZoom = () => {
|
|
35142
35145
|
this.controls.rotateDelta.set(0, 0);
|
|
35143
35146
|
};
|
|
35147
|
+
this.animate = () => {
|
|
35148
|
+
this.controls.update();
|
|
35149
|
+
};
|
|
35144
35150
|
this.controls = new FlyControls(viewer.camera, viewer.canvas);
|
|
35145
35151
|
this.controls.addEventListener("change", this.controlsChange);
|
|
35146
35152
|
this.controls.addEventListener("flyspeedchange", this.flyspeedChange);
|
|
35147
35153
|
this.joyStickControls = new JoyStickControls(viewer.camera, viewer.canvas, viewer.canvas, []);
|
|
35148
35154
|
this.joyStickControls.addEventListener("change", this.controlsChange);
|
|
35149
35155
|
this.viewer = viewer;
|
|
35156
|
+
this.viewer.addEventListener("animate", this.animate);
|
|
35150
35157
|
this.viewer.addEventListener("render", this.viewerRender);
|
|
35151
35158
|
this.viewer.addEventListener("zoom", this.viewerZoom);
|
|
35152
35159
|
this.viewer.addEventListener("changecameramode", this.updateControlsCamera);
|
|
35153
35160
|
this.updateControls();
|
|
35154
35161
|
}
|
|
35155
35162
|
dispose() {
|
|
35163
|
+
this.viewer.removeEventListener("animate", this.animate);
|
|
35156
35164
|
this.viewer.removeEventListener("render", this.viewerRender);
|
|
35157
35165
|
this.viewer.removeEventListener("zoom", this.viewerZoom);
|
|
35158
35166
|
this.viewer.removeEventListener("changecameramode", this.updateControlsCamera);
|
|
@@ -35202,9 +35210,9 @@ void main() {
|
|
|
35202
35210
|
viewer.clearSlices();
|
|
35203
35211
|
}
|
|
35204
35212
|
|
|
35205
|
-
function createPreview(viewer, type = "image/jpeg",
|
|
35213
|
+
function createPreview(viewer, type = "image/jpeg", quality = 0.25) {
|
|
35206
35214
|
viewer.update(true);
|
|
35207
|
-
return viewer.canvas.toDataURL(type,
|
|
35215
|
+
return viewer.canvas.toDataURL(type, quality);
|
|
35208
35216
|
}
|
|
35209
35217
|
|
|
35210
35218
|
function explode(viewer, index = 0) {
|
|
@@ -35751,9 +35759,9 @@ void main() {
|
|
|
35751
35759
|
console.log("File load time:", this.viewer.info.performance.loadTime, "ms");
|
|
35752
35760
|
};
|
|
35753
35761
|
this.resize = () => {
|
|
35754
|
-
const
|
|
35755
|
-
this.viewer.info.render.viewport.width =
|
|
35756
|
-
this.viewer.info.render.viewport.height =
|
|
35762
|
+
const { width, height } = this.viewer.canvas;
|
|
35763
|
+
this.viewer.info.render.viewport.width = width;
|
|
35764
|
+
this.viewer.info.render.viewport.height = height;
|
|
35757
35765
|
};
|
|
35758
35766
|
this.render = () => {
|
|
35759
35767
|
this.viewer.info.render.drawCalls = this.viewer.renderer.info.render.calls;
|
|
@@ -35802,13 +35810,13 @@ void main() {
|
|
|
35802
35810
|
|
|
35803
35811
|
class RenderLoopComponent {
|
|
35804
35812
|
constructor(viewer) {
|
|
35805
|
-
this.animate = (time
|
|
35813
|
+
this.animate = (time) => {
|
|
35806
35814
|
this.requestId = requestAnimationFrame(this.animate);
|
|
35807
35815
|
this.viewer.render(time);
|
|
35808
35816
|
this.viewer.emitEvent({ type: "animate", time });
|
|
35809
35817
|
};
|
|
35810
35818
|
this.viewer = viewer;
|
|
35811
|
-
this.animate
|
|
35819
|
+
this.requestId = requestAnimationFrame(this.animate);
|
|
35812
35820
|
}
|
|
35813
35821
|
dispose() {
|
|
35814
35822
|
cancelAnimationFrame(this.requestId);
|
|
@@ -40225,13 +40233,13 @@ void main() {
|
|
|
40225
40233
|
this.viewer.models.push(modelImpl);
|
|
40226
40234
|
this.viewer.syncOptions();
|
|
40227
40235
|
this.viewer.syncOverlay();
|
|
40228
|
-
this.viewer.update();
|
|
40229
40236
|
this.viewer.emitEvent({ type: "databasechunk", data: scene, file });
|
|
40237
|
+
this.viewer.update(true);
|
|
40230
40238
|
});
|
|
40231
40239
|
this.gltfLoader.addEventListener("geometryerror", (data) => {
|
|
40232
40240
|
this.viewer.emitEvent({ type: "geometryerror", data, file });
|
|
40233
40241
|
});
|
|
40234
|
-
this.gltfLoader.addEventListener("update", (
|
|
40242
|
+
this.gltfLoader.addEventListener("update", () => {
|
|
40235
40243
|
this.viewer.update();
|
|
40236
40244
|
});
|
|
40237
40245
|
const loadController = {
|
|
@@ -40313,13 +40321,13 @@ void main() {
|
|
|
40313
40321
|
this.viewer.models.push(modelImpl);
|
|
40314
40322
|
this.viewer.syncOptions();
|
|
40315
40323
|
this.viewer.syncOverlay();
|
|
40316
|
-
this.viewer.update();
|
|
40317
40324
|
this.viewer.emitEvent({ type: "databasechunk", data: scene, file: model.file, model });
|
|
40325
|
+
this.viewer.update(true);
|
|
40318
40326
|
});
|
|
40319
40327
|
this.gltfLoader.addEventListener("geometryerror", (data) => {
|
|
40320
40328
|
this.viewer.emitEvent({ type: "geometryerror", data, file: model.file, model });
|
|
40321
40329
|
});
|
|
40322
|
-
this.gltfLoader.addEventListener("update", (
|
|
40330
|
+
this.gltfLoader.addEventListener("update", () => {
|
|
40323
40331
|
this.viewer.update();
|
|
40324
40332
|
});
|
|
40325
40333
|
const loadController = {
|
|
@@ -55456,11 +55464,13 @@ js: import "konva/skia-backend";
|
|
|
55456
55464
|
this.syncOptions();
|
|
55457
55465
|
this.syncOverlay();
|
|
55458
55466
|
this._renderTime = performance.now();
|
|
55459
|
-
|
|
55460
|
-
|
|
55461
|
-
onProgress(
|
|
55467
|
+
if (typeof onProgress === "function") {
|
|
55468
|
+
const event = new ProgressEvent("progress", { lengthComputable: true, loaded: 1, total: 1 });
|
|
55469
|
+
onProgress(event);
|
|
55470
|
+
}
|
|
55462
55471
|
this.emitEvent({ type: "initializeprogress", data: 1, loaded: 1, total: 1 });
|
|
55463
55472
|
this.emitEvent({ type: "initialize" });
|
|
55473
|
+
this.update(true);
|
|
55464
55474
|
return Promise.resolve(this);
|
|
55465
55475
|
}
|
|
55466
55476
|
dispose() {
|
|
@@ -55524,8 +55534,8 @@ js: import "konva/skia-backend";
|
|
|
55524
55534
|
}
|
|
55525
55535
|
this.renderer.setSize(width, height, updateStyle);
|
|
55526
55536
|
this.composer.setSize(width, height);
|
|
55527
|
-
this.update(true);
|
|
55528
55537
|
this.emitEvent({ type: "resize", width, height });
|
|
55538
|
+
this.update(true);
|
|
55529
55539
|
}
|
|
55530
55540
|
update(force = false) {
|
|
55531
55541
|
const time = performance.now();
|
|
@@ -55535,11 +55545,11 @@ js: import "konva/skia-backend";
|
|
|
55535
55545
|
this.render(time);
|
|
55536
55546
|
this.emitEvent({ type: "update", force });
|
|
55537
55547
|
}
|
|
55538
|
-
render(time) {
|
|
55548
|
+
render(time, force = false) {
|
|
55539
55549
|
var _a, _b;
|
|
55540
55550
|
if (!this.renderer)
|
|
55541
55551
|
return;
|
|
55542
|
-
if (!this._renderNeeded)
|
|
55552
|
+
if (!this._renderNeeded && !force)
|
|
55543
55553
|
return;
|
|
55544
55554
|
if (!time)
|
|
55545
55555
|
time = performance.now();
|
|
@@ -55601,6 +55611,7 @@ js: import "konva/skia-backend";
|
|
|
55601
55611
|
throw error;
|
|
55602
55612
|
}
|
|
55603
55613
|
this.emitEvent({ type: "geometryend", file, model });
|
|
55614
|
+
this.update(true);
|
|
55604
55615
|
return this;
|
|
55605
55616
|
}
|
|
55606
55617
|
openGltfFile(file, externalFiles, params = {}) {
|
|
@@ -55633,8 +55644,8 @@ js: import "konva/skia-backend";
|
|
|
55633
55644
|
this.target.set(0, 0, 0);
|
|
55634
55645
|
this.syncOptions();
|
|
55635
55646
|
this.syncOverlay();
|
|
55636
|
-
this.update(true);
|
|
55637
55647
|
this.emitEvent({ type: "clear" });
|
|
55648
|
+
this.update(true);
|
|
55638
55649
|
return this;
|
|
55639
55650
|
}
|
|
55640
55651
|
is3D() {
|
|
@@ -55822,7 +55833,7 @@ js: import "konva/skia-backend";
|
|
|
55822
55833
|
this.syncOverlay();
|
|
55823
55834
|
this.setActiveDragger(draggerName);
|
|
55824
55835
|
this.emitEvent({ type: "drawviewpoint", data: viewpoint });
|
|
55825
|
-
this.update();
|
|
55836
|
+
this.update(true);
|
|
55826
55837
|
}
|
|
55827
55838
|
createViewpoint() {
|
|
55828
55839
|
if (!this.renderer)
|
|
@@ -55903,11 +55914,9 @@ js: import "konva/skia-backend";
|
|
|
55903
55914
|
}
|
|
55904
55915
|
return { x: intersectionPoint.x, y: intersectionPoint.y, z: intersectionPoint.z };
|
|
55905
55916
|
}
|
|
55906
|
-
|
|
55907
|
-
|
|
55908
|
-
|
|
55909
|
-
return { x: point.x, y: point.y, z: point.z };
|
|
55910
|
-
}
|
|
55917
|
+
const point = new Vector3(x, y, -1);
|
|
55918
|
+
point.unproject(this.camera);
|
|
55919
|
+
return { x: point.x, y: point.y, z: point.z };
|
|
55911
55920
|
}
|
|
55912
55921
|
worldToScreen(position) {
|
|
55913
55922
|
if (!this.renderer)
|