fix(B06): 횡단 Y축 눈금이 X축 아래로 삐져나오던 문제

눈금 범위를 elevationMid 중심(±displaySpan/2)으로 잡아, displayMax에 들어간
면적표 여유(AREA_OVERLAY_HEADROOM_PX/2)만큼 아래로 밀려 최하단 격자선·라벨이
X축 라벨 줄 아래에 그려졌다. 범위를 실제 표시 상·하단(displayMax 기준)에서
역산해 플롯 안에만 눈금이 오게 한다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-23 17:53:52 +09:00
co-authored by Claude Opus 5
parent c10fb3400e
commit ec514a4560
+5 -2
View File
@@ -321,9 +321,12 @@ export function createCrossSectionCard(
// Y축 눈금: 표고 범위를 10칸 안팎으로 나누되 눈금값이 1·2·5 계열로 딱 떨어지게 한다
// (종단면도와 같은 규칙). 5등분 고정은 눈금값이 소수로 흘러 표고를 못 읽었다
// (2026-08-23 사용자 지시). 라벨 겹침 방지로 눈금 간격은 14px 이상 띄운다.
// 눈금 범위는 **실제로 보이는 플롯 상·하단**(y() 기준)에서 뽑는다 — elevationMid를
// 중심으로 잡으면 displayMax의 면적표 여유(headroom)만큼 아래로 밀려 X축 라벨 줄
// 아래에 격자선이 삐져나왔다(2026-08-23 사용자 보고).
const rawDisplaySpan = displaySpan / exaggeration;
const rawBottom = elevationMid - rawDisplaySpan / 2;
const rawTop = elevationMid + rawDisplaySpan / 2;
const rawTop = elevationMid + (displayMax - elevationMid) / exaggeration;
const rawBottom = rawTop - rawDisplaySpan;
const plotHeightPx = heightPx - CROSS_PAD.top - CROSS_PAD.bottom;
const tickStep = niceTickStep(rawDisplaySpan, 10, Math.floor(plotHeightPx / 14));
const tickDecimals = Math.max(0, Math.ceil(-Math.log10(tickStep) - 1e-9));