feat(B06): 성토 물매 1:1.2 고정 — 벽이 나간 만큼 노폭 연장
물매를 1:1.2~2.0 범위에서 역산하던 방식을 걷어내고 **수평 1.2 : 수직 1 고정**으로 바꿨다(2026-08-21 사용자 확정). 벽이 1:1.2 사면이 닿는 자리보다 밖에 있으면 물매를 완만하게 바꾸는 대신 **노폭을 그만큼 늘린다** — 기슭막이를 바깥으로 1m 밀면 노폭이 약 1m 늘어난다. - fillSlopeOf가 [원 노견 → 연장된 노견 → 벽 이음선 상단점] 폴리라인을 돌려주고, 설계선 오버레이가 그 폴리라인을 그린다(노면 연장 구간이 수평으로 붙는다). - 반대로 벽이 안쪽이라 물매가 1:1.2보다 급해지는 자리는 노폭으로 못 맞춘다(도로를 좁힐 수는 없다) — 자동 자리를 1:1.2가 될 때까지 바깥으로 미는 처리를 유지한다. - fillSlope.roadWideningM 신설, 툴팁에 "노폭 연장 x.xxm" 표시. 검증(계획고 스윕 24케이스): 물매 23건이 정확히 1:1.200(나머지 1건은 성토고 0.2m로 사면이랄 게 없는 측점). 벽 이동 시험 — 밖으로 1m씩 밀 때 노폭 연장 1.52→3.27→ 4.22→5.21m, 물매는 계속 1:1.200. tsc 통과, pytest 148 pass. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -451,14 +451,8 @@ export function appendCrossDesignOverlay(
|
||||
maxOffset: number;
|
||||
minElevation?: number;
|
||||
maxElevation?: number;
|
||||
minSlope?: {
|
||||
from: { offset: number; elevation: number };
|
||||
to: { offset: number; elevation: number };
|
||||
};
|
||||
maxSlope?: {
|
||||
from: { offset: number; elevation: number };
|
||||
to: { offset: number; elevation: number };
|
||||
};
|
||||
minSlope?: { points: Array<{ offset: number; elevation: number }> };
|
||||
maxSlope?: { points: Array<{ offset: number; elevation: number }> };
|
||||
},
|
||||
): void {
|
||||
const line = design.design_line;
|
||||
@@ -604,14 +598,20 @@ export function appendCrossDesignOverlay(
|
||||
// 을 그린다. 벽 자리가 관 길이 맞춤으로 옮겨져도 노견 → 벽 이음선 상단점을 잇는 단일
|
||||
// 각도가 유지된다(2026-08-21 사용자 ②, 성토 사면은 단일 각도).
|
||||
for (const segment of [trim?.minSlope, trim?.maxSlope]) {
|
||||
if (!segment) continue;
|
||||
const seg = document.createElementNS(SVG_NS, "line");
|
||||
seg.setAttribute("x1", String(x(segment.from.offset)));
|
||||
seg.setAttribute("y1", String(toDisplayY(segment.from.elevation)));
|
||||
seg.setAttribute("x2", String(x(segment.to.offset)));
|
||||
seg.setAttribute("y2", String(toDisplayY(segment.to.elevation)));
|
||||
seg.setAttribute("class", "b06-chart__design-cross");
|
||||
svg.append(seg);
|
||||
if (!segment || segment.points.length < 2) continue;
|
||||
// 폴리라인 — [원 노견, (연장된 노견), 벽 이음선 상단점]. 물매가 1:1.2 고정이라
|
||||
// 벽이 밖으로 나간 만큼 노면이 연장된다(2026-08-21 사용자 확정).
|
||||
for (let i = 1; i < segment.points.length; i += 1) {
|
||||
const a = segment.points[i - 1];
|
||||
const b = segment.points[i];
|
||||
const seg = document.createElementNS(SVG_NS, "line");
|
||||
seg.setAttribute("x1", String(x(a.offset)));
|
||||
seg.setAttribute("y1", String(toDisplayY(a.elevation)));
|
||||
seg.setAttribute("x2", String(x(b.offset)));
|
||||
seg.setAttribute("y2", String(toDisplayY(b.elevation)));
|
||||
seg.setAttribute("class", "b06-chart__design-cross");
|
||||
svg.append(seg);
|
||||
}
|
||||
}
|
||||
|
||||
// 차도·노견 경계 짧은 수직 틱(N-4-2): ±3.6px(기존 ±6의 60%). 노면 단일 기울기라 육안
|
||||
|
||||
Reference in New Issue
Block a user