fix(B06): 흙막이 · 옹벽 안으로 지나가는 다른 선 숨김 — 벽이 바탕색 덮개와 함께 위에서 덮음(PLAN 66-5)

- 벽 · 무늬를 덮개와 함께 맨 위로 · 관 · 클릭 판정면 · 글은 그 위로 다시(지금 차례 그대로)
- 원지반 · 설계선 · 비탈 · 다른 외곽이 벽 안에서 안 보임 · 벽 자기 외곽 · 무늬는 그대로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYJJRCfHfdCGNhmXTjQKV7
This commit is contained in:
2026-10-06 23:43:35 +09:00
co-authored by Claude Opus 5.5
parent 7de3560ebc
commit 5b28a6e941
3 changed files with 53 additions and 9 deletions
+4 -2
View File
@@ -20,6 +20,7 @@ import {
appendFordSurfaceDropPlan,
} from "./B06_Section_UI_Cross_Ford_Pavement";
import { culvertWallsStandAt } from "./B06_Section_UI_Cross_Culvert_Wire";
import { raiseWalls } from "./B06_Section_UI_Cross_Wall";
import { appendSpoilFillOverlay } from "./B06_Section_UI_Cross_SpoilFill";
import { appendRevetmentOverlay, computeRevetmentLayout } from "./B06_Section_UI_Cross_Revetment";
import {
@@ -468,13 +469,12 @@ export function createCrossSectionCard(
// (2026-09-06 사용자 확정: 구조물 자체 면적을 빼는 것이 아니다). 그림과 면적이
// 같은 트림 값을 쓰므로 "그림은 이런데 수량은 저렇다"가 생기지 않는다.
applyStructureAreas(section, designTrim);
appendCrossDesignOverlay(plotLayer, section.design, x, toDisplayY, drawSamples, designTrim, {
const designFrom = plotLayer.childElementCount;
appendCrossDesignOverlay(plotLayer, section.design, x, toDisplayY, drawSamples, designTrim, {
layer: svg,
x: (CROSS_PAD.left + widthPx - CROSS_PAD.right) / 2,
y: heightPx - CROSS_PAD.bottom - 4,
});
// 사토장(유용토운반작업장) — 교본 6장 3절이 횡단도 표시를 요구한다. 값은 설계 결과에서
// 물넘이 자리 = 노면 · 측구 설계선 걷음(66-2 · 66-3 — 옛 계획고 점선이 드러남)
if (fordPaved && section.ford_pavement)
hideFordPavedRoad(
@@ -485,6 +485,7 @@ export function createCrossSectionCard(
x,
toDisplayY,
);
// 사토장(유용토운반작업장) — 교본 6장 3절이 횡단도 표시를 요구한다. 값은 설계 결과에서
// 그대로 오고 여기서 다시 세지 않는다. 선 종류는 터파기 파선과 갈라 둔다.
appendSpoilFillOverlay(plotLayer, section.design, x, toDisplayY);
// 배수관 세트 — 조정창이 쓸 카드 상태를 받아 둔다(2026-08-19) · 링크 카드도 채운다(2026-08-24).
@@ -528,6 +529,7 @@ export function createCrossSectionCard(
);
if (highlightRevet) setRevetActive(highlightRevet);
}
raiseWalls(plotLayer); // 흙막이 · 옹벽 안을 지나는 다른 선 가림(66-5)
}
// 십자선(계획 노선 자리) · 축선 · 높이 축 이름 — `_Cross_View_Frame`(700줄 제한).
+35
View File
@@ -160,3 +160,38 @@ export function appendPlanLine(
}
layer.append(line);
}
/**
* 벽 안으로 지나가는 다른 선(원지반 · 설계선 · 비탈 · 다른 외곽)을 가린다(66-5) — 흙막이 · 옹벽을
* 바탕색 덮개와 함께 맨 위로 올림. 벽 자기 외곽 · 무늬는 그대로. 관 · 클릭 판정면 · 글은 그 위로
* 다시 올려 지금 차례(관이 벽을 지나감 · 판정면 맨 위)를 지킨다.
*/
export function raiseWalls(layer: SVGElement): void {
const kids = [...layer.children];
const groups = kids
.filter((el) => el.classList.contains("b06-chart__culvert-revet"))
.map((wall) => {
// 무늬 = 벽 바로 뒤의 clipPath + 잘린 묶음(`appendWallHatch`)
const hatch: Element[] = [];
let next = wall.nextElementSibling;
while (
next &&
(next.tagName === "clipPath" ||
next.getAttribute("clip-path")?.startsWith("url(#b06-revet-clip-"))
) {
hatch.push(next);
next = next.nextElementSibling;
}
const cover = document.createElementNS(SVG_NS, "polygon");
cover.setAttribute("points", wall.getAttribute("points") ?? "");
cover.setAttribute("class", "b06-chart__wall-cover");
return [cover, wall, ...hatch];
});
if (!groups.length) return;
for (const group of groups) layer.append(...group);
layer.append(
...kids.filter((el) =>
el.matches(".b06-chart__culvert-pipe, .b06-chart__culvert-revet-hit, text"),
),
);
}
@@ -254,6 +254,13 @@
stroke-width: 2.2;
}
/* 흙막이 · 옹벽 덮개(66-5) — 벽 안으로 지나가는 다른 선을 바탕색으로 가림. */
.b06-chart__wall-cover {
fill: var(--color-surface-raised);
stroke: none;
pointer-events: none;
}
/* 클릭 판정용 투명 겹면 — 관·보호공보다 위에 얹혀 벽 가운데도 눌린다. */
.b06-chart__culvert-revet-hit {
fill: transparent;
@@ -367,13 +374,6 @@
stroke-linejoin: round;
}
/* BOX암거 내공(유로) — 면은 비우고 윤곽만. 물이 지나는 빈 공간이라 채우지 않는다. */
.b06-chart__box-barrel {
fill: none;
stroke: var(--color-text-secondary);
stroke-width: 1;
stroke-dasharray: 4 3;
stroke-linejoin: round;
/* 세월교 본체(바닥판 · 관) 선택 강조(66-1) — 측벽 강조와 같은 색. */
.b06-chart__ford-slab.is-active,
.b06-chart__culvert-pipe.is-active {
@@ -382,6 +382,13 @@
stroke-width: 2.2;
}
/* BOX암거 내공(유로) — 면은 비우고 윤곽만. 물이 지나는 빈 공간이라 채우지 않는다. */
.b06-chart__box-barrel {
fill: none;
stroke: var(--color-text-secondary);
stroke-width: 1;
stroke-dasharray: 4 3;
stroke-linejoin: round;
}
/* 터파기 선(2026-09-09 사용자 확정 ④) — **파선**으로 그린다. 구조물 실체가 아니라