From 251b33390544419a128a4a35a5b000210a250ee0 Mon Sep 17 00:00:00 2001 From: Adrian Solberg Date: Thu, 25 Sep 2025 19:31:03 +0200 Subject: [PATCH] feat(#9): limit zoom out --- src/potreeViewer.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/potreeViewer.js b/src/potreeViewer.js index 2e7272e..f27edc7 100644 --- a/src/potreeViewer.js +++ b/src/potreeViewer.js @@ -3,6 +3,11 @@ export async function createPotreeViewer(containerId, pointcloudUrl, settings) { useDefaultRenderLoop: false }) + // Remove original scroll listener and add new one + const oc = viewer.orbitControls; + oc.removeEventListener('mousewheel', oc._listeners?.mousewheel?.[0]); + oc.addEventListener('mousewheel', clampScrollRadius); + if (settings.edl) viewer.setEDLEnabled(true) if (settings.fov) viewer.setFOV(settings.fov) if (settings.pointBudget) viewer.setPointBudget(settings.pointBudget) @@ -43,3 +48,14 @@ export async function createPotreeViewer(containerId, pointcloudUrl, settings) { return viewer } + +function clampScrollRadius(e) { + let resolvedRadius = this.scene.view.radius + this.radiusDelta; + let newRadius = resolvedRadius - e.delta * resolvedRadius * 0.1; + + const maxRadius = 10000000; + if (newRadius > maxRadius) newRadius = maxRadius; + + this.radiusDelta = newRadius - this.scene.view.radius; + this.stopTweens(); +}