Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-05-21 16:56:58 +00:00
parent 2503b36ea2
commit 38963d7e23
+7 -8
View File
@@ -759,37 +759,37 @@ function VisibilityApplier() {
useEffect(() => { useEffect(() => {
const st = useModelStore.getState(); const st = useModelStore.getState();
const { hiddenElementKeys, isolatedElementKeys, selectedElementKeys } = st; const { hiddenElementKeys, isolatedElementKeys, selectedElementKeys } = st;
let touched = 0, highlighted = 0;
scene.traverse((root) => { scene.traverse((root) => {
const modelId = root.userData?.modelId as string | undefined; const modelId = root.userData?.modelId as string | undefined;
if (!modelId) return; if (!modelId) return;
// For each ifcElement descendant inside this model root
root.traverse((el) => { root.traverse((el) => {
if (!el.userData?.ifcElement) return; if (!el.userData?.ifcElement) return;
touched++;
const key = elementKey(modelId, el); const key = elementKey(modelId, el);
const hidden = hiddenElementKeys.has(key); const hidden = hiddenElementKeys.has(key);
const isolated = isolatedElementKeys ? !isolatedElementKeys.has(key) : false; const isolated = isolatedElementKeys ? !isolatedElementKeys.has(key) : false;
el.visible = !(hidden || isolated); el.visible = !(hidden || isolated);
const selected = selectedElementKeys.has(key); const selected = selectedElementKeys.has(key);
if (selected) highlighted++;
el.traverse((m) => { el.traverse((m) => {
if (!(m instanceof THREE.Mesh)) return; if (!(m instanceof THREE.Mesh)) return;
const mats = Array.isArray(m.material) ? m.material : [m.material]; const mats = Array.isArray(m.material) ? m.material : [m.material];
mats.forEach((mat) => { mats.forEach((mat) => {
if (!(mat instanceof THREE.MeshStandardMaterial)) return; if (!(mat instanceof THREE.MeshStandardMaterial)) return;
if (selected) { if (selected) {
if (m.userData.__origEmissive === undefined) { if (m.userData.__origColor === undefined) {
m.userData.__origColor = mat.color.getHex();
m.userData.__origEmissive = mat.emissive.getHex(); m.userData.__origEmissive = mat.emissive.getHex();
m.userData.__origEmissiveIntensity = mat.emissiveIntensity; m.userData.__origEmissiveIntensity = mat.emissiveIntensity;
} }
mat.color.set('#f59e0b');
mat.emissive.set('#f59e0b'); mat.emissive.set('#f59e0b');
mat.emissiveIntensity = 0.6; mat.emissiveIntensity = 1.0;
} else if (m.userData.__origEmissive !== undefined) { } else if (m.userData.__origColor !== undefined) {
mat.color.setHex(m.userData.__origColor as number);
mat.emissive.setHex(m.userData.__origEmissive as number); mat.emissive.setHex(m.userData.__origEmissive as number);
mat.emissiveIntensity = (m.userData.__origEmissiveIntensity as number) ?? 0; mat.emissiveIntensity = (m.userData.__origEmissiveIntensity as number) ?? 0;
delete m.userData.__origColor;
delete m.userData.__origEmissive; delete m.userData.__origEmissive;
delete m.userData.__origEmissiveIntensity; delete m.userData.__origEmissiveIntensity;
} }
@@ -798,7 +798,6 @@ function VisibilityApplier() {
}); });
}); });
}); });
console.log('[VisibilityApplier] ran', { touched, highlighted, selectedKeys: Array.from(selectedElementKeys) });
}, [scene, nonce, models, opacity, renderMode, checklist]); }, [scene, nonce, models, opacity, renderMode, checklist]);
return null; return null;