diff --git a/B06_Section/B06_Section_UI_Cross_Structure_Panel.ts b/B06_Section/B06_Section_UI_Cross_Structure_Panel.ts index af24c896..08a93d37 100644 --- a/B06_Section/B06_Section_UI_Cross_Structure_Panel.ts +++ b/B06_Section/B06_Section_UI_Cross_Structure_Panel.ts @@ -52,6 +52,8 @@ export interface StructurePanelDeps { setBasinExtraCount: (count: number) => void; /** 이동 조작 가능 여부 — 집수정(자리 고정)은 숨긴다. */ canNudge: (key: RevetKey) => boolean; + /** 좌우·상하 걸음이 0.1m인가(독립·추가 기슭막이). 배관 기준벽은 false = 1m. */ + fineMove: (key: RevetKey) => boolean; /** 상황에 안 맞는 선택지 숨김(2026-08-22 사용자) — 기하가 판정한 가용성. */ optionsFor: () => { revetAllowed: boolean; basinLUAllowed: boolean }; /** 다단 기슭막이 상태 — 유출 벽 선택 시 단 수 행 표시 판단에 쓴다. */ @@ -91,8 +93,6 @@ const STEP_M = 1.0; * 배관 기준벽(유입·유출)만 관 길이에 맞춘 1m 걸음을 그대로 쓴다. */ const OWN_STEP_M = 0.1; -const moveStepOf = (key: RevetKey): number => - key === "inlet" || key === "outlet" ? STEP_M : OWN_STEP_M; const HEIGHT_STEP_M = 0.1; const BASIN_STEP_M = 0.1; /** 전/후 한 걸음(m) — 집수정 기본이 2m·1/1이라 1m 눈금은 너무 거칠다. */ @@ -148,6 +148,7 @@ export function buildStructurePanel(deps: StructurePanelDeps): StructurePanelHan const act = (run: (key: RevetKey) => void) => () => { if (current) run(current); }; + const moveStepOf = (key: RevetKey): number => (deps.fineMove(key) ? OWN_STEP_M : STEP_M); const moveRow = makeRow(L("B06_Cross_Move_Label")); // 버튼 묶음 클래스는 컨트롤 행에 — **십자(D-pad) 배치**(2026-08-22 사용자): diff --git a/B06_Section/B06_Section_UI_Cross_View.ts b/B06_Section/B06_Section_UI_Cross_View.ts index a941a920..3dc9b2d6 100644 --- a/B06_Section/B06_Section_UI_Cross_View.ts +++ b/B06_Section/B06_Section_UI_Cross_View.ts @@ -185,6 +185,9 @@ export function createCrossSectionCard( let showRevetControl: (visible: boolean) => void = () => undefined; let culvertPipeLengthM: number | null = null; // 관 길이(m) — 조정창 표기용 let culvertInletIsBasin = false; // 유입이 집수정인가 — 조정창 표시·제목 분기 + // 이 카드의 기준벽이 **독립 기슭막이**인가(관 없는 숨김 세트). 조정창 걸음이 + // 배관(1m)과 다르다(0.1m — 2026-08-29 사용자). + let culvertHiddenPipe = false; /** 드롭다운 선택지 가용성(2026-08-22) — 기하 판정을 조정창에 전달. */ let culvertInletOptions = { revetAllowed: true, basinLUAllowed: true }; /** 추가 기슭막이 상태(2026-08-22) — 끝 성토부 5m 이상(canAdd)·세워진 개수. */ @@ -505,6 +508,7 @@ export function createCrossSectionCard( ? null : (culvertLayout?.pipe.lengthM ?? null); culvertInletIsBasin = !!culvertLayout?.basin; + culvertHiddenPipe = culvertLayout?.culvert.hidden_pipe === true; if (culvertLayout) { const state = culvertCardState(culvertLayout); culvertInletOptions = state.inletOptions; @@ -672,6 +676,7 @@ export function createCrossSectionCard( appliedD: () => culvertAppliedD, pipeLengthM: () => culvertPipeLengthM, inletIsBasin: () => culvertInletIsBasin, + hiddenPipe: () => culvertHiddenPipe, inletOptions: () => culvertInletOptions, extraState: () => culvertExtraState, basinExtraState: () => culvertBasinExtraState, diff --git a/B06_Section/B06_Section_UI_Cross_View_Structure.ts b/B06_Section/B06_Section_UI_Cross_View_Structure.ts index 8af50e22..5aca099e 100644 --- a/B06_Section/B06_Section_UI_Cross_View_Structure.ts +++ b/B06_Section/B06_Section_UI_Cross_View_Structure.ts @@ -61,6 +61,8 @@ export interface StructurePanelContext { appliedD: () => Map; pipeLengthM: () => number | null; inletIsBasin: () => boolean; + /** 기준벽이 독립 기슭막이(관 없는 숨김 세트)인가 — 조정창 걸음 분류에 쓴다. */ + hiddenPipe: () => boolean; inletOptions: () => { revetAllowed: boolean; basinLUAllowed: boolean }; extraState: () => { canAdd: boolean; count: number }; basinExtraState: () => { canAdd: boolean; count: number }; @@ -134,6 +136,10 @@ export function structurePanelDeps(ctx: StructurePanelContext): StructurePanelDe resetBasin: () => ctx.inletStructure?.resetAdjust(ctx.adjustChainage()), // 집수정은 자리 고정 — 유입이 집수정이면 ◀/▶/↺를 숨긴다(추가 벽은 항상 이동). canNudge: (key) => key !== "inlet" || !ctx.inletIsBasin(), + // 걸음 분류(2026-08-29 사용자): **배관 기준벽만 1m**, 나머지(독립 기슭막이 기준벽· + // 배관/독립 종속 추가 벽·옛 D경로 독립 벽)는 0.1m. + fineMove: (key) => + (key !== "inlet" && key !== "outlet") || ctx.hiddenPipe(), optionsFor: () => ctx.inletOptions(), extraState: () => ctx.extraState(), basinExtraState: () => ctx.basinExtraState(),