diff --git a/docs/raw/요구_1025/_분석_434_사면안정_구조물군.md b/docs/raw/요구_1025/_분석_434_사면안정_구조물군.md index d1f71ed77..59158cd25 100644 --- a/docs/raw/요구_1025/_분석_434_사면안정_구조물군.md +++ b/docs/raw/요구_1025/_분석_434_사면안정_구조물군.md @@ -100,3 +100,81 @@ - 3D surface 가 소단 계단을 그대로 면으로 그리는지 — 부품 이름 「설계선만(몸체 없음)」 · 코리도 빌드가 design_line 을 읽는 것까지만 봄. - B08 사면안정 구조물 집계 — 지금 집계표가 배수 종류만이라 벽 · 소단 수량 길 없음(재작업 범위 · 이 조사 밖). - 안 A 에서 계산 자리 quantity = server 일 때 저장 노선 소단 값 — 지금 `C4.copy` 는 서버 값만 · 노선 초안 `bermAt` 은 브라우저 값 + 뒤 대조. 안 A 는 노선 초안 꼴로 맞추는 것으로 봄(코드상 둘 다 가능). + +--- + +## 2차 — 사면안정 그룹끼리 비교 (요구 436) + +1차의 포장 · 물넘이 · 세월교 · 맹암거 비교는 걷음. 같은 사면안정 그룹(옹벽 · 흙막이 · 돌쌓기 찰 · 메 · 큰돌쌓기 = 표 형상 wall)과 소단(표 형상 berm)만 견줌. + +### 2-1. 벽(옹벽 · 흙막이 · 돌쌓기)이 횡단에 들어가는 길 + +| 단계 | 하는 일 · 자리 | +|---|---| +| ① 구조물 목록 받기 | 서버 상세 읽기 `B06_Section/B06_Section_Router.py:254 · 462` → `attach_saved_shapes`(`B06_Section_Engine_Attach.py:186-199` · structures.json + 노선 관) · 브라우저 초안 `withDraftShapes`(`B06_Section/B06_Section_Section_Drafts.ts:130-158` · 초안 ?? 저장분) · 다시 셈 바로 앞 한 번 더(`B06_Section_Cross_Refresh.ts:138`) · 노선 초안 `attachStatus`(`B05_Profile/logic/B05_Profile_Pipeline_Detail.ts:234`) | +| ② 측점에 얹기 | 형상 얹기 한 벌 `attachShapes`(`common_util/common_util_structure_attach.ts:130-168` · 서버는 Node `facility.attach` 로 같은 TS · 못 부르면 파이썬 `_attach_python` `Engine_Attach.py:111-132`) → `wallSpecsFrom` · `attachWallSpecs`(`common_util/common_util_structure_walls.ts:105-168`) → **측점 겉 칸 `section.revetment`**(높이 · 형태 · 설치 측 · 기초 · 추가 단 · 전면 기울기) · 정본에 안 씀(읽을 때마다 걷고 다시 얹음) | +| ③ 횡단 계산 | `computeCrossDesign` 은 벽을 모름 → 설계선 · 면적 = 표준 사면 그대로 | +| ④ 계산 뒤 사면 자르기 | `computeRevetmentLayout`(`B06_Section/logic/B06_Section_Cross_Revetment_Geom.ts:160-334`) — 벽 자리(노견 · 조절 x · d) · 벽 도형 · 다단 → `designTrim`(:296-312) = **벽 상단에서 설계선을 끊음** · 노견→벽 상단 성토선 대신 · 벽 바깥은 원지반(면적 0). 묶음 = `computeStoredLayouts`(`Structure_Layouts.ts:95-131`) · 트림 고름 `trimOfLayouts`(:136-143 · 관 ?? 세월교 ?? BOX ?? 벽 — **한 측점에 트림 하나**) | +| ⑤ 측점 설계 칸에 쓰는 것 | 면적 칸만 덮어씀 — `cut_area_m2 · fill_area_m2 · cut_soil_area_m2 · cut_rock_area_m2`(`STRUCTURE_ROW_KEYS` `Structure_Layouts.ts:153` · `areaRowOf` :211 → 폐회로 `computeStructureAreas` `common_util/common_util_cross_structure_areas.ts:127-170` → `applyStructureAreaRows` :379) · 사용자 조절 `design.revet_adjust.own`(횡단 patch) · `design_line` 은 표준선 그대로 · 벽 제원은 design 에 안 씀 | +| ⑥ 면적 셈 부르는 자리 | 다시 셈 `Cross_Refresh.ts:155-163` · 상세 가게 `B06_Section_Section_Store.ts:132` · 노선 초안 `design_shared.ts:286-292` · 서버 Node `design_calc_node.ts:137` · `design_calc_node_cross.ts:95` — 파이썬 짝 없음(서버도 이 TS 실행) | +| ⑦ 토공 면적(B08) | `B08_Quantity/B08_Quantity_Engine_Earthwork.py:125` 가 design 면적 칸(덮어쓴 값)을 읽음 | +| ⑧ 횡단 그림 · B07 | B06 카드 `B06_Section/B06_Section_UI_Cross_Revetment.ts` · B07 덧그림 `B07_DesignDetail/B07_DesignDetail_Cross_Overlay.ts:493-500`(트림 설계선) · `:513`(벽) · CAD 장은 화면 덧그림으로 계획선 · 구조물 층을 갈아 끼움(`B07_DesignDetail_Engine_Cad_Sheet.py:248-249`) · 전개도는 structures.json 직접(`B07_DesignDetail_Engine_Cad_Development.py:146-160`) | +| ⑨ 3D | `B05_Profile/logic/B05_Profile_Corridor_Structures.ts:300-306` 벽 스윕(`section.revetment` → `computeRevetmentLayout`) · 비탈 면은 같은 `designTrim` 을 따름(`B05_Profile_Corridor_Envelope.ts:126 · 164`) | +| ⑩ 수량 | B08 구조물 집계 줄 없음(`B08_Quantity_Router_Summary.py:79-81` 배수만) · 벽 몸 ∩ 성토 겹침(`wallBodyInFillM2`)은 관 세트 벽만(`Structure_Layouts.ts:327-356`) | +| ⑪ 안정성(E03) | `E03_StabSection/E03_StabSection_Walls.py:37-50`(같은 `attach_saved_shapes`) · `E03_StabSection_Walls_Node.ts`(같은 `drawnProfile`) | +| 짝 | 제원 TS `common_util_structure_walls.ts` ↔ 파이썬 `B06_Section_Engine_Structures_Wall.py:72-110 · 179-197`(거울 `test_b06_structure_walls_mirror.py`) · 얹기 TS ↔ 파이썬(`test_323_4_attach_mirror.py`) · 자르기 기하 · 폐회로 면적 = TS 한 벌 | + +- 곁 발견(안 고침) — 평면 발자국 비탈 끝(`B05_Profile/logic/B05_Profile_PlanFootprint.ts:133-166` · 짝 B07 계획평면도 `B07_DesignDetail_Engine_Cad_PlanSlope.py`)은 `design_line` 만 읽고 벽 트림을 모름 → 벽이 선 자리도 표준 비탈 끝으로 그림(코드 읽기 · 화면 확인 못 함). + +### 2-2. 소단이 지금 들어가는 길(같은 단계로) + +| 단계 | 소단 | +|---|---| +| ① 목록 | 같은 structures.json · 받는 자리는 셋으로 갈림 — 노선 초안 `design_pipeline_page.ts:348` · 저장 노선 다시 셈 = 세션 사본(`Cross_Refresh.ts:231-242` ← `design_facility_lane.ts:155-182`) · [저장] `Cross_Save.ts:222-256` · `Router_Design.py:224` | +| ② 측점에 얹기 | **없음** — 측점 칸 없이 구간 목록(`common_util_berm_spans.ts:50-90`) → 측점마다 `bermSpecAt` | +| ③ 횡단 계산 | **계산 안쪽** — 성토 사면 꼭짓점에 계단(`common_util_cross_design_geometry.ts:346-361` `fillPoints` · 설계선 꼭짓점 :539-548) → 계단 뒤 사면이 지반과 새로 만나는 점(비탈 끝)을 찾음 | +| ④ 계산 뒤 | 없음 | +| ⑤ 설계 칸 | `design_line`(계단 든 선) · 면적(기본 적분) · `design.berm`(제원 메아리) · `berm_depth_left/right_m`(▲▼ 조절 · 횡단 patch) | +| ⑦–⑪ | 모두 `design_line` · 면적 칸을 그대로 읽어 따로 할 일 없음 — 평면 비탈 끝 · B07 사면길이(`SlopeGeometry.py:178 · 240`) · 3D 면 · E03 · 미교차 넓힘이 다 계단을 앎 | + +### 2-3. 소단을 벽 길로 옮길 수 있나 + +- **(ㄱ) 측점 칸 꼴만 같게(벽처럼 `attachShapes` 로 측점에 제원을 얹고 계산은 그 칸에서 읽음)** — 가능 · 값 0 차. 계단은 지금처럼 계산 안쪽. +- **(ㄴ) 계산 뒤 계단 덧 처리(벽과 완전 같은 문)** — 기하로는 되나 같은 값이 나오는 자리가 적음. + - 성질 차이 — 벽 트림은 **자름**(표준 사면을 벽 상단에서 끊고 벽면으로 지반에 닫음 · 새 교점 찾기 없음). 소단은 **늘림**(계단 뒤 사면이 더 바깥에서 지반과 만남 · 비탈 끝을 다시 찾아야 함 = 지금 계산 안쪽이 하는 일을 뒤에서 한 번 더). + - 밀리는 거리 — 폭 ÷ (1 − 성토 경사 n × 지반 기울기). 예 성토 1:1.2 · 지반 1:2(0.5) → 폭 0.5 m 가 비탈 끝을 1.25 m 밖으로 · 지반이 가파를수록 커짐. + - 토공 면적 — 뒤 처리가 같은 함수(`fillProfilePoints` · 지반 교점)를 다시 부르면 표본 안쪽 측점은 0 차. 밀린 비탈 끝이 지반 표본 밖이면 지금은 `slope_unclosed` → DTM 넓힘(+5 m · `extendUnclosed`)이 받아 주는데, 뒤 처리는 그 판정이 끝난 뒤라 못 받음 → 면적이 표본 끝에서 잘려 **작아짐**. + - 비탈 끝(daylight) 자리 — `design_line` 이 표준선으로 남음 → 평면 발자국 · B07 계획평면도 · 용지 경계가 소단 없는 자리(밀린 거리만큼 안쪽)로 그려짐. + - 횡단 그림 — 트림 선을 그리면 B06 · B07 덧그림은 같게 보임. 그러나 `trimOfLayouts` 가 한 측점에 트림 하나만 고름 → 벽 + 소단이 한 측점에 같이 서면 하나를 잃음 · 트림 합치기 새로 필요. 지금은 계단이 설계선 안에 있어 벽 트림이 그 선을 그대로 자름(겹쳐도 됨). + - 사면 길이 · 사면보호공(B07 횡단 수량표) · 3D 면 · E03 모형 · 성토 지반 기울기 칸 — 다 `design_line` 을 읽음 → 각 자리가 소단 트림을 따로 배워야 지금과 같음(한 벌이 아니라 여러 벌). + - 수량(B08 토공) — 면적 칸 덮어쓰기라 표본 안쪽은 0 차 · 표본 밖은 위처럼 작아짐. +- 결론 — 입구(측점 칸)는 벽과 같게 할 수 있음 · 계단을 넣는 시점(계산 안쪽)은 비탈 끝을 바꾸는 성질이라 그대로 두는 것이 맞음. + +### 2-4. 안 다시 정리 + +**가 — 사면안정 그룹 한 벌(소단도 옹벽처럼 측점에 얹음 · 계단은 계산 안쪽 그대로)** +- 범위 — 얹기: `common_util/common_util_structure_walls.ts`(또는 `common_util_berm_spans.ts`)에 소단 얹기 · 파이썬 짝 `B06_Section_Engine_Structures_Wall.py` · `common_util_structure_attach.ts:130-168` 한 줄 · `common_util_structure_shape_keys.ts` · `B06_Section_Engine_Attach.py:38 · 111-132`. 읽기: `B06_Section/logic/B06_Section_Cross_Refresh_Calc.ts:147-160`(측점 칸) · `B05_Profile_Pipeline_Detail.ts:256-264`(노선 초안도 측점 칸) · `crossWithBerm`(:123-146) · `design_shared.ts:258-266` bermAt · `design_pipeline_page.ts:348` · `design_pipeline_page_types.ts:65` · `design_calc_node_stages.ts:193`. 사본 지움: `design_facility_lane.ts:155-182 · 237 · 244` · `B06_Section_UI_Page_Persist.ts:128` · `b_page_state.ts`. [저장] 길(`Cross_Save.ts:222-256` · `Router_Design.py:224`)은 구조물 직접 그대로 둠. +- 시험 — `test_323_4_attach_mirror` · `test_b06_structure_walls_mirror` 늘림 · `test_272_berm_source` · `test_477_undo_now_berm` · `test_511_a_calc_browser.py:62` · helper 271 · 473. +- 값 영향 — 설계 값 0 차(같은 구조물 · 같은 셈). 측점 칸이 3D 지문(`B05_Profile_UI_Corridor_Structures_Hash.ts:41`)에 들어가 소단 측점 3D 저장본이 한 번 다시 셈 · 서버 상세에 새 칸. +- 위험 — 중간. 파이썬 얹기 짝 · 서버 Node 묶음(server-calc · corridor) 다시 짓기 · E03 이 같은 얹기를 씀. 저장분 옛 꼴 없음(structures.json · design.berm 그대로). 정본 자리 그대로(제원 = 구조물 배치 · 쪽 깊이 = 횡단 patch). + +**나 — 1차 안 A(사본만 없앰)** +- 범위 — 파일 7(`design_pipeline_page.ts` · `_types.ts` · `design_shared.ts` · `Cross_Refresh.ts` · `design_facility_lane.ts` · `Persist.ts` · `b_page_state.ts`) · 파이썬 · Node 묶음 없음. +- 값 영향 0 차 · 위험 낮음. 다만 소단 입구는 여전히 「구간 목록 → 측점마다 읽기」라 벽(「측점에 얹기」)과 다름. 가 의 일부(가 를 하면 나 도 됨). + +**다 — 그 밖** +- 다-1 계산 뒤 계단 덧 처리(벽과 완전 같은 문) — 2-3 (ㄴ) 까닭으로 권하지 않음(면적 · 비탈 끝 · 겹침 · 여러 자리 따로 고침). +- 다-2 그대로 둠 — 값 문제 없음 · 사본 · 두 번 셈은 남음. + +**권함 — 가.** 사용자 뜻(「사면안정 그룹끼리 같게」)에 맞는 것은 입구를 같게 하는 것 · 계단 넣는 시점은 성질이라 남김 · 값 0 차. 한 번에 크면 나 → 가 차례로 해도 끝은 같음. + +### 2-5. 사용자 물음 + +- 소단을 옹벽처럼 「측점에 얹는 한 벌」(가)로 갈지 · 사본만 없앨지(나). +- 벽과 소단을 한 구간에 같이 놓을 일이 있는지 — 지금 코드로는 벽 상단 바깥 사면을 벽이 잘라 그 아래 소단은 사라짐(화면 확인 못 함). + +### 2-6. 확인 못 함 + +- 화면 · 서버 실측 없음 — 밀리는 거리 · 면적 차는 식과 코드 읽기로만 · 실제 측점 수치 안 냄. +- 평면 발자국이 벽 트림을 모르는 것(곁 발견) — 코드 읽기만. +- 벽 + 소단 한 측점 겹침 모양 — 코드 읽기만.