From 6d01c1e01f83dcd4682867c30a29392c70cdc771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Flatval?= Date: Tue, 27 Jun 2023 13:59:50 +0200 Subject: [PATCH] fix: apply clipping planes on newly loaded point clouds --- viewer/packages/pointclouds/src/PointCloudManager.ts | 7 ++++++- viewer/packages/rendering/src/PointCloudMaterialManager.ts | 7 ++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/viewer/packages/pointclouds/src/PointCloudManager.ts b/viewer/packages/pointclouds/src/PointCloudManager.ts index 50904d13ddc..b89b7e7c7bb 100644 --- a/viewer/packages/pointclouds/src/PointCloudManager.ts +++ b/viewer/packages/pointclouds/src/PointCloudManager.ts @@ -29,6 +29,7 @@ export class PointCloudManager { private readonly _loadingStateHandler: PointCloudLoadingStateHandler; private readonly _potreeInstance: Potree; private readonly _pointCloudNodes: PointCloudNode[] = []; + private _globalClippingPlanes: THREE.Plane[] = []; private readonly _cameraSubject: Subject = new Subject(); private readonly _modelSubject: Subject<{ modelIdentifier: ModelIdentifier; operation: 'add' | 'remove' }> = @@ -94,6 +95,7 @@ export class PointCloudManager { } set clippingPlanes(planes: THREE.Plane[]) { + this._globalClippingPlanes = planes; this._pointCloudNodes.forEach(node => node.octree.setGlobalClippingPlane(planes)); this.requestRedraw(); } @@ -131,7 +133,10 @@ export class PointCloudManager { this._loadingStateHandler.onModelAdded(); this._modelSubject.next({ modelIdentifier, operation: 'add' }); - this._materialManager.initializeClippingPlanesForPointCloud(modelIdentifier.revealInternalId); + this._materialManager.initializeClippingPlanesForPointCloud( + modelIdentifier.revealInternalId, + this._globalClippingPlanes + ); return pointCloudNode; } diff --git a/viewer/packages/rendering/src/PointCloudMaterialManager.ts b/viewer/packages/rendering/src/PointCloudMaterialManager.ts index 68b48ca1471..012b00cbf98 100644 --- a/viewer/packages/rendering/src/PointCloudMaterialManager.ts +++ b/viewer/packages/rendering/src/PointCloudMaterialManager.ts @@ -5,6 +5,7 @@ import { PointCloudObjectIdMaps } from './pointcloud-rendering/PointCloudObjectIdMaps'; import { PointCloudMaterial } from './pointcloud-rendering'; import { PointCloudMaterialParameters } from './render-passes/types'; +import { Plane } from 'three'; export class PointCloudMaterialManager { private readonly _modelsMaterialsMap: Map = new Map(); @@ -38,16 +39,16 @@ export class PointCloudMaterialManager { return material; } - initializeClippingPlanesForPointCloud(modelIdentifier: symbol): void { + initializeClippingPlanesForPointCloud(modelIdentifier: symbol, clippingPlanes: Plane[]): void { const material = this.getModelMaterial(modelIdentifier); material.clipping = true; material.clipIntersection = false; - material.clippingPlanes = []; + material.clippingPlanes = [...clippingPlanes]; material.defines = { ...material.defines, - NUM_CLIPPING_PLANES: 0, + NUM_CLIPPING_PLANES: clippingPlanes.length, UNION_CLIPPING_PLANES: 0 }; }