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:
@@ -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줄 제한).
|
||||
|
||||
@@ -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 사용자 확정 ④) — **파선**으로 그린다. 구조물 실체가 아니라
|
||||
|
||||
Reference in New Issue
Block a user