Merge remote-tracking branch 'origin/sub_laptop_4' into main_laptop_1

This commit is contained in:
2026-10-16 13:46:07 +09:00
257 changed files with 484 additions and 425 deletions
+3 -3
View File
@@ -50,9 +50,9 @@ import {
buildAlignment,
planElevationAt,
toAlignmentBase,
} from "../B05_Profile/B05_Profile_UI_Profile_Alignment";
import type { ProfileAlignment } from "../B05_Profile/B05_Profile_UI_Profile_Alignment";
import { readAlignment, toDesignProfile } from "../B05_Profile/B05_Profile_UI_Profile_Data";
} from "../B05_Profile/logic/B05_Profile_UI_Profile_Alignment";
import type { ProfileAlignment } from "../B05_Profile/logic/B05_Profile_UI_Profile_Alignment";
import { readAlignment, toDesignProfile } from "../B05_Profile/logic/B05_Profile_UI_Profile_Data";
import { useStationKeys } from "./B06_Section_Station_Keys";
import { readAlignmentDraft } from "../B05_Profile/B05_Profile_UI_Profile_Edit";
import { hasStaleDesigns } from "./B06_Section_UI_Section_Common";
+1 -1
View File
@@ -30,7 +30,7 @@ import type { CrossSectionPatch, SectionDetailResponse } from "./B06_Section_Api
import { fetchSectionDetail, saveSections } from "./B06_Section_Api_Fetch";
import { USER_TOUCHED_KEYS } from "./B06_Section_Cross_Refresh";
import { kindChangedChainages, STRUCTURE_ADJUST_KEYS } from "./B06_Section_Api_Culvert_Options";
import type { PipelineStation } from "../A00_Common/design/design_pipeline_types";
import type { PipelineStation } from "../A00_Common/design/logic/design_pipeline_types";
import {
carryStationKeys,
registeredKeys,
+2 -2
View File
@@ -15,8 +15,8 @@ import type { CrossSection } from "./B06_Section_Api_Fetch";
import { withoutGuardedFill } from "./B06_Section_UI_Cross_Body_Guard";
import { computeBoxLayout, DEFAULT_BOX_SIDE_ADJUST } from "./B06_Section_UI_Cross_Box_Geom";
import type { BoxLayout } from "./B06_Section_UI_Cross_Box_Geom";
import { REVET_EMBED_DEPTH_M } from "./B06_Section_UI_Cross_Culvert_Const";
import { groundInterpolator } from "./B06_Section_UI_Cross_Culvert_Solve";
import { REVET_EMBED_DEPTH_M } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import { groundInterpolator } from "./logic/B06_Section_UI_Cross_Culvert_Solve";
import { DEFAULT_BASIN_ADJUST, ZERO_ADJUST } from "./B06_Section_UI_Cross_Culvert_Types";
import type { BasinShape, WallAdjust, WallLayout } from "./B06_Section_UI_Cross_Culvert_Types";
import {
@@ -13,7 +13,7 @@
import type { CrossSection, SectionSample } from "./B06_Section_Api_Fetch";
import { computeBoxLayout, DEFAULT_BOX_SIDE_ADJUST } from "./B06_Section_UI_Cross_Box_Geom";
import type { BoxLayout } from "./B06_Section_UI_Cross_Box_Geom";
import { FILL_SLOPE_RATIO_MIN } from "./B06_Section_UI_Cross_Culvert_Const";
import { FILL_SLOPE_RATIO_MIN } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type {
CulvertDesignTrim,
CulvertLayout,
+3 -3
View File
@@ -25,9 +25,9 @@ import type {
OutletFillSegment,
} from "./B06_Section_UI_Cross_Culvert_Types";
import { buildExtrasAt } from "./B06_Section_UI_Cross_Culvert_Extra";
import { FILL_SLOPE_RATIO_MIN } from "./B06_Section_UI_Cross_Culvert_Const";
import { designInterpolator, groundInterpolator } from "./B06_Section_UI_Cross_Culvert_Solve";
import { structureCutPoints, structureCutSpec } from "./B06_Section_UI_Cross_Structure_Cut";
import { FILL_SLOPE_RATIO_MIN } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import { designInterpolator, groundInterpolator } from "./logic/B06_Section_UI_Cross_Culvert_Solve";
import { structureCutPoints, structureCutSpec } from "./logic/B06_Section_UI_Cross_Structure_Cut";
/** 구체 한쪽 끝의 조작값 — 좌·우를 따로 잡는다(2026-08-25 사용자). */
export interface BoxSideAdjust {
@@ -14,7 +14,7 @@ import {
buildRockBoundaryControl,
sectionModeLabel,
} from "./B06_Section_UI_Cross_Design";
import { type FillSlopeLength, fillSlopeLengths } from "./B06_Section_UI_Cross_Fit";
import { type FillSlopeLength, fillSlopeLengths } from "./logic/B06_Section_UI_Cross_Fit";
import {
type DesignChangeHandler,
L,
+1 -1
View File
@@ -24,7 +24,7 @@ import type {
WallLayout,
} from "./B06_Section_UI_Cross_Culvert_Geom";
import { appendPipeInfoText, outlineBox } from "./B06_Section_UI_Cross_Culvert_Types";
import { pipeLengthText } from "./B06_Section_UI_Cross_Culvert_Const";
import { pipeLengthText } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import { appendWallTrench, foundationChoice } from "./B06_Section_UI_Cross_Excavation";
import {
appendChuteBand,
@@ -22,15 +22,15 @@ import {
REVET_LEAN_RATIO,
REVET_THICKNESS_M,
WALL_MIN_PURE_HEIGHT_M,
} from "./B06_Section_UI_Cross_Culvert_Const";
} from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type {
OffsetPoint,
OutletFillSegment,
WallAdjust,
WallLayout,
} from "./B06_Section_UI_Cross_Culvert_Types";
import { structureCutPoints } from "./B06_Section_UI_Cross_Structure_Cut";
import type { StructureCutSpec } from "./B06_Section_UI_Cross_Structure_Cut";
import { structureCutPoints } from "./logic/B06_Section_UI_Cross_Structure_Cut";
import type { StructureCutSpec } from "./logic/B06_Section_UI_Cross_Structure_Cut";
import { buildRevetWallGeometry } from "./B06_Section_UI_Cross_Wall";
export interface OutletExtrasInput {
@@ -19,9 +19,9 @@ import {
REVET_LEAN_RATIO,
REVET_THICKNESS_M,
revetTargetHeight,
} from "./B06_Section_UI_Cross_Culvert_Const";
import type { RevetMaterial } from "./B06_Section_UI_Cross_Culvert_Const";
import { outlineLeanOf } from "./B06_Section_UI_Cross_Lean";
} from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type { RevetMaterial } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import { outlineLeanOf } from "./logic/B06_Section_UI_Cross_Lean";
import { buildRevetWallGeometry } from "./B06_Section_UI_Cross_Wall";
import {
bodyGuardAxes,
@@ -46,7 +46,7 @@ import type {
import { DEFAULT_BASIN_ADJUST } from "./B06_Section_UI_Cross_Culvert_Types";
// 상수·자료형은 분리 파일에 있고, 기존 import 경로를 유지하기 위해 그대로 다시 내보낸다.
export * from "./B06_Section_UI_Cross_Culvert_Const";
export * from "./logic/B06_Section_UI_Cross_Culvert_Const";
export * from "./B06_Section_UI_Cross_Culvert_Types";
import {
@@ -56,16 +56,16 @@ import {
decideInletBasin,
BASIN_INNER_WIDTH_M,
inletChoiceAvailability,
} from "./B06_Section_UI_Cross_Culvert_Basin";
} from "./logic/B06_Section_UI_Cross_Culvert_Basin";
import { inletGroundConnector } from "./B06_Section_UI_Cross_Culvert_Extra";
import { withBackCut } from "./B06_Section_UI_Cross_Structure_Cut";
import { withBackCut } from "./logic/B06_Section_UI_Cross_Structure_Cut";
import {
buildCulvertTiers,
drawnFillPoints,
outletPipeEnd,
slopeZeroAnchor,
} from "./B06_Section_UI_Cross_Culvert_Tiers";
import type { FillSlopeSegment, WallVertical } from "./B06_Section_UI_Cross_Culvert_Solve";
import type { FillSlopeSegment, WallVertical } from "./logic/B06_Section_UI_Cross_Culvert_Solve";
import {
cutLength,
fillSlopeOf,
@@ -75,7 +75,7 @@ import {
pipeAxisSolver,
placePipeWall,
slopeLengthAlong,
} from "./B06_Section_UI_Cross_Culvert_Solve";
} from "./logic/B06_Section_UI_Cross_Culvert_Solve";
/** 배수관 세트 기하 계산. 부족한 입력이면 null — 그리기와 분리(설계선 트림이 먼저 쓴다). */
export function computeCulvertLayout(
@@ -10,13 +10,13 @@ import {
GUARD_CUT_BERM_M,
REVET_EMBED_DEPTH_M,
REVET_TRAP_TOP_M,
} from "./B06_Section_UI_Cross_Culvert_Const";
} from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type { OutletExtrasResult } from "./B06_Section_UI_Cross_Culvert_Extra";
import { buildExtrasAt } from "./B06_Section_UI_Cross_Culvert_Extra";
import { fillWallBaseWidth } from "./B06_Section_UI_Cross_Culvert_Solve";
import { fillWallBaseWidth } from "./logic/B06_Section_UI_Cross_Culvert_Solve";
import type { OffsetPoint, WallAdjust, WallLayout } from "./B06_Section_UI_Cross_Culvert_Types";
import { outlineLeanOf } from "./B06_Section_UI_Cross_Lean";
import { structureCutSpec } from "./B06_Section_UI_Cross_Structure_Cut";
import { outlineLeanOf } from "./logic/B06_Section_UI_Cross_Lean";
import { structureCutSpec } from "./logic/B06_Section_UI_Cross_Structure_Cut";
// d의 0점 = **성토선 길이 0 지점**(벽 상단 = 노견 — 2026-08-23 사용자 확정).
// 그 자리(하단선 중점)는 이음선 상단점이 노견 끝에 오는 offset이고, 기본 자리는
@@ -5,7 +5,7 @@
* ========================================================================== */
import type { CulvertSet } from "./B06_Section_Api_Fetch";
import type { RevetMaterial } from "./B06_Section_UI_Cross_Culvert_Const";
import type { RevetMaterial } from "./logic/B06_Section_UI_Cross_Culvert_Const";
/**
* 기슭막이 1매의 사용자 조작값(2026-08-22 확정 4축):
@@ -18,15 +18,15 @@ import {
basinSpanOfSpec,
FILL_SLOPE_RATIO_MIN,
revetSpanOfSpec,
} from "./B06_Section_UI_Cross_Culvert_Const";
import { EXTRA_SPAN_DEFAULT } from "./B06_Section_UI_Cross_Culvert_Const";
import type { StructureSpan } from "./B06_Section_UI_Cross_Culvert_Const";
} from "./logic/B06_Section_UI_Cross_Culvert_Const";
import { EXTRA_SPAN_DEFAULT } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type { StructureSpan } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type { WallAdjust } from "./B06_Section_UI_Cross_Culvert_Types";
import {
designInterpolator,
groundInterpolator,
slopeToeOffset,
} from "./B06_Section_UI_Cross_Culvert_Solve";
} from "./logic/B06_Section_UI_Cross_Culvert_Solve";
/**
* 기슭막이 4축 조작 제어(2026-08-22 확정) — 벽을 눌러 고르고 조정창에서
* 좌우(x)·상하(d, 성토선 대각)·높이(h)·재질(m)을 만진다. 고른 벽은 여기 담아 두어
@@ -24,7 +24,7 @@ import {
fetchStructureTypes,
readPendingStructures,
} from "../B05_Profile/B05_Profile_Api_Structures";
import { structureOptionLines } from "../B05_Profile/B05_Profile_UI_Structures_Balloon";
import { structureOptionLines } from "../B05_Profile/logic/B05_Profile_UI_Structures_Balloon";
import {
readGroupItems,
readSummaryItem,
@@ -32,7 +32,7 @@ import {
type SummaryItem,
} from "../common_util/common_util_summary_item";
import type { CrossNoteCad, CrossSection } from "./B06_Section_Api_Fetch";
import { pipeLengthWhole } from "./B06_Section_UI_Cross_Culvert_Const";
import { pipeLengthWhole } from "./logic/B06_Section_UI_Cross_Culvert_Const";
const noteKey = (chainageM: number): string => chainageM.toFixed(2);
@@ -33,7 +33,7 @@ import {
type Face,
type Pt,
type SplitPiece,
} from "./B06_Section_UI_Cross_Detail_Geom";
} from "./logic/B06_Section_UI_Cross_Detail_Geom";
const SVG_NS = "http://www.w3.org/2000/svg";
export const PIECE_HIT_CLASS = "b06-detail__piece";
@@ -23,7 +23,7 @@ import type {
} from "./B06_Section_Api_Fetch";
import type { CrossPickPiece, SectionSample } from "./B06_Section_Api_Types";
import type { CrossAxesOptions } from "./B06_Section_UI_Cross_Axes";
import { pickLines, piecesValue } from "./B06_Section_UI_Cross_Detail_Geom";
import { pickLines, piecesValue } from "./logic/B06_Section_UI_Cross_Detail_Geom";
import { attachDetailSelect } from "./B06_Section_UI_Cross_Detail_Select";
import { pointsArea } from "./B06_Section_UI_Cross_Pick_Order";
@@ -10,13 +10,13 @@
* ========================================================================== */
import type { CrossSection } from "./B06_Section_Api_Fetch";
import { BERM_INFO_TEXT, bermReviewStations } from "./B06_Section_UI_Cross_Berm_Info";
import { fillSlopeLengths, slopeRunLengths } from "./B06_Section_UI_Cross_Fit";
import { BERM_INFO_TEXT, bermReviewStations } from "./logic/B06_Section_UI_Cross_Berm_Info";
import { fillSlopeLengths, slopeRunLengths } from "./logic/B06_Section_UI_Cross_Fit";
import {
FILL_SLOPE_WARN_TEXT,
fillSlopeWarnings,
type FillSlopeWarning,
} from "./B06_Section_UI_Cross_FillSlope_Warn";
} from "./logic/B06_Section_UI_Cross_FillSlope_Warn";
import { L, stationLabel } from "./B06_Section_UI_Section_Common";
import { pavedBySpecs } from "./B06_Section_Cross_Refresh";
import { createNoticeChips, type NoticeChipRow } from "./B06_Section_UI_Cross_Notice_Chips";
@@ -21,17 +21,17 @@
import { groundLine } from "./B06_Section_UI_Cross_Wall_Hatch";
import type { CrossSection, FordSet, SectionSample } from "./B06_Section_Api_Fetch";
import { GUARD_CUT_BERM_M, pipeWallThicknessM } from "./B06_Section_UI_Cross_Culvert_Const";
import { GUARD_CUT_BERM_M, pipeWallThicknessM } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type {
BasinLayout,
CulvertDesignTrim,
OffsetPoint,
OutletFillSegment,
} from "./B06_Section_UI_Cross_Culvert_Types";
import { basinApproachPoints, buildBasin } from "./B06_Section_UI_Cross_Culvert_Basin";
import { basinApproachPoints, buildBasin } from "./logic/B06_Section_UI_Cross_Culvert_Basin";
import { bermCut, buildExtrasAt } from "./B06_Section_UI_Cross_Culvert_Extra";
import { designInterpolator, groundInterpolator } from "./B06_Section_UI_Cross_Culvert_Solve";
import { structureCutSpec } from "./B06_Section_UI_Cross_Structure_Cut";
import { designInterpolator, groundInterpolator } from "./logic/B06_Section_UI_Cross_Culvert_Solve";
import { structureCutSpec } from "./logic/B06_Section_UI_Cross_Structure_Cut";
/** 측벽 한 매의 조작값 — 좌우만(139-3). `heightM` · `slopeM` 은 옛 저장(측벽마다 높이 · 1:1.2
* 대각) 읽기 전용 — `dropM` 이 없을 때 바닥판 표고로 옮김(`fordDropOf`). */
@@ -10,7 +10,7 @@
* · 키보드 방향키 = 십자 버튼(2026-08-23) — 셀렉트·입력 포커스 중엔 양보.
* ========================================================================== */
import { FILL_SLOPE_RATIO_MIN } from "./B06_Section_UI_Cross_Culvert_Const";
import { FILL_SLOPE_RATIO_MIN } from "./logic/B06_Section_UI_Cross_Culvert_Const";
/** 조작 버튼 하나 — 클릭이 카드 선택·팬으로 번지지 않게 막는다. */
export function makeButton(label: string, title: string, onClick: () => void): HTMLButtonElement {
@@ -24,11 +24,11 @@ import {
REVET_EMBED_DEPTH_M,
REVET_THICKNESS_M,
WALL_MIN_PURE_HEIGHT_M,
} from "./B06_Section_UI_Cross_Culvert_Const";
import { outlineLeanOf } from "./B06_Section_UI_Cross_Lean";
} from "./logic/B06_Section_UI_Cross_Culvert_Const";
import { outlineLeanOf } from "./logic/B06_Section_UI_Cross_Lean";
import { catalogRow } from "../common_util/common_util_structure_catalog";
import type { RevetMaterial } from "./B06_Section_UI_Cross_Culvert_Const";
import { fillWallBaseWidth, groundInterpolator } from "./B06_Section_UI_Cross_Culvert_Solve";
import type { RevetMaterial } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import { fillWallBaseWidth, groundInterpolator } from "./logic/B06_Section_UI_Cross_Culvert_Solve";
import { buildExtrasAt } from "./B06_Section_UI_Cross_Culvert_Extra";
import {
ZERO_ADJUST,
@@ -15,7 +15,7 @@
* ========================================================================== */
import type { InletStructureChoice, RevetKey, RevetPick } from "./B06_Section_UI_Cross_Culvert";
import { REVET_FORMS } from "./B06_Section_UI_Cross_Culvert_Const";
import { REVET_FORMS } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type { BasinAdjust, WallAdjust } from "./B06_Section_UI_Cross_Culvert_Types";
import type { SpanValues } from "./B06_Section_UI_Cross_Culvert_Wire";
import { L } from "./B06_Section_UI_Section_Common";
+1 -1
View File
@@ -72,7 +72,7 @@ import type { CrossWidthActions } from "./B06_Section_UI_Cross_View_Zoom";
import type { CutSlopeControl } from "./B06_Section_UI_Cross_CutSlope";
import { createCrossAxes, IDENTITY_VIEW } from "./B06_Section_UI_Cross_Axes";
import type { RevetHighlightSetter, RevetPick } from "./B06_Section_UI_Cross_Culvert";
import { REVET_FORM_DEFAULT } from "./B06_Section_UI_Cross_Culvert_Const";
import { REVET_FORM_DEFAULT } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import {
CROSS_PAD,
CROSS_WIDTH,
@@ -6,7 +6,7 @@
import type { CrossSection } from "./B06_Section_Api_Fetch";
import type { RevetKey, RevetPick } from "./B06_Section_UI_Cross_Culvert";
import { REVET_FORM_DEFAULT } from "./B06_Section_UI_Cross_Culvert_Const";
import { REVET_FORM_DEFAULT } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type { WallAdjust } from "./B06_Section_UI_Cross_Culvert_Types";
import type {
CulvertLink,
@@ -13,7 +13,7 @@ import {
REVET_EMBED_DEPTH_M,
REVET_FORM_DEFAULT,
WALL_MIN_PURE_HEIGHT_M,
} from "./B06_Section_UI_Cross_Culvert_Const";
} from "./logic/B06_Section_UI_Cross_Culvert_Const";
import { clampAxis, type AxisDragSpec } from "./B06_Section_UI_Cross_Panel_Base";
import type { CulvertLayout } from "./B06_Section_UI_Cross_Culvert_Types";
import type { WallAdjust } from "./B06_Section_UI_Cross_Culvert_Types";
+2 -2
View File
@@ -15,8 +15,8 @@ import {
REVET_LEAN_RATIO,
REVET_THICKNESS_M,
WALL_MIN_PURE_HEIGHT_M,
} from "./B06_Section_UI_Cross_Culvert_Const";
import type { RevetMaterial } from "./B06_Section_UI_Cross_Culvert_Const";
} from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type { RevetMaterial } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type { OffsetPoint, WallLayout } from "./B06_Section_UI_Cross_Culvert_Types";
import { appendWallHatch } from "./B06_Section_UI_Cross_Wall_Hatch";
@@ -16,7 +16,7 @@
* · 바자 : 세로 말뚝 3줄 + 가로 엮음 눈금.
* ========================================================================== */
import { REVET_THICKNESS_M } from "./B06_Section_UI_Cross_Culvert_Const";
import { REVET_THICKNESS_M } from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type { OffsetPoint, WallLayout } from "./B06_Section_UI_Cross_Culvert_Types";
const SVG_NS = "http://www.w3.org/2000/svg";
+1 -1
View File
@@ -17,7 +17,7 @@ import {
import { invalidateSectionDetail } from "./B06_Section_Section_Store";
import { onAnySwap } from "./B06_Section_Swap_Bus";
import type { DesignViewSave } from "../A00_Common/design/design_shared";
import { buildCrossPatches, type CrossPatchSources } from "./B06_Section_UI_Page_Patches";
import { buildCrossPatches, type CrossPatchSources } from "./logic/B06_Section_UI_Page_Patches";
import {
clearState,
readByKey,
@@ -15,7 +15,7 @@ import {
applySpanPatch,
revetWallSpec,
WALL_MIN_PURE_HEIGHT_M,
} from "./B06_Section_UI_Cross_Culvert_Const";
} from "./logic/B06_Section_UI_Cross_Culvert_Const";
import type { CrossSection, CulvertSet } from "./B06_Section_Api_Fetch";
import type { createStationControls } from "./B06_Section_UI_Page_Station_Controls";
@@ -13,7 +13,7 @@ import {
type SpanValues,
type StructureSpanControl,
} from "./B06_Section_UI_Cross_Culvert_Wire";
import * as CulvertConst from "./B06_Section_UI_Cross_Culvert_Const";
import * as CulvertConst from "./logic/B06_Section_UI_Cross_Culvert_Const";
/** 구간값 제어가 페이지·상위 제어기에서 받아 쓰는 창구. */
export interface SpanControlDeps {
@@ -9,7 +9,7 @@
* ========================================================================== */
import { useDesignStore } from "../A00_Common/design/design_store";
import type { DesignPipeline } from "../A00_Common/design/design_pipeline";
import type { DesignPipeline } from "../A00_Common/design/logic/design_pipeline";
import { pagePipeline, pipelineDetail } from "../A00_Common/design/design_pipeline_page";
import type { SectionDetailResponse } from "./B06_Section_Api_Types";
import { onAnySwap, swapSectionStations } from "./B06_Section_Section_Store";
@@ -31,7 +31,7 @@ import {
type StructureType,
} from "../B05_Profile/B05_Profile_Api_Structures";
import { readPendingPipes, writePendingPipes } from "../B05_Profile/B05_Profile_Api_Pipes_Draft";
import { mergeFacilityOptions } from "../B05_Profile/B05_Profile_UI_Drainage_Facility_Merge";
import { mergeFacilityOptions } from "../B05_Profile/logic/B05_Profile_UI_Drainage_Facility_Merge";
import { fordWaitsOf, waitsFordHeight } from "../B05_Profile/B05_Profile_UI_Drainage_Ford_Fill";
import { fetchDetailPipePoints } from "../B04_PreProcess/B04_PreProcess_Api_Fetch";
import {
+1 -1
View File
@@ -12,7 +12,7 @@
① 짝(ts ↔ py · 거울 시험):
- `Engine_Design.py` ↔ `common_util_cross_design.ts` · `Engine_Areas.py` ↔ `common_util_cross_design_areas.ts` · `test_b06_cross_design_mirror.py`
- `Engine_Culvert.py` ↔ `common_util_culvert_sets.ts` · `UI_Cross_Culvert_Const.ts` · `test_b06_culvert_sets_mirror.py` · `test_b06_pipe_wall_height_mirror.py`
- `Engine_Culvert.py` ↔ `common_util_culvert_sets.ts` · `logic/UI_Cross_Culvert_Const.ts` · `test_b06_culvert_sets_mirror.py` · `test_b06_pipe_wall_height_mirror.py`
- `Engine_Structures_Wall.py` ↔ `common_util_structure_walls.ts` · `test_b06_structure_walls_mirror.py`
- 지형 표본 = `common_util_surface_sampler` 하나(`Engine_SampleExtend` 도)
@@ -17,9 +17,9 @@ import type {
CrossStationResult,
PipelineStation,
StageContext,
} from "../A00_Common/design/design_pipeline_types";
import { planElevationAt } from "../B05_Profile/B05_Profile_UI_Profile_Alignment";
import { groundSamples } from "./logic/B06_Section_Station_Swap";
} from "../../A00_Common/design/logic/design_pipeline_types";
import { planElevationAt } from "../../B05_Profile/logic/B05_Profile_UI_Profile_Alignment";
import { groundSamples } from "./B06_Section_Station_Swap";
export { groundSamples };
@@ -13,7 +13,7 @@
* 순수 계산(DOM · fetch · 세션 없음).
* ========================================================================== */
import type { PipelineStation } from "../../A00_Common/design/design_pipeline_types";
import type { PipelineStation } from "../../A00_Common/design/logic/design_pipeline_types";
import type { CrossSection, SectionDetailResponse, SectionStation } from "../B06_Section_Api_Fetch";
interface Sample {
@@ -9,7 +9,7 @@
* 벽이 선 쪽은 뺀다 — 성토사면 경고와 같은 규칙(`wallSides`).
* ========================================================================== */
import type { CrossSection } from "./B06_Section_Api_Fetch";
import type { CrossSection } from "../B06_Section_Api_Fetch";
import {
wallSides,
type FillSlopeSideLength,
@@ -20,7 +20,7 @@ import {
REVET_FREEBOARD_M,
REVET_LEAN_RATIO,
} from "./B06_Section_UI_Cross_Culvert_Const";
import type { CrossDesign, CulvertSideSpec } from "./B06_Section_Api_Fetch";
import type { CrossDesign, CulvertSideSpec } from "../B06_Section_Api_Fetch";
import {
minShoulderWallOffset,
slopeLengthAlong,
@@ -33,7 +33,7 @@ import type {
EndFace,
OffsetPoint,
InletStructureChoice,
} from "./B06_Section_UI_Cross_Culvert_Types";
} from "../B06_Section_UI_Cross_Culvert_Types";
import { structureCutPoints, structureCutSpec } from "./B06_Section_UI_Cross_Structure_Cut";
/** 자동(기본) 집수정 모양(54-36) — 좌측 폼 「(기본)」 표시도 이 값. */
@@ -4,8 +4,8 @@
* 분리했다(700줄 제한). 값의 근거는 각 상수 주석에 지식DB 출처로 남긴다.
* ========================================================================== */
import type { CrossSection, CulvertSideSpec } from "./B06_Section_Api_Fetch";
import type { SpanRole, SpanValues } from "./B06_Section_UI_Cross_Culvert_Wire";
import type { CrossSection, CulvertSideSpec } from "../B06_Section_Api_Fetch";
import type { SpanRole, SpanValues } from "../B06_Section_UI_Cross_Culvert_Wire";
/** 관 위 최소 토피(m) — 프론트 정의처(백엔드는 `B06_Section_Engine_Culvert.MIN_PIPE_COVER_M`).
* ⚠ 임도 배수관 토피 규정이 지식DB에 없어 별표2 교량·암거 "복토 50㎝ 이상"을 교차
@@ -4,7 +4,7 @@
* 자리 풀이. 본체(`_Cross_Culvert_Geom.ts`)에서 분리했다(700줄 제한).
* ========================================================================== */
import type { SectionSample } from "./B06_Section_Api_Fetch";
import type { SectionSample } from "../B06_Section_Api_Fetch";
import {
FILL_MIN_RISE_M,
FILL_SLOPE_MAX_LENGTH_M,
@@ -18,7 +18,7 @@ import type {
OffsetPoint,
PipeEnd,
WallAdjust,
} from "./B06_Section_UI_Cross_Culvert_Types";
} from "../B06_Section_UI_Cross_Culvert_Types";
/** 기슭막이 하단선 폭(m) — 사다리꼴 밑변. 자리 기준(하단선 중점) 환산에 쓴다.
* `lean` = 그 벽의 전면 기울기(표준경사 · `revetWallSpec().lean`). */
@@ -8,7 +8,7 @@
* 나눔(`splitAtCrossings`) · 닫힌 영역(`findFaces` · 259-2)은 화면 몫 — 서버는 저장된 조각 두 끝만 검산.
* ========================================================================== */
import type { CrossDesign, CrossPickPiece, SectionSample } from "./B06_Section_Api_Types";
import type { CrossDesign, CrossPickPiece, SectionSample } from "../B06_Section_Api_Types";
export type Pt = [number, number];
export type LineKind = CrossPickPiece["line"];
@@ -11,7 +11,7 @@
* 길이는 `fillSlopeLengths`(카드 머리 「성토사면」 칸과 같은 값)를 받아 쓴다 — 여기서 다시 재지 않는다.
* ========================================================================== */
import type { CrossSection } from "./B06_Section_Api_Fetch";
import type { CrossSection } from "../B06_Section_Api_Fetch";
import { FILL_SLOPE_MAX_LENGTH_M } from "./B06_Section_UI_Cross_Culvert_Const";
/** 브레인 승인 문구 그대로(2026-09-14) — 고치면 승인을 다시 받을 것. */
@@ -12,7 +12,7 @@
* 기울기와 지반 기울기 차이로 만나는 자리를 추정한다.
* ========================================================================== */
import type { CrossDesign, CrossSection } from "./B06_Section_Api_Fetch";
import type { CrossDesign, CrossSection } from "../B06_Section_Api_Fetch";
import { designInterpolator, groundInterpolator } from "./B06_Section_UI_Cross_Culvert_Solve";
/** 설계선과 지반선이 만났다고 보는 표고 차(m). */
@@ -9,8 +9,8 @@
* ⚠ 파일 판이 바뀌면 이 import 도 옮길 것 — 시험 `test_b06_wall_lean_table` 이 최신 판을 대조.
* ========================================================================== */
import { type WallLeanInput, wallLeanRatio } from "../common_util/common_util_masonry_slope";
import masonrySlope from "../resources/data_masonry/masonry_slope_2026-01-01.json";
import { type WallLeanInput, wallLeanRatio } from "../../common_util/common_util_masonry_slope";
import masonrySlope from "../../resources/data_masonry/masonry_slope_2026-01-01.json";
import { REVET_FORM_DEFAULT } from "./B06_Section_UI_Cross_Culvert_Const";
/** 벽 전면 기울기 n — 표를 못 고르면 종전 0.3. */
@@ -8,10 +8,10 @@
* 쓰는 곳 = 흙막이 수평공간 뒤 · 박스 끝 · 세월교 측벽 끝 · ㄴ·ㄷ 집수정 끝 · 절토 쪽 배관 유출 벽 뒤.
* ========================================================================== */
import { cutProfilePoints } from "../common_util/common_util_cross_berm";
import type { BermSpec } from "../common_util/common_util_cross_berm";
import type { CrossDesign } from "./B06_Section_Api_Fetch";
import type { OffsetPoint } from "./B06_Section_UI_Cross_Culvert_Types";
import { cutProfilePoints } from "../../common_util/common_util_cross_berm";
import type { BermSpec } from "../../common_util/common_util_cross_berm";
import type { CrossDesign } from "../B06_Section_Api_Fetch";
import type { OffsetPoint } from "../B06_Section_UI_Cross_Culvert_Types";
/** 절토 제원 — 암(또는 단일) 경사 · 토사 경사 · 암 경계 오프셋(없으면 경사 하나) · 소단. */
export interface StructureCutSpec {
@@ -7,11 +7,11 @@
* 모으기만 한다 — 판정·한계는 각 제어기가 이미 끝냈다.
* ========================================================================== */
import type { CrossSectionPatch, StoredWallAdjust, StoredWallSpan } from "./B06_Section_Api_Fetch";
import type { BasinAdjust } from "./B06_Section_UI_Cross_Culvert_Types";
import type { FordAdjust } from "./B06_Section_UI_Cross_Ford";
import type { BoxAdjust } from "./B06_Section_UI_Cross_Box";
import type { InletStructureChoice } from "./B06_Section_UI_Cross_Culvert";
import type { CrossSectionPatch, StoredWallAdjust, StoredWallSpan } from "../B06_Section_Api_Fetch";
import type { BasinAdjust } from "../B06_Section_UI_Cross_Culvert_Types";
import type { FordAdjust } from "../B06_Section_UI_Cross_Ford";
import type { BoxAdjust } from "../B06_Section_UI_Cross_Box";
import type { InletStructureChoice } from "../B06_Section_UI_Cross_Culvert";
export interface CrossPatchSources {
/** 암 경계선 오프셋(누가거리 문자열 키). */