/* ============================================================================= * B05_Profile_UI_Viewer_Debug.ts * 뷰어 **검증용 요약** — 코리도 빌드 결과를 `window.__corridorBuild` 에 얹는다 * (`__corridorClip`·`__corridorScene` 과 같은 용도). * * `B05_Profile_UI_Viewer` 에서 그대로 떼어냈다(700줄 제한, 2026-09-04). 계산은 없고 * 요약 형태만 있으므로 화면 동작에는 영향이 없다. * ========================================================================== */ import type { CorridorBuildResult } from "./B05_Profile_UI_Corridor_Build"; /** * 격자 재배치·투영선이 리본을 흔들었는지 화면 밖에서 수치로 확인한다(2026-08-26). * `raw` 는 원본 참조라 투영선이 실제로 서피스에 얹혔는지 좌표로 대조할 때 쓴다. */ export function setCorridorBuildSummary(build: CorridorBuildResult | null): void { (window as unknown as { __corridorBuild?: unknown }).__corridorBuild = build ? { ribbons: build.ribbons.map((ribbon) => ({ kind: ribbon.kind, side: ribbon.side, rows: ribbon.chainages.length, cols: ribbon.colCount, first: ribbon.chainages[0], last: ribbon.chainages[ribbon.chainages.length - 1], })), outlineRows: build.outline.chainages.length, outline: build.outline, // 구조물 솔리드 요약 — 어떤 시설이 몇 개 섰는지 화면 밖에서 센다(2026-08-28). // 부재키(2026-09-04)도 함께 낸다 — 3D 개별 선택이 무엇을 집었는지 대조한다. structures: (build.structures ?? []).map((solid) => ({ kind: solid.kind, key: solid.key ?? null, at: solid.chainage_m, rings: solid.rings?.length ?? 0, points: solid.polygon?.length ?? 0, })), raw: { ribbons: build.ribbons, planCurves: build.planCurves ?? [], cutWalls: build.cutWalls ?? [], }, planCurves: (build.planCurves ?? []).map((curve) => ({ source: curve.source, role: curve.role, side: curve.side, at: curve.setChainageM, loops: curve.loops.length, points: curve.loops.reduce((sum, loop) => sum + loop.length, 0), z0: curve.loops[0]?.[0]?.[2] ?? null, planZ: curve.planZ, })), } : null; }