Merge remote-tracking branch 'origin/sub_laptop_6' into sub_laptop_2

This commit is contained in:
2026-09-29 20:08:46 +09:00
+65
View File
@@ -0,0 +1,65 @@
/* =============================================================================
* A00_Common/design/design_profile.ts
* 종단도 한 벌(계획서 24-1 · 24-2c) — 종단 보기 · 횡단 보기가 **같은 종단도**를 가운데
* 아래쪽에 둔다. 도구(▲▼ 고치기 · 되돌리기 · 직선화 · 옮기기 · 확대 · 표 · 유토곡선 · 범례 ·
* 뱃지)와 막기 규칙(최소 흙덮기 · 기울기 상한)은 보기와 무관하게 하나.
*
* 판 자리 둘 — 종단도는 자리만 내주고 판은 밖에서 만들어 끼운다(나중에 떼기 쉽게).
* · side 종단도 오른쪽 판(배수유역도 · sub7). `DesignSideFactory` 로 받는다.
* · overlay 종단도 위 겹침 판(유토곡선 · 표). 종단도가 직접 만든다.
* ========================================================================== */
import type {
DrainagePanel,
DrainagePanelCallbacks,
} from "../../B05_Profile/B05_Profile_UI_Drainage_Panel_Types";
/** 가운데 보기 — 종단 보기(3D + 종단도) · 횡단 보기(종단도 + 횡단 카드). */
export type DesignView = "profile" | "cross";
/**
* 오른쪽 판을 만들 때 종단도가 넘겨 주는 것 — 판이 알릴 일(관 목록 · 유역 · 관 고름 ·
* 우클릭 메뉴 항목)과 처음 보기. 판은 `onPipesChanged` 를 **반드시** 불러야 종단도가
* 최소 흙덮기를 판정한다.
*/
export interface DesignSideHost extends DrainagePanelCallbacks {
projectId: string;
view: DesignView;
}
/**
* 오른쪽 판(배수유역도). 종단도는 만든 직후 `load(projectId)` · 노선이 오면 `setRoute` ·
* 구조물이 바뀌면 `setIntervalSpans` · 되돌리기에 `pipeChainages`/`setPipeChainages` ·
* 보기가 바뀌면 `setView` · 걷을 때 `dispose` 를 부른다. 뿌리(`root`)는 종단 열 오른쪽에 붙는다.
*/
export type DesignSideBoard = DrainagePanel & {
/** 보기가 바뀌었다 — 횡단 보기에서도 켜고 끈다(판이 정함). */
setView?: (view: DesignView) => void;
};
/** 오른쪽 판을 끼우는 함수 모양 — 종단도를 만들 때 한 번 부른다. */
export type DesignSideFactory = (host: DesignSideHost) => DesignSideBoard;
/** 위 겹침 판(유토곡선 · 표) — 종단 스크롤러와 가로 스크롤을 맞추는 떼었다 붙이는 판. */
export interface DesignOverlayBoard {
overlay: HTMLElement;
handle: HTMLElement;
attachScrollSync: (scroller: HTMLElement) => void;
}
/** 종단도를 만들 때 넘기는 것. */
export interface DesignProfileContext {
projectId: string;
/** 처음 보기. */
view: DesignView;
/** 오른쪽 판 — 없으면 판 없이 종단 열만. */
side?: DesignSideFactory;
}
/** 종단도 한 벌. */
export interface DesignProfile {
root: HTMLElement;
/** 보기가 바뀌었다 — 종단도는 그대로 두고 판에만 알린다(다시 만들지 않음). */
setView: (view: DesignView) => void;
dispose: () => void;
}