diff --git a/E03_StabSection/E03_StabSection_Router_WhatIf.py b/E03_StabSection/E03_StabSection_Router_WhatIf.py index 6eb721d60..9380dda50 100644 --- a/E03_StabSection/E03_StabSection_Router_WhatIf.py +++ b/E03_StabSection/E03_StabSection_Router_WhatIf.py @@ -260,6 +260,8 @@ def run_whatif(root: Path, station_key: str, req: WhatIfRequest) -> dict[str, An start, max_ratio=SUPPORT_MAX_LEN, step=SUPPORT_LEN_STEP, + # 길이 대 Fs 가 늘 단조롭지 않음(활동면이 깊어짐) — 1 m 성긴 걸음 뒤 이분 + coarse=max(1, round(SUPPORT_MAX_LEN - start)), ) else: found = {"found": None, "tried": []} diff --git a/E03_StabSection/E03_StabSection_UI_Reinforce.ts b/E03_StabSection/E03_StabSection_UI_Reinforce.ts index de3893053..58216e0d5 100644 --- a/E03_StabSection/E03_StabSection_UI_Reinforce.ts +++ b/E03_StabSection/E03_StabSection_UI_Reinforce.ts @@ -278,7 +278,7 @@ export function buildReinforce(o: ReinforceOptions): HTMLElement { toggles: { map: false, centers: false, candidates: false }, picked: null, }; - requestAnimationFrame(() => canvas.render(draw)); + canvas.render(draw); // 붙기 전 = 기본 폭 · 붙으면 ResizeObserver 가 다시 그림 } if (o.row.walls) { const method = createSelectField({ diff --git a/E03_StabSection/E03_StabSection_UI_Section.ts b/E03_StabSection/E03_StabSection_UI_Section.ts index 391467554..ff43d86e6 100644 --- a/E03_StabSection/E03_StabSection_UI_Section.ts +++ b/E03_StabSection/E03_StabSection_UI_Section.ts @@ -346,10 +346,10 @@ export function createSectionCanvas(onPick: (index: number | null) => void): Sec ...ns, }), svgEl("rect", { - x: s.head[0] - 2.5 * unit, - y: s.head[1] - 2.5 * unit, - width: 5 * unit, - height: 5 * unit, + x: s.head[0] - 1.2 * unit, + y: s.head[1] - 1.2 * unit, + width: 2.4 * unit, + height: 2.4 * unit, class: "e03-support__head", }), ); @@ -358,7 +358,7 @@ export function createSectionCanvas(onPick: (index: number | null) => void): Sec svgEl("circle", { cx: s.cross[0], cy: s.cross[1], - r: 3 * unit, + r: 1.5 * unit, class: "e03-support__cross", "data-role": "support-cross", ...ns, diff --git a/E03_StabSection/E03_StabSection_UI_Support.css b/E03_StabSection/E03_StabSection_UI_Support.css index c2d8207ed..bc2f77b62 100644 --- a/E03_StabSection/E03_StabSection_UI_Support.css +++ b/E03_StabSection/E03_StabSection_UI_Support.css @@ -53,3 +53,10 @@ vertical-align: middle; background: var(--e03-support); } + +.e03-support-fields { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); + gap: var(--spacing-8); + align-items: end; +} diff --git a/E03_StabSection/E03_StabSection_UI_Support.ts b/E03_StabSection/E03_StabSection_UI_Support.ts index 7d87b6cfa..07c8f829b 100644 --- a/E03_StabSection/E03_StabSection_UI_Support.ts +++ b/E03_StabSection/E03_StabSection_UI_Support.ts @@ -182,7 +182,7 @@ export function buildSupport(o: SupportOptions): HTMLElement { }); typeField.select.dataset.role = "support-type"; const inputs = new Map(); - const fields = el("div", { className: "e03-panel__row" }); + const fields = el("div", { className: "e03-support-fields" }); fields.append(sideField.root, typeField.root); for (const key of FIELDS) { const f = createInputField({ @@ -295,6 +295,6 @@ export function buildSupport(o: SupportOptions): HTMLElement { rec.support_forces?.[o.condition], ), }; - requestAnimationFrame(() => canvas.render(draw)); + canvas.render(draw); // 붙기 전 = 기본 폭 · 붙으면 ResizeObserver 가 다시 그림 return host; }