diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 78c97b3..126eced 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -8,7 +8,8 @@ "Bash(timeout 8 npx tsx src/server/app.ts)", "Bash(node -e \"import\\('occt-import-js'\\).then\\(m => { console.log\\('occt-import-js loaded OK, keys:', Object.keys\\(m\\)\\) }\\).catch\\(e => console.error\\('FAIL:', e.message\\)\\)\")", "Bash(timeout 8 npx tsx --env-file=.env src/server/app.ts)", - "Bash(del \"D:\\\\REMOTE CODING\\\\stepview\\\\.gitea\\\\workflows\\\\build.yml\")" + "Bash(del \"D:\\\\REMOTE CODING\\\\stepview\\\\.gitea\\\\workflows\\\\build.yml\")", + "Bash(npm run *)" ] } } diff --git a/src/client/viewer/main.ts b/src/client/viewer/main.ts index fb186e2..fe9542e 100644 --- a/src/client/viewer/main.ts +++ b/src/client/viewer/main.ts @@ -286,12 +286,32 @@ async function loadStepGeometry(): Promise { fitCamera(group) addGrid(group) + // Diagnostics — always log tree state so browser console can confirm what arrived + console.log('[StepView] geometry version:', data.version) + console.log('[StepView] mesh count:', data.meshes.length) + console.log('[StepView] data.tree:', data.tree) + const treeContent = document.getElementById('tree-content') - if (data.tree) { - wireTreePanel(data.tree) - } else if (treeContent) { - treeContent.innerHTML = '

Tree unavailable — reconvert this model in the admin panel to enable.

' + if (!treeContent) return // not a STEP model or panel removed + + if (!data.tree) { + treeContent.innerHTML = '

No tree data — open the admin panel, edit this model, and click Retry Processing to rebuild geometry with tree support.

' + return } + + const nodeCount = countNodes(data.tree) + console.log('[StepView] tree node count:', nodeCount) + + if (nodeCount === 0) { + treeContent.innerHTML = '

This file has no named components in its hierarchy.

' + return + } + + wireTreePanel(data.tree) +} + +function countNodes(node: HierarchyNode): number { + return 1 + node.children.reduce((acc, c) => acc + countNodes(c), 0) } // ---- STL loader (client-side, Three.js built-in) -------------------------