fix(B05): 관을 옮겨도 옛 자리 구조물 세로선이 남던 문제
구조물 측점이 두 곳에 있었다. 화면 정본인 사이드바 목록과, 경로 확정 때 종단 정본 파일에 병합된 kind="irregular" 측점이다. 그래프와 3D가 둘을 겹쳐 그려서 관을 옮기면 사이드바 목록만 따라가고 확정 당시 자리는 그대로 남았다. 그래프(_UI_Profile_Panel.draw)와 3D(_UI_Page.renderStationLines) 모두 종단 정본의 비정규 측점을 걷어내고 사이드바 목록만 얹는다. 저장분은 진입 시 restoreSections가 목록으로 되살리고, 관 항목은 배수유역도가 정본 (pipe_points.json)에 맞춰 갈아 끼운다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -390,13 +390,17 @@ export async function renderB05Route(root: HTMLElement): Promise<void> {
|
||||
}
|
||||
|
||||
function renderStationLines(detail: SectionDetailResponse): void {
|
||||
// 확정 때 종단 정본에 병합해 둔 비정규 측점은 그리지 않는다. 화면의 정본은 사이드바 목록이고
|
||||
// 관을 옮기면 그 목록만 따라오므로, 둘을 겹쳐 그리면 옮기기 전 자리가 그대로 남는다
|
||||
// (2026-08-02 사용자 보고). 저장분은 진입 시 `restoreSections`가 목록으로 되살린다.
|
||||
const regular = detail.longitudinal.stations.filter((station) => station.kind !== "irregular");
|
||||
const injected = interpolateIrregularStations(
|
||||
detail.longitudinal.stations,
|
||||
regular,
|
||||
irregularStations,
|
||||
detail.longitudinal.length_m,
|
||||
);
|
||||
// 측점 바 양 끝 램프용 상단측: 사용자 변경분 → solve 자동 판정 순으로 적용.
|
||||
const withUphill = [...detail.longitudinal.stations, ...injected].map((station) => ({
|
||||
const withUphill = [...regular, ...injected].map((station) => ({
|
||||
...station,
|
||||
uphill_side:
|
||||
uphillOverrides.get(uphillKey(station.chainage_m)) ?? station.uphill_side ?? null,
|
||||
|
||||
@@ -472,15 +472,15 @@ export function createRouteProfilePanel(
|
||||
: (longitudinal.design_profiles ?? []);
|
||||
// 그래프에는 비정규 측점을 일반 측점처럼(세로선+라벨) 섞어 넣는다.
|
||||
const graphData = normalizedLongitudinal(longitudinal);
|
||||
// 종단 정본(확정 시 병합분)에 들어 있는 비정규 측점은 걷어낸다 — 화면의 정본은 사이드바
|
||||
// 목록이고, 관을 옮기면 그 목록만 따라온다. 둘을 겹쳐 그리면 옮기기 전 자리의 세로선이
|
||||
// 그대로 남는다(2026-08-02 사용자 보고).
|
||||
const regular = graphData.stations.filter((station) => station.kind !== "irregular");
|
||||
const injected = irregularGraphStations(irregularStations, maxChainageOf(longitudinal));
|
||||
const graphLongitudinal = injected.length
|
||||
? {
|
||||
...graphData,
|
||||
stations: [...graphData.stations, ...injected].sort(
|
||||
(a, b) => a.chainage_m - b.chainage_m,
|
||||
),
|
||||
}
|
||||
: graphData;
|
||||
const graphLongitudinal = {
|
||||
...graphData,
|
||||
stations: [...regular, ...injected].sort((a, b) => a.chainage_m - b.chainage_m),
|
||||
};
|
||||
let yAxis: { padLeft: number; ticks: Array<{ y: number; label: string }> } | null = null;
|
||||
chartWrap.append(
|
||||
createLongitudinalProfile(
|
||||
|
||||
Reference in New Issue
Block a user