chore(plan): 5차 조사 둘 — B05 3D 방식 이력 · B08 자재 집계표 재확인

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LLCk2y5xE8YGVgjbTntWsY
This commit is contained in:
2026-10-08 20:41:54 +09:00
co-authored by Claude Opus 5.5
parent 6cd63009aa
commit 2ecbd9f49b
2 changed files with 108 additions and 0 deletions
@@ -0,0 +1,55 @@
# 조사 — B05 3D 방식 이력 · 「탑뷰 스케치 + 메시 자르기」 직전 방식 (10-8 밤 · 읽기 전용 조사 에이전트)
사용자 말: 3D 형상 개선에 집중 · 깃 이력에서 탑뷰 스케치를 적용하고 메시를 자르던 방식으로 넘어가기 직전 코드를 찾음 · 새 방식(115) · 단추 유지 · 찾기부터(작업 금지).
**한 줄 결론** — 넘어가기 직전 = `6e87dd6cd`(08-25 15:41) 「실루엣 갈아 끼우기」 · 탑스케치 · 절단은 다음 커밋 `f6296fa7c`(08-25 20:03)부터 · 옛 방식 핵심 코드는 지금도 꺼진 채 남음(`_Station.ts:101` `STRUCTURE_SILHOUETTE_OVERRIDE = false`).
파일 접두 `B05_Profile/B05_Profile_UI_Corridor_`.
## 1. 지금 방식 파일들의 첫 커밋
| 파일 | 첫 커밋 · 시각 | 요지 | 계획서 |
|---|---|---|---|
| `_Clip.ts` | `3b997963e` 08-23 12:28 | 코리도 서피스 · 원지반 경계 재절단(첫날부터 지형을 띠로 자름) | `2026-08-23_plan_..코리도_서피스.md:12,21` |
| `_Region.ts`(`_Carve` · `_Union` 같이) | `f6296fa7c` 08-25 20:03 | 구조물 3D 투영 표기 · 직교 카메라 | 계획서 없음(docs 는 09-09 부터 깃) · `2026-08-27_plan_..절취_패치.md:485-487` 회고 |
| `_Plan.ts` | `5a3b2ebe3` 08-26 09:42 | 탑뷰 투영 커브 재작성 — 세트별 상단 +5 m 평면 | `2026-08-26_plan_..3D투영커브.md:69-160` |
| `_Plan_Footprint.ts` | `b29113ba2` 08-26 17:18 | 풋프린트 링별 편거리 병합 | 같은 문서 `:168-170`(사용자 「기존 코드를 사용하지 말 것」) |
| `_Cut.ts` | `753e8fcb4` 08-26 22:32 | 투영 커브 안 성토면 셀 단위 지움 | `2026-08-27_plan_..절취_패치.md:114-191`(0-2) |
`_Skirt.ts`(`a864acd17`) · `_Carve_Wing.ts`(`a75618106`)는 08-27.
## 2. 방식 이력 (시간순)
| 날짜 | 커밋 | 방식 | 지형 | 비탈 · 구조물 | 바뀐 까닭 |
|---|---|---|---|---|---|
| 08-23 | `3b997963e`→`8393d22c2` | ⓪ 리본만 | 비탈 끝선 띠로 지형 재절단 · 바깥 열 높이 붙임 | 5종 리본 · 행별 지반선 자름 · 구조물 없음 | 시작 |
| 08-23 21:46 ~ 08-25 15:41 | `22d4df5af`→**`6e87dd6cd`** | **Ⓐ 실루엣 갈아 끼우기** | ⓪ 과 같음 | 배수관 세트 측 비탈을 B06 실루엣 한 줄로 교체 · 구조물 구간 단면 고정 · 이웃 측점까지 테이퍼 · 구간 안 지반에서 안 자름 · 솔리드 얹음 · 세월교 · BOX 는 솔리드만(비탈 원본) | 08-23 사용자 「3D 가 B06 횡단을 그대로」 |
| 08-25 20:03 | `f6296fa7c` | Ⓑ 투영 표기 | 코리도 띠만 자름(「투영 및 삭제는 원지반 제외」 `_Clip.ts:426`) | 실루엣 끔 → 원본 직선 비탈이 솔리드와 겹침 · 성토면 위 절단 투영선 · 지형 최고표고 +2 m 평면 윤곽 · 절단 · 패치는 `CARVE_APPLY=false` | 08-25 사용자 「기존 성토면을 강제 변형시키던 로직 비활성화」 · 「절단하지 말고 투영선만」 |
| 08-26 낮 | `5a3b2ebe3`→`398b5bdff` | Ⓒ 탑뷰 스케치 | Ⓑ 같음 | 세트별 +5 m 평면 커브 6종 · 풋프린트 · 빨간 투영선 | 평면고 구조물 무관 · 커브 기준 제각각 · 이중 표기(08-26 계획 `:71-74`) |
| 08-26 22:32 ~ 08-27 | `753e8fcb4`→`3a5680fd7` | Ⓓ 스케치 + 메시 자르기(지금 방식) | 띠 + 잘린 자리(`cut-merged`) 안 원지반 되살림 | 셀 마스크 · 측벽 · 되메움 패치(`fillRuns`) · 스커트 · 날개 | 08-26 사용자 「투영 커브가 감싸는 성토면을 지운다 · 한 가지 방법으로」(08-27 계획 `:116-126`) |
| 10-08 | `01c2a5983` · `a92e1768c` | Ⓔ 새 방식(115) | 지형 정점 높이 clamp | 노면부 리본 + 솔리드 + 마스크 | 파편화(`검토_B05_3D_메시변형.md` 2절) |
- 08-27 「Ⓐ 부활」 기각 — 사용자가 포켓 되메우기를 고름(「0-2~0-6 에서 버린 길」 · 고정 열 리본 접힘 — 08-27 계획 `:518-527` · `:550-552` · `:561-569` · `:606-607`).
- 08-25 오후 커밋 안 된 시도(추정) — `f6296fa7c` 하나에서 `BUILD_VERSION` 19 → 31(12번) · 「"잘라내기"에서 "투영 표기"로」 → BOX · 세월교 실루엣 일반화 · 절단 · 패치를 켜 봤다가 끈 것으로 보임(커밋 없음).
## 3. 넘어가기 직전 방식 — `6e87dd6cd` 「실루엣 갈아 끼우기」
- 근거: 탑스케치 · 절단 코드가 처음 들어온 커밋 `f6296fa7c` 의 바로 앞 · 08-25 15:41~20:03 사이 다른 브랜치까지 코리도 커밋 없음.
- 파일 · 줄 수(3,602줄): `_Build` 635 · `_Station` 565 · `_Structures` 533 · `_Clip` 520 · `_Mesh` 387 · `_Structures_Box` 319 · 본체 292(`BUILD_VERSION` 19 · 봉투 v1) · `_Terrain` 132 · `_Split` 121 · `_Frames` 98 · 뷰어 `B05_Profile_UI_Viewer.ts` 692 안.
- 핵심: `classifyStation`(`_Station.ts:217` · `:284-430` 배수관 세트 측 비탈을 [노견 → 노폭 연장 → 벽 상단 → 전면 → 성토부선 → 다단 벽 → 지반] 한 줄로 · 노폭 연장분은 노견 리본 넓힘 · `:427` resample 로 고정 열 수(성토 48 · 절토 20 `:22-34`)) · `buildPieceControls` · `bracketControls`(`_Frames.ts:30,83` 구간 경계 제어점 · 안 고정 · 밖 이웃 측점까지 선형 테이퍼) · `buildCorridor`(`_Build.ts:227` · 0.2 m 행 루프 · 구조물 단면 섞인 행은 `fixedSlopeKeys`(`:383`)로 지반에서 안 자름(`:481`) · 나머지는 `mixedGround` + `trimSlopeToGround`(`:449`) · 외곽선 = 행 실제 점유 끝(`:591`) · 솔리드 `buildCorridorStructures`(`:634` · `_Structures.ts:216`)) · 지형 `CorridorStrip` · `clipTerrain`(`_Clip.ts:57,488`) 외곽 띠만 · 뷰어 `snapCorridorEdges`(`:527`) 바깥 열 높이 지형에.
- 모습: 구조물 자리 성토면이 B06 횡단 실루엣 모양으로 휘어 벽 상단 · 성토부선에 이어지고 그 위에 솔리드 · 지형은 비탈 끝까지만 잘림 · 스케치 · 셀 마스크 · 측벽 · 패치 · 원지반 되살림 없음.
- 바뀐 까닭: 08-25 사용자 지시(`f6296fa7c:_Station.ts:89-100` 주석 · AI 판단 「서피스를 비틀지 않고 잘라내는 쪽이 깨끗」) · 그 전 결함: 구조물 구간 경계 단차 8.1 m · 노폭 3.0 m(`83eb58a25`) · 실루엣 점 순서 엉킴(`b5ceb8613`) · 비탈 높이 뒤집힘(`38fd7e49e`) · 고정 열 재추출로 다단 계단 접힘 · 벽 전면이 성토색(08-27 계획 D `:518-527`).
## 4. 세 번째 방식으로 되살리는 길 (판단만 · 구현 안 함)
권장 — 파일 복사 대신 지금 남은 꺼진 경로를 켜는 손잡이를 단추로:
1. `_Station.ts:101` 상수 → `classifyStation(section, { silhouette })` 인자(기본 끔 · `_Deform.ts:207` · `_Deform_Structure.ts:115` 호출 그대로).
2. `buildCorridor` 에 `legacy` 옵션 — 켜면 `:599-626`(스케치 · 자르기 · 패치) 건너뛰고 `{ribbons, outline, caps, structures}` 만(= 6e87dd6cd 꼴) · `.map(classifyStation)` 은 인덱스를 둘째 인자로 넘기므로 람다로(`_Build.ts:182`).
3. 새 파일 `B05_Profile_UI_Corridor_Legacy.ts`(약 40줄) — 해시별 메모 · 저장 안 함 · 입력(detail · routePoints · samples)은 본체 `refreshCorridor` 에서 `withSections`(`:239-246`) 처럼 메모리로.
4. 뷰어 `_Viewer_Corridor.ts` 모드 셋 — 옛 방식 A = 옛 빌드로 `snapCorridorEdges` → `createCorridorGroup` → `clipTerrain`(`cut-merged` 없음 → 띠만 자르는 옛 동작 `_Clip.ts:388-422`) · 지금 방식 · 새 방식 그대로(`:288-291` · `:311-320`).
5. 단추 `_Panel_View.ts:67` 토글 → 3단 순환(옛 A → 지금 → 새) · 설정 키 `corridor-deform`(`b_page_state.ts:70`)에 "A"/"0"/"1" · 지금 `corridorDeformOn` 이 `!== "0"` 으로 읽어 "A" 를 새 방식으로 잘못 읽음 → 고침.
6. 시험 1건(`helper_115` 꼴): 옛 빌드에서 275.71 성토 리본이 직선 1:1.2 가 아님 · `planCurves` · `cutWalls` 없음 · 기본 빌드 그대로.
크기: 고칠 파일 5 + 새 파일 1 + 시험 1 · 약 100~150줄(추정) · 다른 길(6e87dd6cd 파일 통째 옮기기)은 약 1,300줄 중복 · 두 벌 갈라짐 → 비권장.
부딪히는 곳: 자료형(선택 필드 비우기만 · 저장 안 하니 봉투 무관 `_Envelope.ts:271`) · 실루엣 범위(지금 `structureSilhouettes` `_Station_Structure.ts:377` 는 BOX · 세월교까지 · 6e87dd6cd 는 배수관 세트만 — BOX 는 구체 최상단에서 끝나 그 아래 틈 · 세월교 points 에 벽 전면 → 관 구멍 · 유로가 성토색(08-25 사용자 ② 지적)) · 솔리드는 지금 것(08-25 화면과 똑같지 않음 — BOX 직선 압출 · 날개 · 에이프런 · 독립 기슭막이 08-28) · 저장본 버전 · 해시 · Node 사전생성 안 건드림(`BUILD_VERSION` 92 · 옛 A 는 브라우저 첫 전환 때 즉석 · 지금 전체 재계산 4.7초보다 짧을 것 · 추정) · `snapCorridorEdges` 가 리본을 제자리에서 고치므로 옛 빌드는 따로 둔 객체.
위험(옛 방식이 버려진 까닭이 돌아옴): 성토 48열 호길이 재추출로 275.71 3단 기슭막이 리본 접힘 · 계단 모서리 뭉개짐 · 구조물 구간은 소유 측점 단면 복사 → 구간 안 다른 행에서 지형보다 뜨거나 묻힘(지반에서 자르면 8.1 m 절벽 자리 · 6e87dd6cd `_Build.ts:379-383`) · 지형은 비탈 끝까지만 · 바깥 열 높이만 → 측점 사이 계곡 틈 · 겹침(추정).
## ⬜ 사용자가 정할 것
1. 「넘어가기 직전」 = `6e87dd6cd` 가 맞는지(다른 후보 `f6296fa7c` 투영 표기 · 안 자름 / `398b5bdff` 스케치만 · 안 자름).
2. 실루엣 범위: 08-25 15:41 그대로(배수관 세트만 · BOX · 세월교는 원본 비탈) vs 셋 다(그날 오후 켰다 끈 상태 추정 · 커밋 없음).
3. 단추 꼴: 3단 순환 단추 하나 vs 「옛 방식 A」 토글 하나 더.
4. 옛 방식 A 는 저장하지 않고 브라우저에서 즉석(첫 전환 때 몇 초)에 동의.
5. 비교 뒤 셋 중 무엇을 남길지(115-3 옛 방식 삭제 계획과 겹침).
@@ -0,0 +1,53 @@
# 조사 — B08 자재 집계표 셋 구현 · 로직 재확인 (10-8 밤 · 읽기 전용 조사 에이전트)
결론 — 계산 사슬은 엑셀과 같고 TS · 파이썬 짝도 실제 자료에서 같은 값 · 「구현 안 됨」처럼 보이는 까닭 둘: ① 단위수량 기본값 빈칸(관매설 1 만) ② 횡단배수 밖 구조물(B05 구조물 · 단독 기슭막이 · 조합 열)은 표에 안 들어옴 → 검증_sub1 에서 총괄 25줄 중 6줄(파형강관 · 커플링)만 값 · 콘크리트소요 수량 전부 빈칸.
## 1. 엑셀과 코드 대조
같은 점: 끌어오는 차례(구조물집계표 16행 → 자재수량 `$C×단위수량` · `SUMIF` 66행 → 콘크리트소요 `㎥당×C` → 총괄) · 콘크리트소요 C6 = I66 · C9 = R66 · 총괄 `÷1000` · `÷40` → `×(1+할증)` → 끝수 · 자재 열 25개 차례 · 커플링 = 집계표 계 · 할증은 총괄에서 한 번 · 단위(kg→ton ÷1000 · kg→대 ÷40 · 채집 ㎥는 총괄에 안 넣음).
| 엑셀 칸 | 엑셀 | 우리(파일:줄) | 다른 점 | 영향 |
|---|---|---|---|---|
| 자재 6~65행 단위수량 | 손 상수(찰 H2.0 = 0.31 · 0.42 · 0.019 · 1.92 · 0.31 · 0.75) | 기본 빈칸 · 관매설만 1(`Material_Calc.py:214-217` · `.ts:219`) | 기본값 없음 | 표 사실상 빈칸 |
| 자재 A~D(30종) | 구조물집계표 열(기슭막이 · 옹벽 · 떼공 · 측구 · 콘크리트포장 · 혼합석 · 개거 · 난간 · 번호판 · 표지석 · 취수정 · 관공) | 서버 열만(`Router_Material.py:37-38`) = 횡단배수 7종(`Router_Summary.py:72 · 451`) · 조합 열 칸 빈칸(`UI_Summary.ts:151 · 215-222`) | B05 구조물 · 단독 기슭막이 줄 없음 | 레미콘 25-21 · 와이어메쉬 · 혼합석 · 떼 · 철근은 물넘이포장 말고 끌어올 곳 없음 |
| 콘크리트 F6 · H6(Φ40) | 0.48 · 0.65 ㎥ | 0.456 · 0.612(775/1700 · 1101/1800 `Material_Calc.py:61-73` · `.ts:104-110`) | 약 5~6 % 적음 | 견본 모래 14.59 → 13.92 · 자갈 18.02 → 16.97 |
| 콘크리트 5행(Φ25) · 7행(무근) | 0.51 · 0.59 / 312 · 0.46 · 0.70 | 0.487 · 0.562 / 빈칸 | 값 다름 · 무근 빈칸 | 지금은 C 빈칸 |
| 총괄 F4 · F5 · F18 | 6 · 4 · 2 % | 좌측 패널 12 · 5 · 3(124 사용자 확정) | 의도 | 견본 16 · 18 · 246(엑셀 16 · 19 · 244) |
| 총괄 6행 막자갈 | 4 % · 수량 빈칸 | 줄 없음 | 빠짐 | 없음 |
| 총괄 F7 혼합석 | 2 % | 4 %(`Material_Calc.py:89` · `.ts:121`) | 다름 | 혼합석 생기면 2 % 더 |
| 총괄 G9 · G11 레미콘 25-24 · 25-18 | `ROUND(…,2)` → 31.62 | 올림 0자리 → 32(`:288` · `.ts:294`) | 방식 · 자리 | +0.38 ㎥ · test_121 이 32 기대 |
| 총괄 G13~G17 철근 · 와이어메쉬 | `ROUND(…,3)` | 철근 올림 3자리 · 와이어메쉬 올림 0자리(`:93-98`) | 방식 · 자리 | 와이어메쉬 정수 올림 |
| 총괄 G18 시멘트 | `ROUND(…,0)` | 올림 0자리 | 방식 | .5 미만이면 1대 차 |
| 총괄 소계 줄(G8 · G12 · E14 · H5 · H26) | 레미콘 계 · 철근 계 · 소계 · 자갈 합 · 깬돌 합 | 없음 | 꼴 | — |
| 총괄 C19~21 | `Φ800mm,2.7mm` | `Φ800mm` | 두께 없음 | 꼴 |
| 자재 68행 | 채집석 공제 274.66 → 토적집계표 H32 `=-자재!Y68` | 없음 | 사토 공제 사슬 없음 | 토공 사토가 엑셀보다 많음 |
| 세월교 관 | (2공구 없음) | 월류 폭 m · 본체 개소만(`Router_Summary.py:333-358`) · 관 길이 칸 없음 | 세월교 몫 파형강관 · 커플링 없음(추정) | sub1 Φ1000×2련 2곳 빠짐 |
모르터 510 kg 은 품셈상 할증 포함 값인데 시멘트 할증이 또 붙음(엑셀도 같은 중복).
## 2. 실제 자료 — 검증_sub1(`initial_snapshot/db.json` 10-06 판 · 66측점 · DB 안 씀 · B05 structures 0 · project_settings 없음 → 기본값)
- 구조물 집계표(서버) 열 11: 흙막이 돌쌓기(찰) H=1.5 90 m · 관매설 Φ800 63 · Φ1000 11 · Φ1500 20 m · 커플링 6 · 1 · 2 · 세월교 월류 폭 20 m · 본체 2 · 날개벽 2 · 2.
- 자재수량 8줄 × 25열 — 관매설 3줄만(단위 1) · 흙막이 · 세월교 5줄 단위수량 빈칸 → 수량 빈칸 / 콘크리트소요 5줄 수량 · 계 전부 빈칸 / 총괄 25줄 중 6줄(관 63 · 11 · 20 · 커플링 6 · 1 · 2).
- 관보호공(돌집수정) 줄 없음(「집수정 모양 기록 없음 9곳」 — 엑셀에서 가장 큰 줄 · 지금 DB 판엔 채워졌을 수 있음 · 추정).
- 사슬은 돎: 엑셀 6행(찰 H=1.5) 단위수량을 흙막이 줄에만 넣어 보면 25-18 = 29 · 시멘트 9,654 kg → 249대 · 모래 16 · 자갈 18 · 깬돌 45 = 130 ton · TS = 파이썬.
## 3. 화면 — 「구현 안 됨」으로 보일 까닭(추정)
1. 총괄 · 콘크리트 칸 대부분이 「-」도 0 도 아닌 빈칸(`UI_Material.ts:263`) 2. 빈 까닭 안내 없음(「단위수량은 빈칸」은 자재수량 탭에만 `:43-48`) 3. 자재수량 탭은 빈 입력칸만 줄 × 25열 · 넣을 기준 없음(`:97-139`) 4. 실무 표의 콘크리트포장 · 측구 · 번호판 · 표지석 · 취수정 줄 없음 5. 보조 탭이 작은 ghost 단추 · 처음엔 집계표(`UI_Page.ts:64-69 · 83`) 6. 자재 열 머리 76 px 말줄임(줄바꿈 규칙은 집계표에만 `UI_Page.css:35-39`) 7. [저장] 둘(좌측 패널 = 할증 · 표 위 = 나머지) 8. 데스크탑에서 봤다면 124 가 없었음.
## 4. 고칠 흠
| # | 흠 | 자리 | 고칠 방법 | 크기 |
|---|---|---|---|---|
| 1 | 단위수량 기본값 없음 | `Material_Calc.py:214-217` · `.ts:219` | 기본 단위수량 표 한 벌(줄 id → 자재 값) · 사용자 값 우선 · 거울 시험 | 중간(원천 ⬜) |
| 2 | 조합 열 구조물 · 단독 기슭막이 빠짐 | `Router_Material.py:36-45` · `Router_Summary.py:72 · 451` | (가) 자재수량 표 「줄 추가」(손 입력 · overrides) (나) 서버가 B05 구조물 수량 열 펼침 | (가) 중간 · (나) 큼 |
| 3 | 빈 까닭 안내 없음 | `UI_Material.ts:43-48 · 253-255` | 총괄 · 콘크리트 위 「단위수량 빈 줄 n개」 + 서버 notes 한 줄 | 작음 |
| 4 | 끝수 처리 | `Material_Calc.py:86-107 · 288` · `.ts:118-139 · 294` | 줄마다 ROUND/올림(엑셀 꼴) · test_121 기대 고침 | 작음 |
| 5 | 혼합석 4 % · 막자갈 줄 없음 | `:89` · `.ts:121` | 엑셀 꼴(2 % · 막자갈 줄) | 작음 |
| 6 | ㎥당 모래 · 자갈 | `:61-73` · `.ts:104-110` | 결정대로 | 작음 |
| 7 | 세월교 관 미계상(추정) | `Router_Summary.py:333-358` | 세월교 관 길이(B06 새 키)를 `pipe:len|{d}` · 커플링에 더함 | 중간 |
| 8 | 자재 열 머리 말줄임 | `UI_Page.css` | `[data-b08-material] thead th` 줄바꿈 | 작음 |
| 9 | 채집석 공제 사슬 없음 | 자재 68행 → 토공 사토 | 돌(채집) · 고임돌 · 막자갈 계 → 사토 공제 | 중간 |
## ⬜ 사용자가 정할 것
1. 단위수량 기본값 원천: 2공구 엑셀 값 / 지식DB 라이브러리(사무소마다 다름 — 돌붙임 찰 0.2 대 0.3 `_종합비교/04_임도구조물_원단위.md:37`) / M02 일위대가 자재 / 손 입력 유지 · 엑셀에 없는 H(1.0 · 2.5) · 세월교 · 날개벽.
2. 조합 열 구조물 수량 C: 손 입력 줄(가) vs 서버 자동(나).
3. ㎥당 모래 · 자갈: 품셈 기준 0.456 · 0.612 vs 실무 0.48 · 0.65 · 무근 312 kg.
4. 끝수 처리 · 혼합석 할증.
5. 채집석 공제를 토공 사토에 이을지 · 모르터 시멘트 할증 중복.