fix(b06): 물넘이 콘크리트 누름 — 얇은 형상 판정면 아래로 최소 두께 12 px(보라 띠 밖) · 누름 = 그 물넘이 고름(걸친 연동 관 · 자기 다른 관 아님) · 경사각도 상자 (294-7)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014utrjfoW831Vc5wJUd13kL
This commit is contained in:
2026-10-12 22:35:58 +09:00
co-authored by Claude Opus 5.5
parent e2e71ad3ca
commit db5b7656db
11 changed files with 355 additions and 17 deletions
@@ -45,10 +45,13 @@ export function wireStructureSelection(
/** 폼에 올린 시설로 보기를 옮김 — 목록에서 고른 길(54-47). */
reveal?: (chainageM: number) => void,
): { syncInletStructure: () => void } {
const ownerChainageOf = (chainageM: number): number => {
const ownerChainageOf = (chainageM: number, key?: RevetPick): number => {
const sectionAt = detail()?.cross_sections.find(
(entry) => Math.abs(entry.chainage_m - chainageM) < 0.01,
);
// 자기 관 없는 카드의 「관」 = 물넘이 콘크리트 — 걸친 연동 관보다 앞(294-7 · 되살림 길도)
const fordM = sectionAt?.ford_pavement?.chainage_m;
if (key === "pipe" && fordM !== undefined && !sectionAt?.culvert) return fordM;
// 물넘이포장 범위 옆 카드 = 그 물넘이 자리(287-5 · 형상 누름이 그 시설을 엶)
return (
(sectionAt &&
@@ -75,14 +78,15 @@ export function wireStructureSelection(
};
const origRevet = stationControls.revetOffset.select;
stationControls.revetOffset.select = (chainageM, key) => {
stationControls.revetOffset.select = (chainageM, key, ownerM) => {
// 다른 카드 부재를 고르는 중에 옛 카드가 제 선택을 푸는 것 — 폼 · 선택 칸은 새 것 몫(53-1)
const nested = wallSelecting;
// 푸는 것은 고름이 아님 — 표시를 켜면 뒤이은 카드 고름이 선택 칸에 안 적힘(53-1)
if (key) markWallSelecting();
origRevet(chainageM, key);
// 도수로 띠는 자기 측점 시설 — 이웃 관 연장 안이어도 그 관 폼을 안 엶(152-4)
const owner = key === "chute" ? chainageM : ownerChainageOf(chainageM);
const owner =
ownerM ?? (key === "chute" ? chainageM : ownerChainageOf(chainageM, key ?? undefined));
if (key) remember?.(owner, key);
if (key) panel.showAtChainage(owner);
else if (!nested) {