From add71aa5a35b6abf0c0521e84207d8e75ce7b2db Mon Sep 17 00:00:00 2001 From: umsangdon Date: Sat, 25 Jul 2026 16:04:42 +0900 Subject: [PATCH] 260725_6 --- .../B06_wf3_ProfileCross_UI_Cross_View.ts | 12 ++++++++++-- .../B06_wf3_ProfileCross_UI_Style_Cross.css | 8 ++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Cross_View.ts b/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Cross_View.ts index b5379a00..994a3781 100644 --- a/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Cross_View.ts +++ b/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Cross_View.ts @@ -31,6 +31,10 @@ import { validElevation, } from "./B06_wf3_ProfileCross_UI_Section_Common"; +// 절·성토 값 오버레이(그래프 상단 고정)가 계획고 선을 가리는 드문 경우를 대비해, Y 플롯 +// 최대값에 더하는 상단 여유(px). 오버레이·라벨은 손대지 않고 데이터를 그만큼 아래로 내린다. +const AREA_OVERLAY_HEADROOM_PX = 28; + interface CrossPlotMetrics { sourceSamples: SectionSample[]; minOffset: number; @@ -79,13 +83,17 @@ function crossPlotMetrics( const xSpan = Math.max(maxOffset - minOffset, 1e-6); const pixelsPerMeter = plotWidth / xSpan; const rawSpan = Math.max((rawMax - rawMin + padding * 2) * exaggeration, 1e-6); - const naturalHeight = rawSpan * pixelsPerMeter + CROSS_PAD.top + CROSS_PAD.bottom; + // 상단 오버레이 여유(headroom)를 자연 높이에 더해 카드가 그만큼 커지게 한다. + const naturalHeight = + rawSpan * pixelsPerMeter + CROSS_PAD.top + CROSS_PAD.bottom + AREA_OVERLAY_HEADROOM_PX; // 강제 높이가 있으면 그것을, 없으면 자연 높이에 250px 바닥 적용. const heightPx = forcedHeightPx ?? Math.max(naturalHeight, CROSS_HEIGHT); const plotHeight = Math.max(heightPx - CROSS_PAD.top - CROSS_PAD.bottom, 1e-6); // 실제 plotHeight에 맞춰 표시 표고폭을 되계산 → ppm(1:1) 보존, 여유분은 상하 대칭 여백. const displaySpan = plotHeight / pixelsPerMeter; - const displayMax = elevationMid + displaySpan / 2; + // 늘린 세로 여유의 절반을 위쪽에 몰아 데이터·계획선을 오버레이 아래로 내린다(라벨 위치 불변). + const headroomM = AREA_OVERLAY_HEADROOM_PX / pixelsPerMeter; + const displayMax = elevationMid + displaySpan / 2 + headroomM / 2; return { sourceSamples, minOffset, diff --git a/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Style_Cross.css b/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Style_Cross.css index 7babdf8e..ed1740b0 100644 --- a/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Style_Cross.css +++ b/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Style_Cross.css @@ -304,6 +304,14 @@ stroke-dasharray: 4 3; } +/* 비정규 측점(구조물)은 종단면도에서도 자수정색 파선으로 구분한다(B05 종단 규칙과 정합). + 미선택 시 stroke 미정의로 세로선이 안 그려지던 문제 해소. */ +.b06-chart__station-line--irregular { + stroke: var(--color-royal-amethyst, rgb(139 92 246)); + stroke-width: 1.4; + stroke-dasharray: 5 3; +} + .b06-chart__station-line--selected, .b06-chart__center-marker { stroke: var(--color-danger);