Files
Aislo/B05_wf2_Route/B05_wf2_Route_UI_Style_MassHaul.css
T
eomsangdonandClaude Opus 5 6c90c26eef feat(B05): 계획 유토곡선 이관 + 사토장·토취장 4옵션 자동 선정
절·성토 균형은 종단 시공계획고로 정해지고 사토장 위치도 계획고를 다시 끌어야
정리되므로, 계획용 유토곡선과 부지 선정을 B05로 옮겼다. B06은 실측 단면적으로
낸 정식 곡선과 확정·B08 인계를 맡는다.

B05 계획 유토곡선
- _UI_Profile_MassHaul.ts: 종단면 패널 안 2차 하단 슬라이드. 펼치면 12행 도면
  테이블 자리를 곡선이 대신 차지한다. 곡선 SVG를 종단 그래프와 같은 가로
  스크롤러 안 형제로 넣고 MassHaulAxis에 LONG_PAD + originOffset을 넘겨 X축을
  종단 chainageMapper와 일치시켰다.
- computeLongitudinalMassHaul(): 횡단 설계가 없는 계획 단계용 개략 엔진. 표준횡단
  노반폭을 전 구간 공통으로 물린다. 종단 기반 토량은 국내 기준상 노선계획 개산용
  이므로(2026-08-03 조사) 표준단면까지 씌워 정밀화하지 않는다.

사토장·토취장 자동 선정
- B05_wf2_Route_Engine_Disposal.py + POST /route/disposal-sites: 노선 corridor
  DEM 격자를 훑어 후보 부지를 추리고 옵션별 점수로 정렬한다. 기준 4가지 —
  비용(최단거리+하향 운반), 지형안정성(완경사·계곡 이격), 계곡부(계곡 축 매립),
  임내 공간(라이다 수고 기반 공터). 기준값 정의처는 DISPOSAL_SITE_CRITERIA.
- _UI_Profile_Disposal.ts: 범례 줄의 [토량 분배]와 [도형 위치 초기화] 사이에
  구분기호와 함께 라디오 토글 4개. 부지 카드에 위치·용량·운반거리와 기준별 근거값,
  측점·용량 사용자 정의 편집과 복원. 후보 부족으로 남은 토량은 경고로 알린다.
- 확정 시 종단 정본의 disposal_sites에 심는다(기준 미선택이면 저장분 삭제).

B06 연동
- common_util_mass_haul_sites.ts: 저장된 부지를 정식 곡선의 잔량 위치 기준으로
  운반거리를 다시 재 표시하고 mass_haul.disposal_sites로 B08에 넘긴다.

미구현(계획서에 남김): 토취장 토질 판정(지반유형이 B06 산출물), 계곡부 암거 연장.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 19:06:46 +09:00

75 lines
2.3 KiB
CSS

/* =============================================================================
* B05_wf2_Route_UI_Style_MassHaul.css
* B05 계획 유토곡선 2차 슬라이드 패널 전용 스타일.
*
* 곡선·범례·요약 자체의 스타일은 공용(`common_util_mass_haul.css`)이 이미 정의한다.
* 여기서는 종단면 패널 안에서 그것들이 놓이는 **자리**만 잡는다.
* ========================================================================== */
/* 본문 칸을 세로로 쌓아 그래프 스크롤러 아래에 요약 막대·손잡이가 붙게 한다. */
.b05-route-profile__body-wrap {
flex-direction: column;
}
.b05-profile__masshaul-bar {
display: flex;
flex: none;
flex-wrap: wrap;
align-items: center;
gap: var(--spacing-8) var(--spacing-16);
border-top: 1px solid var(--color-border);
background: var(--color-surface);
}
/* 공용 범례는 B06에서 그래프 위에 절대배치로 띄우지만, 여기서는 막대 안에 줄로 눕힌다. */
.b05-profile__masshaul-bar .b06-masshaul__legend {
position: static;
right: auto;
flex-wrap: wrap;
padding: var(--spacing-4) var(--spacing-16);
}
.b05-profile__masshaul-bar .b06-masshaul__summary {
border-top: none;
padding-top: 0;
}
.b05-profile__masshaul-empty {
padding: var(--spacing-8) var(--spacing-16);
color: var(--color-text-secondary);
font-size: var(--text-caption);
}
/* 2차 슬라이드 손잡이 — 바깥 패널 손잡이와 같은 문법이되 본문 폭 안에 눕혀 놓는다. */
.b05-profile__masshaul-handle {
position: relative;
display: flex;
flex: none;
align-items: center;
justify-content: center;
gap: var(--spacing-8);
height: 20px;
border-top: 1px solid var(--color-border);
background: var(--color-surface-raised);
}
.b05-profile__masshaul-caption {
color: var(--color-text-secondary);
font-size: var(--text-caption);
line-height: 1;
cursor: pointer;
user-select: none;
}
.b05-profile__masshaul-handle.is-open .b05-profile__masshaul-caption {
color: var(--color-text-body);
font-weight: 600;
}
/* 공용 손잡이 버튼은 부모 바닥 경계에 절대배치되도록 만들어졌다 — 이 줄에서는 흐름에 둔다. */
.b05-profile__masshaul-handle .ui-workflow-overlay__handle {
position: static;
transform: none;
margin: 0;
}