From 7217747e819bb6e0b29ea44e9fa6df0c499b90aa Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sun, 23 Aug 2026 19:34:26 +0900 Subject: [PATCH] auto: 2026-08-23 19:34 (ESD_LAPTOP) --- B05_Profile/B05_Profile_UI_Corridor.ts | 2 +- B05_Profile/B05_Profile_UI_Corridor_Station.ts | 10 ++++++++++ B05_Profile/B05_Profile_UI_Viewer.ts | 4 +++- B06_Section/B06_Section_Engine_Design.py | 5 ++++- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/B05_Profile/B05_Profile_UI_Corridor.ts b/B05_Profile/B05_Profile_UI_Corridor.ts index 5a095997..9f9e5cbb 100644 --- a/B05_Profile/B05_Profile_UI_Corridor.ts +++ b/B05_Profile/B05_Profile_UI_Corridor.ts @@ -73,7 +73,7 @@ function fnv1a(text: string): string { * (2026-08-23 사용자 보고: "원복이 안 된 것 같다가 갑자기 반영됨"). 판번호를 해시에 * 섞어 두면 배포와 동시에 저장본이 만료된다. */ -const BUILD_VERSION = 5; // 절성토 완전 분리(행 지반 트림) — 저장본 만료. +const BUILD_VERSION = 7; // 측구 지형 스냅 오염 저장본 만료(뷰어 in-place 변형 수정). /** 종횡단 정본에서 코리도에 영향을 주는 입력만 요약해 해시 — 갱신 감지 기준. */ export function corridorHash(detail: SectionDetailResponse, routePoints: RoutePoint[]): string { diff --git a/B05_Profile/B05_Profile_UI_Corridor_Station.ts b/B05_Profile/B05_Profile_UI_Corridor_Station.ts index 96db78ba..8d7ee2a6 100644 --- a/B05_Profile/B05_Profile_UI_Corridor_Station.ts +++ b/B05_Profile/B05_Profile_UI_Corridor_Station.ts @@ -244,6 +244,16 @@ export function classifyStation(section: CrossSection): StationPieces | null { put("ditch", "right", roadR - ditchWidth, roadR); slopeStartR = roadR - ditchWidth; } + // 측구 바깥(노견 반대측) 상단은 **노견과 같은 Z**로 맞춘다 — 설계선 표본이 + // 모서리를 비껴가거나 L형처럼 바닥에서 끝나면 그 자리가 노견보다 낮게(또는 + // 지반을 따라) 그려진다(2026-08-23 사용자 지시). + const ditchKey = pieceKey("ditch", ditchSide); + const ditchPiece = pieces.get(ditchKey); + if (ditchPiece && ditchPiece.length >= 2) { + const edgeZ = design.road_edges[ditchSide].elevation_m; + const outer = ditchSide === "left" ? ditchPiece[ditchPiece.length - 1] : ditchPiece[0]; + outer.elevation_m = edgeZ; + } } // 비탈 끝 = catch point(설계선-지반 교차) — 그 밖은 설계선이 지반을 따라갈 뿐 // 절·성토 점유가 아니므로 코리도·클리핑에서 제외한다(2026-08-23 화면 검증 수정). diff --git a/B05_Profile/B05_Profile_UI_Viewer.ts b/B05_Profile/B05_Profile_UI_Viewer.ts index f7a63379..dfe36ad6 100644 --- a/B05_Profile/B05_Profile_UI_Viewer.ts +++ b/B05_Profile/B05_Profile_UI_Viewer.ts @@ -532,7 +532,9 @@ export function createRouteViewer(): RouteViewer { const oy = (bounds.y[0] + bounds.y[1]) / 2; const oz = (bounds.z[0] + bounds.z[1]) / 2; build.ribbons.forEach((ribbon) => { - if (ribbon.kind !== "cut" && ribbon.kind !== "fill" && ribbon.kind !== "ditch") return; + // 측구는 제외 — 바깥 상단은 노견과 같은 Z가 규칙(2026-08-23 사용자 지시). + // 지형 스냅하면 측구 바깥벽이 원지반까지 끌려 올라가 U형이 깨진다. + if (ribbon.kind !== "cut" && ribbon.kind !== "fill") return; const cols = ribbon.colCount; const outerCol = ribbon.side === "right" ? 0 : cols - 1; const innerCol = ribbon.side === "right" ? cols - 1 : 0; diff --git a/B06_Section/B06_Section_Engine_Design.py b/B06_Section/B06_Section_Engine_Design.py index 09a77a6e..fdfbc58d 100644 --- a/B06_Section/B06_Section_Engine_Design.py +++ b/B06_Section/B06_Section_Engine_Design.py @@ -206,12 +206,15 @@ class _SectionGeometry: edge_z = self.road_z(edge_offset) if self.has_ditch: if ditch_type == "l_type": - # L형: 노면 끝에서 폭 W 동안 깊이 D로 내려가는 경사 바닥 한 조각. + # L형: 노면 끝에서 폭 W 동안 깊이 D로 내려가는 경사 바닥 + 바깥 수직벽. + # 바깥(노견 반대측) 상단은 **노견과 같은 표고**로 닫는다 — 사면 시작점이 + # 측구 바닥 높이로 내려가면 안 된다(2026-08-23 사용자 지시). width = group["l_ditch_width_m"] depth = group["l_ditch_depth_m"] self.ditch_points = [ (edge_offset, edge_z), (edge_offset + outward * width, edge_z - depth), + (edge_offset + outward * width, edge_z), ] else: # 일반: 상단폭/저폭/깊이 사다리꼴.