Files
Aislo/docs/raw/plans/2026-07-24_plan_b05_reorganization.md
T
eomsangdonandClaude Opus 5 eb30b774f8 chore(docs): docs 폴더 git 추적 전환 · PLAN·OWNERS 최상위 이관
- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록)
- `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록
  — 창끼리 공유하되 저장소에는 안 올리는 장부
- 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠)
- graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦

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

9.9 KiB
Raw Blame History

PLAN: B05 종단면도 테이블·그래프 정렬 개편 및 비정규 측점 구현 완료

✅ 완료 (2026-07-24 세션) — B05 종단면도 테이블·그래프 정렬 개편

측점 간격을 브라우저 폭과 무관한 고정값으로 바꾸고, 0측점을 이름표 열 밖으로 밀어 그래프·테이블 시작점을 맞췄다. (검증 전 · 검증보고서 작성 대상)

  • ① 스크롤 시 좌측 여백 누출 차단: .b05-route-profile__body의 padding-left를 0으로 낮춰(우측 15px만 유지) sticky 이름표 열이 못 덮던 좌측 틈을 없앴다. 이제 가로 스크롤에도 셀 값이 이름표 왼쪽으로 새지 않는다. → B05_wf2_Route/B05_wf2_Route_UI_Style.css
  • ② 그래프 시작점 우측 이동(0측점 정렬): 데이터 매핑에 좌측 반 칸 오프셋 (PROFILE_ORIGIN_OFFSET_PX = STATION_SPACING_PX / 2)을 주어, 0측점 셀 전체가 이름표 (labelWidth = LONG_PAD.left) 오른쪽으로 나오게 했다. 그래프도 새 originOffsetPx 파라미터로 같은 오프셋을 받아 X축을 맞춘다. → B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Longitudinal.ts (파라미터 추가, 기본 0 → B06 무영향), B05_wf2_Route/B05_wf2_Route_UI_Profile_Panel.ts
  • ③ 측점 간격 기본값(기준×1.5) + 폭맞춤 병행: computeProfileLayout()로 노선을 STATION_SPACING_PX × 1.5(≈85px) 간격의 최소 폭으로 펼치되, 브라우저가 더 넓으면 그만큼 폭맞춤으로 늘린다(좁으면 스크롤). 매핑은 x = LONG_PAD.left + halfCell + c·pxPerMeter, pxPerMeter = (width − 프레임여백) / (maxChainage + 측점간격)으로 좌우 반 칸 여백과 셀 폭(interval·pxPerMeter − gap)이 실제 간격에 항상 맞물린다. 셀 폭·오프셋은 폭맞춤 시 함께 늘어난다. → B05_wf2_Route/B05_wf2_Route_UI_Profile_Panel.ts (fixedProfileWidth→computeProfileLayout, PROFILE_SPACING_MULTIPLIER = 1.5; stationCellWidth/tableMinimumWidth 제거)
    • ※ 최초 계획(측점 간격 완전 고정·무스트레치)에서 사용자 요청으로 "1.5배 최소 + 폭맞춤"으로 변경.
  • ⑤ 그래프 X축 측점 이름 복원: 축 제목 삭제 시 함께 사라졌던 측점 이름(세로선 항목)을 다시 표시. 축 제목(b06-chart__axis-label)만 숨기고 측점 라벨(b06-chart__station-label)은 transform: translateY(-9px)로 살짝 올려 하단 편집 버튼(is-down) 밴드와 분리했다. → B05_wf2_Route/B05_wf2_Route_UI_Style.css
  • ⑥ 사이드바 "계획선 설계" 슬림화: 자동 산출이 이미 처리하는 두 필드를 사이드바에서 제거.
    • 주 진행방향 제거: 서버 main_direction="auto"가 지반 형상에서 역기울기 방향을 자동 판정하고, 노선 진행은 항상 좌→우이므로 수동 select는 불필요. (백엔드 기본값 auto 유지)
    • 균형 구역 길이 제거: 절성토 균형 분할용 solver 파라미터인데, 이제 그래프+버튼 수동 편집으로 제어하므로 노출 가치 낮음. (백엔드 기본값 = criteria 기본/전체 1구역 유지)
    • 지형 구분은 법정 기준값 산정에 필요하므로 유지. 요청 payload에서 두 키가 빠져 Pydantic 기본값 적용. → B05_wf2_Route/B05_wf2_Route_UI_Panel.ts(폼/refs/getValues/restore·RoutePanelValues 필드 제거), B05_wf2_Route/B05_wf2_Route_UI_Page.ts(restore 매핑·요청 payload 제거)
  • ⑦ 테이블 종점 열 우측 이동: 종점(마지막 측점)이 off-grid라 앞 측점과 겹칠 때, 측점 값·곡선 셀만 오른쪽으로 밀어 값이 읽히게 함(캔버스 오른쪽 여백 안에서 클램프). 종점이라 수직선에서 벗어나도 인지에 무리 없음. 구배 블록·그래프 세로선은 그대로 둔다. → B05_wf2_Route/B05_wf2_Route_UI_Profile_Table.ts (stationCellCenters, 셀 중심 배열을 값·곡선 행 공용)
  • ⑧ 하단 패널 스크롤바 전역 통일: 하단 종단면도 패널만 12px 두꺼운 막대로 덮어쓰던 것을 제거, 좌측 사이드바와 같은 전역 pill 스크롤바(테마 *::-webkit-scrollbar, 8px)를 상속. → B05_wf2_Route/B05_wf2_Route_UI_Style.css
  • ⑨ 비정규 측점 사이드바 컨테이너(초안 UI): 좌측 사이드바에 "비정규 측점 (구조물)" 섹션 추가. 지금은 자유 텍스트 textarea만 받는다(측점 X+XX 위치 + 구조물, 한 줄에 하나). 재탐색 트리거에서 제외해 텍스트 수정이 "재탐색 필요"를 띄우지 않는다. 값은 panel.irregularStationsText()로 노출하되 백엔드로 보내지 않음(형식·옵션 미확정). 추후 구조물 선택+값 입력 및 백엔드 연동으로 발전. → B05_wf2_Route/B05_wf2_Route_UI_Panel.ts, B05_wf2_Route/B05_wf2_Route_UI_Style.css
    • 미결(다음 단계): 텍스트 파싱 규칙, 지속성(reload 보존/DB 저장), 요청 payload·스키마·엔진 연동, 구조물 형식 select 정의. Backlog "비기준 측점 처리"와 ④ 렌더(주석형)로 이어짐.
  • ⑩ 그래프:테이블 세로 비율 4:6 + 테이블 글자 여백 축소: CHART_HEIGHT_RATIO 0.3→0.4(그래프 40 : 테이블 60), 테이블 폰트 비율 FONT_PER_ROW_HEIGHT 0.52→0.64·CELL_PADDING_PX 4→2로 상하좌우 여백 축소. → B05_wf2_Route_UI_Profile_Panel.ts, B05_wf2_Route_UI_Profile_Table.ts
  • ⑪ 그래프 편집 버튼 상시 표시·밝은 색: 상/하·시프트 상/하 버튼을 hover 노출→상시 표시(opacity 0.9), 글자색을 밝게(측점=--color-text, 구간=밝은 자수정). 크기(18×15)는 유지. → B05_wf2_Route/B05_wf2_Route_UI_Style.css

🚧 비정규 측점(구조물 측점) — Phase 1~4 구현 완료(백엔드 E2E 테스트 대기)

결정(2026-07-24): 착수 범위 = Phase 1~3 프론트 먼저, 입력 형식 = 측점번호+잔여거리 2칸 분리.

  • Phase 1 — 사이드바 구조화 입력: 신규 모듈 B05_wf2_Route_UI_IrregularStations.ts. 측점번호+잔여거리(→chainage = 측점×간격 + 잔여) + 구조물(자유 텍스트) + [추가]. 목록 표시, 항목 선택 시 폼 로드 → [수정]/[삭제]/[리셋]. 클라이언트 store, 백엔드 미전송. 패널이 재탐색 트리거에서 제외. → _UI_IrregularStations.ts(신규), _UI_Panel.ts(textarea→모듈 교체, onIrregularChange/Select 콜백, panel.irregularStations 노출), _UI_Style.css
  • Phase 2 — 그래프·3D 프리뷰: SectionStation.kind에 "irregular" 추가. Page가 규칙 측점 좌표 사이 chainage 선형보간으로 3D 마커 위치 근사(interpolateIrregularStations) → renderStationLines에 병합. 그래프는 longitudinal.stations에 주입해 파선 세로선+라벨(측점 이름은 chainage로 자동 산출). 그래프·3D에서 비정규 측점을 고르면 사이드바 폼에 로드(syncIrregularSelection ↔ selectByChainage). → B06_..._Api_Fetch.ts(kind union), _UI_Page.ts, _UI_Profile_Panel.ts(setIrregularStations+그래프 병합), B06_..._UI_Longitudinal.ts(기존 렌더 재사용), _UI_Style.css(--irregular 파선)
  • Phase 3 — 테이블 주석형(④ 반영): 규칙 격자·외곽선은 그대로 두고, 비정규 측점을 파선 세로선 + 라벨(측점)+구조물 태그로 주석층으로 얹음. 가까운 라벨은 상·하 2슬롯 스태거로 겹침 회피. → _UI_Profile_Table.ts(buildIrregularAnnotations, irregularStations 옵션), _UI_Style.css
  • Phase 4 — 경로 확정 시 횡단 생성(파일 기반, 비치명적): 결정(2026-07-24) = 프리뷰 작성은 그대로, [경로 확정] 시 비정규 측점의 횡단까지 생성해 다음 페이지(B06)로 잇는다.
    • 엔진: SectionGenerationOptions.extra_stations 추가 → generate_sections가 비정규 chainage를 격자 측점 배열에 병합해 동일 방식으로 횡단 샘플링(kind="irregular", structure 부착). 신규 generate_irregular_sections()는 비정규 측점만 골라 cross_*.json을 쓰고 측점 dict를 반환.
    • 통합점(안전 설계): B06 상세는 종단 파일의 stations를 읽고 그에 맞는 cross_*.json만 glob으로 노출한다 → DB 미기입, 파일 병합만으로 표시된다. 계획선·규칙 측점·표고 샘플·편집은 손대지 않아 확정 시 프로파일 편집이 유실되지 않는다. 파일 기반이라 재확정해도 중복 없음(기존 비정규 교체).
    • 확정 흐름: 프론트가 확정 시 지표 샘플러 입력(filter/method/smooth/model)+비정규 목록을 전송 (RouteConfirmRequest). 라우터는 _append_irregular_cross_sections를 비치명적으로 호출 — 실패해도 경로 확정(다음 단계 진행)은 그대로. 프로파일 편집 저장(profilePanel.save) 뒤에 실행.
    • → _Engine_Sections_Core.py(extra_stations), _Engine_Sections.py(generate_irregular_sections), _Schema.py(RouteConfirmRequest/IrregularStationInput), _Router.py(confirm 본문+비치명 호출+헬퍼), _Api_Fetch.ts(confirm 본문), _UI_Page.ts(confirm 시 전송)
    • ⚠ 검증 필요(미실행): DB·지표 데이터·파이프라인을 이 환경에서 돌릴 수 없어 정적 검사만 통과 (py_compile·tsc). 실제 프로젝트로 확정→B06에서 비정규 횡단 노출 여부 엔드투엔드 테스트 필요.
    • 남은 한계: (a) 재탐색(solve) 시 종횡단이 전량 재생성되어 비정규 측점이 사라짐 — 저장된 extra_stations(옵션 단일 소스)로 자동 재포함하는 연결은 후속. (b) reload 시 사이드바 목록 복원 미구현 (측점은 저장돼도 폼 목록은 클라이언트 상태). (c) B07 CAD·B08 수량용 DB cross_sections 행은 미기입 (B06 표시는 파일 기반이라 정상). (d) 구조물은 자유 텍스트(형식 select 미정).