diff --git a/docs/raw/요구_1102/_분석_589-A_B05예정노선수정.md b/docs/raw/요구_1102/_분석_589-A_B05예정노선수정.md new file mode 100644 index 000000000..64272785b --- /dev/null +++ b/docs/raw/요구_1102/_분석_589-A_B05예정노선수정.md @@ -0,0 +1,113 @@ +# 분석 589-A — B05 평면 「예정노선 수정」 · 도구줄 · 그리기 칸 · 등고선 (요구 589 중 1~10 · 12) + +- 실측 자리: 검증_랩탑메인(dad81824) · 8000 · 5173 · 헤드리스(Edge · 새 세션 · 저장 안 함 · 스크립트 `tmp/brain_589/a_*.py` · 그림 `a_*.png`) + ORCA main 탭(처음 몇 조작만). +- ORCA main 탭은 도중에 다른 조사 창이 같이 써서(B06 횡단으로 옮겨감) 헤드리스로 옮김 · 탭 release 안 함(남이 쓰는 중) · 탭 초안 2 개(pipe-ids · structure-pick) 처음과 같음. +- 서버 · storage · DB 고침 없음 · `/route/follow` 는 저장 0 길. + +## 항목별 + +### 1. 선 그룹 지움 안 됨 + +- 지금 동작: 수정 켬 → 가운데 토막 넷 끌어 고름(「선 4개 · 80.0 m」) → Delete → 알림 「예정노선은 한 선입니다.」 · 선 그대로(80 꼭짓점). 앞쪽 끝 토막 묶음 지움은 됨(80 → 34 꼭짓점 · 다시 추적 13 노드). +- 까닭: D03 지움 `removeSegments`(`D03_PlanAnalysis/logic/D03_PlanAnalysis_Select.ts:166-234`)는 가운데 토막을 지우면 선을 둘로 가름(D03 = 끊긴 채 둠). B05 `apply()`(`B05_Profile/B05_Profile_UI_ExpectedDraw.ts:249-260`)가 선 둘 이상이면 알림 뒤 되돌림. 로직은 이미 공유 중 — 막는 것은 B05 「한 선」 검사. +- D03 공용 자리: 지움 = `UI_Edit.dropSelected` → `removeSegments` · 다시 잇기 = 긋기 「선 끝에서 이어 긋기 · 다른 선 꼬리에 닿으면 한 선으로」(`UI_Draw` · `attachHead`) · [잇기] `joinEnds`(`logic/D03_PlanAnalysis_Group`) — 기능 표 `join` 은 B05 숨김(`D03_PlanAnalysis_UI_Features.ts:94`). +- 고칠 길: 3번(끌 때 한 번 추적)과 같이 — 켠 동안은 끊김 허용(`apply` 의 한 선 검사를 끌 때로 옮김) · 끊긴 곳은 이어 긋기 또는 [잇기](기능 표 `join` b05 → use) · 끌 때 선 둘 이상이면 갈래 Q1. +- 조심: 갈래(`branch`)는 계속 숨김 · D03 지움 셈 손대지 않음. + +### 2. 수정 켬 때 추천노선 흐려짐 + +- 지금 동작: 추천노선 「토공 최소」 보기 → 수정 켬 → 노랑 점선이 다른 계획선 그림과 같이 0.35 로 흐림(그림 `a_1_on.png` · ORCA 같음). +- 까닭: `B05_Profile/B05_Profile_UI_RouteEdit_Render.ts:256-267` — `globalAlpha = dim` 뒤에 `scene.underRoute`(추천 보기)를 그림. +- 고칠 길: 추천 보기만 `globalAlpha = 1` 로 감싸 그림(한두 줄). 차례(계획선 아래)는 그대로. + +### 3. 계획선 바로 고침 → 끌 때 한 번 · 「두 단계 중 둘째」 확인 + +- 지금 동작: 고칠 때마다(놓음 · 지움 · 긋기 끝) 확인창(켠 뒤 처음만) → `POST /route/follow` → 편집기 한 걸음(`ExpectedDraw.ts:222-239` `commit` · `onMode` → `apply`). +- 두 단계 = 서버 `followed_table`(`B05_Profile/B05_Profile_Route_Polyline_Write.py:206-218`) — ① `build_planned_polyline`(꺾은선 + 원곡선 · 단순화 4 m) ② `snap_curves_to_stations`(곡선 가운데 MC 를 20 m 일반측점에 · `B05_Profile_Engine_RouteInitial_Station.py:559-615`) · ② 실패 = None → ① 그대로. +- 실측(둘째 단계 됨): + - 받은 꼭짓점 80 → ① 34 노드 · 곡선 32 · 측점 위 1 → ② 33 노드 · 곡선 31 · 측점 위 31 · 밖 0(0.04 s). + - 화면 노드 하나 지움 → follow 79 점 → 화면 초안 33 노드 · 곡선 31 · 다시 짜도 측점 위 31/31(MC 80 · 140 · 180 · 220 …). + - 손 그은 꼴 15 가지(20 · 40 · 10 m 토막 · 꺾임 ±15~45°) 모두 ② 측점 위 전부 · None 0. +- 화면에서 「안 됨」처럼 보일 만한 것(실측): + - (가) 켠 동안 계획선이 0.35 로 흐리고 굵은 민트 예정노선 밑에 깔림 · R 12 m 곡선이 20 m 마다라 거의 안 보임. + - (나) 받은 꼭짓점(`GET /route/plan/source` = 지금 지표면 11-01 로 다시 자름) 1,377 m ≠ 화면 예상노선(`expected_route.csv` 10-17) 1,097 m → 첫 고침에 평면선 끝이 280 m 늚 · 측점 · 구조물 자리 밀림(배관 19+10 → 17+18) · 칸 글 「받은 노선 1,377 m」. 11번(B04 서피스 넓힘)과 같은 뿌리. + - (다) 이 프로젝트 저장 평면 = 「토공 최소」 추천을 입힌 선(`initial_choice.json` earthwork · 19 노드) — 고친 뒤는 추적선만(추천 다시 안 입힘). +- 고칠 길(끌 때 한 번): `commit` · `onMode` 에서 `apply` 걷음 · `setOpen(false)` 때 판이 처음과 다르면 확인창 → follow → 한 걸음 · 켠 동안 되돌리기 = 예정노선 판 자기 사진첩(지금 `ExpectedDraw.ts:341` 은 페이지 사진첩으로 넘김 → 켠 동안 고친 것은 페이지 걸음이 아니라 엇갈림) · 도구줄 되돌리기 단추도 켠 동안 그쪽으로(`B05_Profile_UI_RouteEdit_History`) · 켠 채 [저장] · [초기화] = 먼저 끄라는 알림(권함 · 기본값). +- 조심: follow 서버 · 두 단계 셈 손대지 않음 · 끌 때 = 한 걸음 하나(626-3 지킴 대조 그대로) · 지운 자리 구조물은 0+0 으로 감(앞 토막 지움 실측 배관 19+10 → 0+0 · 지금도 같음). + +### 4. 스냅 · 스냅 간격 하나로 + +- 지금 동작: 도구줄 「스냅」 단추 + 「스냅 간격」 고르기 메뉴(10 m · 측점 No.) 따로. +- 까닭: 표 두 줄 `A00_Common/map/map_toolbar.ts:51-58` · 만듦 `B05_Profile/B05_Profile_UI_RouteEdit_Chrome.ts:133-145 · 264` · 켬 판정 = 단추 `aria-pressed`(`B05_Profile_UI_RouteEdit_SnapStep.ts:76-77`) · `RouteEdit.ts:119 · 178`. +- 고칠 길: 고르기 메뉴 하나(`createPickMenu` 하나 고름 + `offLabel` 「끔」 — 줄 = 측점 No. · 10 m · 끔) · 켬 = 값 있음 · 표 한 줄 · 저장 칸(`station_snap` · `_step`) · pref 열쇠 그대로. +- 조심: B05 만(D03 없음) · 시험 390_4 · 390_5 · 346_3 · 634_2 · 624_2. + +### 5. 수정 켬 때 길이재기 + +- 지금 동작: 끔 = 재기 단추 → 노선 위 두 점 → 「예상노선 구간 27+11 → 38+1 · 210.0 m · -1.0 %」. 켬 = 재기 단추 눌림인데 두 점 누름이 예정노선 고르기로 감 · 재기 창 안 뜸(노선 위 · 빈 땅 둘 다). +- 까닭: 켠 동안 예정노선 키트가 누름을 먼저 받고 막음(`D03_PlanAnalysis_UI_Kit.ts` `bindPlanInput` capture) · B05 재기(`B05_Profile_UI_RouteEdit_Measure.ts` · 계획 · 예상 선 위만)는 못 받음. +- D03 공용 자리: `createPlanMeasure(heightAt, network)`(`D03_PlanAnalysis_UI_Measure.ts`) — 첫 누름이 선 위 = 선 따라 · 밖 = 두 점 곧은 거리 · 지반고 · 기울기 · 글은 지도에 그림 · 예정노선 페이지는 `idle: () => !measuring` · 겹 끝에 재기 겹(`D03_PlanAnalysis_UI_Page.ts:198 · 317-331`). +- 고칠 길: ExpectedDraw 가 재기 켬(`measureControls.mode()` 함수로 받음)일 때 키트 `idle` 거짓 · 겹 끝에 D03 재기 겹(그물 = 고치는 예정노선 · 높이 = 설계 지형 격자) · 끄면 지움 · B05 재기 창은 켠 동안 숨김. + +### 6. 받은 노선 선 잘 보이게 + +- 지금 동작: 고친 뒤 받은 노선 = 회색(`--draw-text-secondary` #9ca3af) · 불투명 0.7 · 2 px · 점선 [2, 5] — 등고선 위에서 거의 안 보임(그림 `a_10b_after_cut.png`). +- 까닭: `B05_Profile_UI_ExpectedDraw.ts:352-366`. +- 고칠 길: 새 그림 색 `--draw-map-received`(`ui_template_theme.css` 지도 그림 줄 곁) + 검은 테(공용 `paintRoutePreview` 꼴 · `map_route_preview.ts:41-55`) · 추천 넷 · 계획 주황 · 예정 민트와 다른 색 · 밝음 · 어두움 · 위성 대비 3:1 넘김. + +### 7. 받은 노선 밑 설명 + +- 지금 동작: 켬 = 「[긋기] · 우클릭 … 다시 추적합니다.」 세 줄 · 끔 = 「「예정노선 수정」을 켜면 …」. +- 까닭: `ExpectedDraw.ts:42-45`(HINT · EMPTY_HINT · OFF_HINT) · `syncCard`. +- 고칠 길: 켬 글(HINT · EMPTY_HINT) 걷음 · 길이 비교 줄 「받은 노선 … → 고친 노선 …」 은 값이라 남김 · 끔 글은 남김(사용자 말 없음 · 기본값). + +### 8. B05 위치 칸 + +- 지금 동작: 왼쪽 「위치」 칸(주소 · 장소 찾기) 보임. +- 까닭: 기능 표 `site` b05 use(`D03_PlanAnalysis_UI_Features.ts:37`) · 자리 `B05_Profile_UI_Panel_Plan.ts:26-28` · 찾기 `ExpectedDraw.ts:119-133 · 153 · 185-188`. +- 고칠 길: 표 `site` b05 → hide · 자리 「그리기」 하나(order 1) · 찾기 걷음 · 좌표 변환 `createPlanCoords` 는 속성 판 경위도로 남김 · 시험 635_3 · 635_5(찾기 이동 몫) 고침. + +### 9. 그리기 칸 [긋기] 걷음 → 네 방식 켬끔으로 시작 · 끝(D03 · B05) + +- 지금 동작: [긋기]/[긋기 끝] 단추 + 방식 넷(늘 하나 고름 · 다시 눌러도 안 풀림). +- 까닭: 단추 `D03_PlanAnalysis_UI_DrawPanel.ts:41-46` · 배선 `D03_PlanAnalysis_UI_Draw.ts:160-169`(`onDraw` → `setMode`) · 방식 칸 공용 `A00_Common/map/map_draw_kind.ts`(분할 고르기) · 부품 `ui_template/ui_template_segment.ts:66`(고른 칸 다시 누름 = 무시). +- 고칠 길: 부품 분할 고르기에 「다시 눌러 풂」 꼴(`clearable` · 부품 모음 견본) · 방식 칸에 켬끔 꼴(그리기 칸만 · 노드 판 `D03_PlanAnalysis_UI_Props.ts:180` 은 그대로) · 방식 켬 = 그 방식으로 긋기 시작 · 같은 칸 다시 = 끝(Enter 와 같음) · 긋는 중 다른 칸 = 방식만 바뀜(Tab 과 같음) · 긋기 끝(Enter · Esc · 붙어 끝남 · 우클릭 시작) 때 칸 켬 맞춤 · 단추 줄은 「구간 나눔」만(B05 = 숨김이라 줄 숨김). +- 조심: D03 전후 같음 — 우클릭 「여기서 긋기 시작」 · 지점에서 긋기 · 다시 긋기(`respan`) · Tab · 노드 판 · 시험 625_draw · 553_4 · 626_3. + +### 10. 수정 켬 때 등고선이 예정노선 둘레만 + +- 지금 동작: 등고선 = 계획선 bbox + 300 m 띠로 자름(켬 · 끔 같음 · 크게 줄이면 띠 네모 215 × 145 px 안 LAS 자료 모양만). 켠 채 앞 토막 지움 → 다시 추적 → 띠 215 → 144 px 로 줄어 받은 노선 앞쪽이 등고선 밖(그림 `a_10b_after_cut.png`). +- 까닭: 띠 = 계획선 기준 `contourBandRect`(`B05_Profile_UI_RouteEdit_Input.ts:511-536`) — 캔버스 `Render.ts:199-206` · GL clip-path `RouteEdit_Gl.ts:180-198` · 도엽은 서버가 계획선 범위로 잘라 줌(`RouteEdit_Contour.ts:165-180` `coveringSheets` · `RouteEdit.ts:598`) · LAS 는 확정 모델 등고선 파일 범위(모델 871~874 · 11-01 · 바닥 34.4 ha). +- D03: 도엽 조각 = 보이는 화면만 받음(`D03_PlanAnalysis_UI_SheetTiles.ts` · GL 이면 등고선은 줌 조각) — B05 와 받는 길이 다름. +- 고칠 길(권함): 켠 동안 띠 자르기 끔(캔버스 · GL 둘 다 · 켬 신호 = `scene.overAll`) → LAS = 전체 · 도엽 = 계획선 + 고치는 예정노선 범위로 덮기 다시 받음(`coveringSheets` 선 = 둘 합침) · 끈 뒤는 지금처럼 띠. 보이는 화면만 받기(D03 조각)는 B05 도엽 받기 길을 바꾸는 큰 일 — 뒤로. +- 조심: LAS 등고선 범위 자체는 11번(B04 서피스 넓힘 뒤 등고선이 옛 범위) 결과에 매임 — 11번 먼저 보고 맞춤. + +### 12. 추천노선 여럿 보기 · 색 구분 · 「끔」 걷음 + +- 지금 동작: 메뉴 = 하나만 고름(radio) + 「✓ 끔」 · 선 하나만 노랑 점선. +- 까닭: 공용 `A00_Common/map/map_route_preview.ts:17-29`(`offLabel: "끔"` · 하나) · B05 `B05_Profile_UI_RouteEdit_RecPreview.ts:41-75`(보인 선 하나 · `turn`) · 그림 색 하나(`paintRoutePreview` 노랑). +- 공용 자리: 여럿 꼴 이미 있음 — `createPickMenu({ multi: true })`(`ui_template_context_menu.ts:303-310 · 353` · 겹 묶음 아이콘이 씀). +- 고칠 길: 공용 메뉴를 여럿 꼴(끔 없음 · 다 끄면 꺼짐) · B05 = 고른 갈래마다 선 · 색 넷(새 `--draw-map-rec-1~4` · 점선 + 검은 테) · 메뉴 줄 색 표(부품 `PickMenuItem` 에 색 점 칸 더함 · 견본) · 예정노선 가이드 선(`D03_PlanAnalysis_UI_Guide.ts:65-67` · 줄 하나)은 켬끔 하나로 같은 동작. +- 조심: 시험 626_1 · 636_2 · 634_1 · 551_2 · 검증 창구 `state()` 꼴(모드 하나 → 여럿). + +## 덧 발견 + +- 받은 꼭짓점 1,377 m 대 예상노선 1,097 m(3번 (나)) — 받은 노선 길이 · 시점 같음 · 끝 149 m 떨어짐 · 지표면 다시 자름 때문 · 11번과 같이 판단할 일. +- 켠 동안 지운 자리에 있던 구조물 → 0+0(배관 19+10 → 0+0) — 지금 규칙 그대로 · 끌 때 한 번으로 바꾸면 끌 때 한 번 일어남. + +## 일감 묶음(파일 경계 · 셋 창 병행) + +| 창 | 항목 | 파일 | 시험 | +| --- | --- | --- | --- | +| ① 예정노선 흐름 | 3 → 1 · 5 · 7 · 8 · 6 | `B05_Profile_UI_ExpectedDraw.ts`(주) · `B05_Profile_UI_Panel_Plan.ts` · `D03_PlanAnalysis_UI_Features.ts`(site · join 줄) · `B05_Profile_UI_RouteEdit_History.ts`(켠 동안 되돌리기 길) · `B05_Profile_UI_RouteEdit.ts`(재기 켬 함수 넘김 1~2 줄) | 626_3 · 635_3 · 635_4 · 635_5 + 새 시험(끌 때 한 번 · 끊김 · 재기) | +| ② 도구줄 · 등고선 | 2 · 4 · 12 · 10 | `B05_Profile_UI_RouteEdit_Render.ts`(2 · 10) · `_Gl.ts` · `_Contour.ts`(10) · `_Chrome.ts` · `_SnapStep.ts`(4 · 12) · `_RecPreview.ts` · `A00_Common/map/map_toolbar.ts` · `map_route_preview.ts` · `D03_PlanAnalysis_UI_Guide.ts`(12) · `ui_template_context_menu.ts`(색 점 · 견본) · `ui_template_theme.css`(그림 색 — 6번 `--draw-map-received` 도 여기서) · `B05_Profile_UI_RouteEdit.ts:119 · 178`(스냅 두 줄) | 626_1 · 636_2 · 634_1 · 634_2 · 624_2 · 624_3 · 390_4 · 390_5 · 346_3 · 509_1 · 551_2 | +| ③ 그리기 칸 | 9 | `D03_PlanAnalysis_UI_DrawPanel.ts` · `D03_PlanAnalysis_UI_Draw.ts` · `A00_Common/map/map_draw_kind.ts` · `ui_template/ui_template_segment.ts`(+ 견본) | 625_draw · 553_4 · 626_3 | + +- 같은 파일 몫: `B05_Profile_UI_RouteEdit.ts` 682 줄(700 한도 가까움) — ① · ② 각 두어 줄만 · 다른 자리. `ui_template_theme.css` 는 ② 하나가 다룸(6번 색도). +- 차례: 셋 병행 · ① 안에서 3번 먼저(1번 끊김 허용이 3번 위에 섬) · ② 10번은 11번(B04 등고선) 결과 뒤 LAS 범위 확인. +- 검증 프로젝트: 검증_랩탑메인 = 사용자 공용 — 실측은 헤드리스 새 세션(캐시 따로) · [저장] 안 함. + +## 사용자에게 물을 갈래 + +- Q1(1 · 3번): 「예정노선 수정」을 끌 때 선이 끊겨 있으면 — (가) 끄지 않고 「끊긴 곳을 이어 주세요」 알림(권함) · (나) 끊긴 곳을 곧은 선으로 저절로 이어 평면선을 만듦. +- Q2(3번): 「둘째 단계」가 무엇인지 — 실측상 ① 직선 + 곡선 ② 곡선 가운데를 20 m 측점에 맞춤은 둘 다 됨(31 곳 모두 측점 위). 화면에서 본 것이 (가) 켠 동안 곡선이 흐리게 깔려 안 보임 (나) 고친 뒤 선 끝이 280 m 늘고 측점이 밀림 (다) 처음 계획선처럼 「토공 최소」 같은 추천이 다시 안 입혀짐 — 어느 쪽인지.