From c6e031476955501aff419cb18e6b2fad60c79990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20P=2E?= Date: Tue, 7 Apr 2026 22:03:16 +0200 Subject: [PATCH] Minor fixes and guard clauses TODO: Bootstrap ms-* and ps-* can't account for all possible levels of indentation/nesting... --- js/scene.js | 8 ++++---- js/ui.js | 4 ++-- js/utils/clipping.js | 26 ++++++++++++++++---------- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/js/scene.js b/js/scene.js index 13f63dc..091e7aa 100644 --- a/js/scene.js +++ b/js/scene.js @@ -93,10 +93,10 @@ function loadNodes(nodes) { AppState.clipping.boundingSphere = node.getBound(); } - if (!AppState.clipping.boundingSphere) { - console.error("There is no computed bounding sphere, clipping will fail. Missing main node?"); - } - AppState.nodes.push({id: n.label, active: true}); }); + + if (!AppState.clipping.boundingSphere) { + console.error("No bounding sphere computed, clipping will fail. Ensure one node has 'isMain: true'."); + } } diff --git a/js/ui.js b/js/ui.js index a9dd07e..6a5e966 100644 --- a/js/ui.js +++ b/js/ui.js @@ -166,8 +166,8 @@ function toggleSettingsPanel(triggerId) { `; - shadowsSwitch.querySelector('input[type="checkbox"').checked = AppState.shadows; - ambientOcclSwitch.querySelector('input[type="checkbox"').checked = AppState.ambientOcclusion; + shadowsSwitch.querySelector('input[type="checkbox"]').checked = AppState.shadows; + ambientOcclSwitch.querySelector('input[type="checkbox"]').checked = AppState.ambientOcclusion; ATON.UI.elSidePanel.appendChild(ambientOcclSwitch); ATON.UI.elSidePanel.appendChild(shadowsSwitch); diff --git a/js/utils/clipping.js b/js/utils/clipping.js index e3b6a91..c87feac 100644 --- a/js/utils/clipping.js +++ b/js/utils/clipping.js @@ -131,16 +131,22 @@ function updateClipper (vector, point) { export function resetClipping () { AppState.clipping.enabled = false; ATON.disableClipPlanes(); - AppState.clipping.controls.deactivate(); - // Manually remove event listeners from DragControls!! - AppState.renderer.domElement.removeEventListener( 'pointermove', AppState.clipping.controls.onPointerMove ); - AppState.renderer.domElement.removeEventListener( 'pointerdown', AppState.clipping.controls.onPointerDown ); - AppState.renderer.domElement.removeEventListener( 'pointerup', AppState.clipping.controls.onPointerCancel ); - AppState.renderer.domElement.removeEventListener( 'pointerleave', AppState.clipping.controls.onPointerCancel ) - AppState.clipping.controls = null; - AppState.clipping.helper.removeFromParent(); - AppState.root.remove(AppState.clipping.helper); - AppState.clipping.helper = null; + + if (AppState.clipping.controls) { + AppState.clipping.controls.deactivate(); + // Manually remove event listeners from DragControls!! + AppState.renderer.domElement.removeEventListener( 'pointermove', AppState.clipping.controls.onPointerMove ); + AppState.renderer.domElement.removeEventListener( 'pointerdown', AppState.clipping.controls.onPointerDown ); + AppState.renderer.domElement.removeEventListener( 'pointerup', AppState.clipping.controls.onPointerCancel ); + AppState.renderer.domElement.removeEventListener( 'pointerleave', AppState.clipping.controls.onPointerCancel ) + AppState.clipping.controls = null; + } + + if (AppState.clipping.helper) { + AppState.clipping.helper.removeFromParent(); + AppState.root.remove(AppState.clipping.helper); + AppState.clipping.helper = null; + } AppState.clipping.plane = null; AppState.clipping.vector = null; // Ensure nav controls are reactivated!