diff --git a/src/components/three/ModelViewer.tsx b/src/components/three/ModelViewer.tsx index 24e460e..9c4132e 100644 --- a/src/components/three/ModelViewer.tsx +++ b/src/components/three/ModelViewer.tsx @@ -723,26 +723,16 @@ function SelectionHandler() { mouse.y = -((e.clientY - rect.top) / rect.height) * 2 + 1; raycaster.setFromCamera(mouse, camera); const intersects = raycaster.intersectObjects(scene.children, true); - const hit = intersects.find((i) => { - const o = i.object; - if (!(o instanceof THREE.Mesh)) return false; - if (o.userData.__edgeLine) return false; - if (o.geometry instanceof THREE.SphereGeometry) return false; - if (o.geometry instanceof THREE.RingGeometry) return false; - if (o.geometry instanceof THREE.PlaneGeometry) return false; - return true; - }); + const hit = intersects.find((i) => isPickableModelMesh(i.object)); if (!hit) return; + const element = findElementRoot(hit.object); let cur: THREE.Object3D | null = hit.object; - let element: THREE.Object3D | null = null; let modelId: string | null = null; while (cur) { - if (!element && cur.userData?.ifcElement) element = cur; if (!modelId && cur.userData?.modelId) modelId = cur.userData.modelId as string; cur = cur.parent; } - if (!element) element = hit.object; if (!modelId) modelId = useModelStore.getState().activeModelId; if (!modelId || !element) return; const key = elementKey(modelId, element);