# 다음 세션 프롬프트 — 교각 P11 (꺾임) > 그대로 복사해 붙이면 된다. 아래 `---` 부터가 프롬프트다. --- # 교각 P11 — 꺾인 코핑 ## 지난 세션에 P9 를 끝냈다 `산외교_파이형_교각일반도(울산P9).dwg` 로 **교각 한 기를 끝까지** 세웠다. 코핑 · 원형기둥 2 · 확대기초 2 · 버림 2 · 강관말뚝 44 · 받침 6기(교좌대·모르타르· 받침·솔플레이트) · 미관문양 2 = **77 파트 · 660.4154 m³**. 모델러 실측 대비 **불일치 0건**, 열린 변 0, IFC 내보내기까지 왕복 검증됐다. 이번엔 **P11** 이다. `산외교_파이형_교각일반도(울산P11-꺾임).dwg`. P9 와 뷰 구성이 같지만 **코핑 축선이 꺾여 있다.** 그게 이번 세션의 전부다. ## 먼저 읽어라 (순서대로) 1. `CLAUDE.md` — 경계 · 작업 순서 · 함정표 2. `docs/methodology.html` **11.4 절** — P9 실증 결과. 판정표 · 코어 변경 · 새 함정 3. `src/drawings/pier-p9.mjs` — **이번 작업의 원본이다.** 통째로 읽어라 4. `docs/2d-3d-conversion.md` 교훈 #29~#33 (지난 교량 세션) ## 대상 ``` drawings-src/산외교_파이형_교각일반도(울산P11-꺾임).dwg 도곽 CXBLKA1 INSERT (1,406,622, 390,000) × scale 100 × A1(841×594) → sheet x[1,406,622 … 1,490,722] y[390,000 … 449,400] ``` **도곽 밖은 전부 다른 벌이다.** 이 파일도 도면집 스택이라 17벌이 y 방향 65,000 간격으로 쌓여 있고, 그중 P9 자리는 치수선만 남아 있다. 상자를 눈으로 잡지 마라 — 도곽 블록에서 계산한다. ## 이미 확인한 것 (DWG 데이터에서 직접 잰 값) ``` 측점 STA.0+594.570 표고 EL. 82.799 · 82.306 · 81.713 (코핑 상면 3단으로 추정) EL. 44.413 (기초 저면) 기둥 Ø2,200 원형 3본 · CS-CONC-MINR CIRCLE 평면도 (1,416,488, 437,383) (1,425,088, 437,383) (1,433,616, 436,442) 기초평면 (1,416,488, 403,537) (1,425,088, 403,537) (1,433,616, 402,596) 받침 블록 500x500 ×3 · 530x530 ×2 · 470x470 ×1 연단거리 L=170.600 · H=36.203 · Theta=0 ``` ### 꺾임각 = **6.30°** ``` 기둥 1→2 Δx 8,600 Δy 0 → 0.00° 간격 8,600 기둥 2→3 Δx 8,528 Δy −941 → −6.30° 간격 8,580 ``` **두 뷰(평면도·기초평면도)에서 같은 941 이 나온다.** > ⚠ 지난 세션에 이걸 한 번 「8.7°」로 잘못 말했다. 전 색 각도 분포에 있던 > `81.3°/171.3°` 를 꺾임각으로 읽은 것인데, 구조 외곽선만(`ci=256`) 세면 그 > 대역이 없다 — **보조선 각도였다.** 기둥 축선에서 직접 잰 6.30° 가 맞다. > **각도를 선 분포에서 읽지 말고 부재 좌표에서 재라.** `(1,453,587, 436,249)` 의 Ø2,200 은 `CS-CONC-MAJR` 이고 x 가 19,971 떨어져 있다 — **단면 A-A** 의 기둥 단면이지 평면도 기둥이 아니다. ## 1단계 — 꺾임의 정체 (여기서 멈추고 보고) **캡처를 먼저 봐라.** 좌표만으로는 못 가른다. 1. **평면도** — 꺾이는 자리가 **기둥 3번 위**인가 그 **사이**인가. 코핑이 «각진 두 토막»인가 «한 곡선»인가. 꺾임부 폭·필렛 2. **정면도** — 파단선 위치 · 코핑 상면 단수 · EL 지시 위치 3. **단면도** — 코핑 교축폭 · 헌치 4. **기초 평면도** — 기초 3기인가 · 말뚝 배치(P9 는 22본×2) ## 2단계 — 형상 전략 (보고 후 진행) P9 코핑은 「정면 윤곽(YZ) × 교축 압출」 ∩ 「평면 윤곽 빗각기둥 2장」으로 섰다. **꺾이면 그 전제가 깨진다** — 정면도가 투영이라 실제 길이를 안 준다. 후보 셋. 캡처 보고 고른다. | 방법 | 되는 조건 | 걸림돌 | |---|---|---| | 꺾임점에서 **끊어** 두 토막을 각자 압출 | 두 토막이 각각 직선 | 이음매 union — 면으로만 맞닿으면 다음 boolean 이 흘린다 | | 토막마다 **로컬 좌표계** | 가장 정직 | IR 에 배치 개념이 없다. 코어 변경 | | 평면 압출 ∩ 정면 압출 | 꺾임이 평면에만 있고 정면이 실제 길이를 줄 때 | 대개 안 준다 | **끊는 쪽이 유력하다.** loft 는 쓰지 마라 — 결과가 안 닫혀 boolean 에서 샌다(아래). ## 절대 규칙 - `src/core/*` · `src/ir.mjs` 에 도면 고유값 금지. 레이어명 · 제목 · 좌표 · 단위 · 축척은 전부 `src/drawings/pier-p11.mjs` - **코어 수정이 필요해 보이면 먼저 보고해라.** 그게 방법론의 구멍이다 - 못 찾거나 여러 개면 예외를 던져라. 자동 선택 금지 - **손으로 읽은 수를 코드에 적지 마라.** 도면에서 집고 다른 값과 대조해라 - **그림을 먼저 봐라.** 뷰 상자를 잡기 전에 시트 → 도형 → 확인 → 상자 ## 게이트 (P9 에서 전부 통과시킨 순서) ``` 0. egm guide | 명령 수 208 이면 편집 모드 · 39 면 뷰어 모드(모델링 불가) 1. node src/run.mjs pier-p11 뷰 폭·높이가 도면 표기와 맞는가 2. node src/gaps.mjs pier-p11 끊김의 원인이 형상인가 파단선인가 3. node src/build.mjs pier-p11 --loops 꼭짓점 수·자기교차 node src/build.mjs pier-p11 --circles / --blocks node src/table.mjs pier-p11 --title "교량받침 ELEVATION TABLE" 4. node src/build.mjs pier-p11 IR 검증 5. node src/volume.mjs pier-p11 해석 부피 (모델러 없이) 6. node src/emit/egm.mjs out/pier-p11.ir.json python src/run_egm.py out/pier-p11.egm.json --export=out/pier-p11.obj 7. egm status modelCount == 최종 파트 수 8. node src/measure.mjs pier-p11 --ir 의도 vs 결과 (합격선 절대 0.05 m³) 9. node src/emit/ifc.mjs out/pier-p11.ir.json ``` ## 지난 세션에 코어를 이만큼 고쳤다 (되돌리지 마라) ``` C12 core/loops.mjs dropCollinear 중복점 제거 매달린 변 왕복이 길이 0 인 변을 남긴다. 압출하면 퇴화 면이 나온다 C13 ir.mjs · emit/egm.mjs · volume.mjs intersect 연산 BooleanIntersection 은 이항. 「두 방향이 동시에 맞아야 하는 형상」용 C14 ir.mjs · emit/egm.mjs · volume.mjs extrude.drift (빗각 기둥) Extrude C=True D F 가 자유방향을 받고 결과가 닫힌다 C15 core/parse.mjs collectBlocks · run.mjs · core/views.mjs · core/pick.mjs blocks() 말뚝이 INSERT 블록. 삽입점=위치, 배율=치수 C16 core/table.mjs (신규) · src/table.mjs (CLI) · run.mjs 색인 · pick.tables 표를 (이름표, CSV) 쌍으로 색인. 이름표 아래 글자높이 ×2 로 표를 찾는다 C17 run.mjs 뷰별 entityFilter 뷰마다 무엇이 구조선인지 다르다 (문양은 ci=2, 본체는 ci=256) C18 volume.mjs 교집합 해석 부피 ① 압출∩압출 닫힌 식 ② 종단∩평면(높이 가변) Z 슬라이스 가우스 C19 emit/ifc.mjs (신규) IFC4 출력. 해석 솔리드 우선 + IfcMapConversion C20 emit/egm.mjs loft → `~Loft Enter` + `~Cap` (그래도 boolean 엔 못 쓴다) ``` ## 새로 밟은 함정 (또 밟지 마라) | 증상 | 원인 | 대응 | |---|---|---| | **부피는 맞는데 boolean 이 샌다** | **`Loft` 결과가 안 닫힌다.** 4각형 단면도 열린 변 12개. 발산 정리 부피는 정확해 **부피 검사로 절대 안 걸린다** | loft 를 boolean 인자로 쓰지 마라. 평행이동뿐이면 `drift` 압출 | | 그려진 길이가 실제가 아니다 | **파단선.** 기둥이 6,100 인데 실제 33,800 | `CS-CUTL` 을 본다. 생략량 = 실제 − 도형 (derived) | | 한 파일에 도형 17벌 | 도면집 스택 | **도곽 블록에서 상자를 계산** | | 「단면도」 안쪽 선을 부재로 읽음 | **절단면이 아니라 투영** | 치수가 `외곽 − 2×R` 이면 투영 | | 평면 모서리가 45° 모따기 | 파서가 `bulges` 를 버려 90° 호가 현으로 눌림 | 호 끝점은 정확 → R 은 되찾는다. 링 면적은 못 믿는다 | | 적분값이 0.2 m³ 샘 | 구간 끝점이 링 꼭짓점 → 스캔라인 교차 수 어긋남 | 내부 노드 구적(가우스). 심프슨 금지 | | 구조 형상이 **표**로 잡힘 | 평면도 격자가 73행×83열 「표」 | 표 색인에 `layerFilter` | | `actualMeasurement` 로 단위 판정 실패 | 주요 m 표기 · 상세 mm 표기 (**표시값**이 온다) | 도곽 배율 · 블록 scale · 격자 간격으로 교차검증 | ## P9 에서 통한 방식 — 그대로 가져다 써라 ``` 단위 도곽 A1×100 · 블록 scale ↔ Φ 텍스트 · 격자 ↔ 「4@1.300」 → 넷 다 1단위=1mm 공통중심 부재 대칭으로 자기검증 (코핑 ±7,000 · 기초 ±3,250 · 기둥 ±4,100) 표고 공통 기준선이 없어도 **표가 준다** — EL.'X' = 코핑상면 + h1 + h2 6기가 모두 같은 절대표고를 내면 그게 원점이다 받침 평면도(위치·평면치수) × 표(적층고·표고·교축위치) 세 겹 검산 파단 생략량 = 기둥_높이 − 기둥_도형길이 (derived. 손으로 적지 마라) ``` ## 보고 형식 (매 단계) ``` 쓴 도면·도형: 무엇을, 왜 그것을 통과한 게이트: 막힌 곳: 게이트 번호 + 증상 + 원인 설정으로 해결: 무엇을 코드가 필요: 무엇이 왜 (← 방법론의 구멍) 방법론에서 틀린 것: 어느 절의 어느 주장이 새 함정: 증상 → 원인 → 대응 ``` ## 아직 안 한 일 (P11 과 별개, 여력 되면) 1. **`manhole1` 재검증** — loft 결과를 union·difference 인자로 쓴다. C20 의 함정 위에 서 있을 수 있다. 부피가 맞아 보여도 샜을 수 있다 2. **P9 미관문양 형상 재검토** — 사용자가 「제대로 안 된다」고 했다. 지금은 코핑 양 측면의 50 두께 띠 + 하단 250 구간 100 돌출로 세워져 있고, 정면도의 매달린 대각선 6줄(문양 내부 능선)은 재현 안 한다 3. **`docs/2d-3d-conversion.md` 에 교훈 #34~ 추가** — 위 함정표가 아직 안 옮겨졌다 4. **텍스트 셀렉터** — 기둥 높이·말뚝 길이가 아직 `design` 이다. 치수/표고 **텍스트**를 집는 수단이 없다. `blocks()` 를 만든 것과 같은 종류 ## 마지막 1. `docs/2d-3d-conversion.md` 에 교훈 추가 2. `docs/methodology.html` **11.5 절** 신설 — P11 이 무엇을 밝혔는지. 판정표를 그대로 싣고, 배지를 올리되 **틀린 주장은 지우지 말고 왜 틀렸는지 적어라** 3. `node src/ui.mjs pier-p11 --port 7333` 로 파라메트릭 UI 까지 확인 4. `node src/emit/ifc.mjs out/pier-p11.ir.json` 로 IFC 까지