chore(조사): 요구 276 분석 — 추천 후보 초기 종단 미리 셈 · [적용] 438 비껴가는 길 둘
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01C6BNBFXFndbqYxu6sZuknK
This commit is contained in:
@@ -0,0 +1,168 @@
|
||||
# 476 요구 276 — 노선 추천 때 초기 종단 미리 셈 · [적용] 늘 새 규칙 — 분석
|
||||
|
||||
분석 = 클로드 에이전트(Opus 5.5 · 읽기만) · 기준 = `main_laptop_1` `c58b42b01` · 추정은 (추정).
|
||||
측정 = scratchpad `req276\`(검증_랩탑메인 dad81824 의 추천 저장본 15 벌 · `dtm_classification_smooth.npz` **사본**) · storage · DB 쓰기 없음.
|
||||
|
||||
## 0. 결론
|
||||
|
||||
- 지금 추천 결과에는 **초기 종단이 없음** — 있는 것은 「균형 종단」(`metrics.profile` · 20 m 측점 계획고 · **2 m 비용면** 지반) 하나 · 종단곡선 · 438 직선화 · 실제 측점(곡선 · 관 · 구조물 · 추가 측점) 없음.
|
||||
- 지금 미리 보기 ≠ [적용] 결과 — [적용]은 균형 종단을 **1 m 표본기**로 다시 셈(계획고 차 최대 0.52~0.82 m · 평균 0.17~0.24 m · 절 · 성 3~7 % 차 · 측정) 뒤 실제 측점에 438 로 얹음.
|
||||
- [적용]이 438 을 안 거치는 길 둘 — ① 「종단 반영」 끔 = `_carry_profile`(같은 노선 = 옛 꼭짓점 · 편집 · 옛 L 통째) ② 「종단 반영」 켬인데 균형 종단 셈 실패(None) = 같은 `_carry_profile` 로 떨어짐.
|
||||
- 비용(측정 · 후보 하나) — 측점 틀 0.02~0.03 s · 지반 첫 계획선(438) 0.03~0.05 s · 1 m 균형 종단 2.4~3.6 s · 균형 → 438 얹기 0.02~0.05 s.
|
||||
- 설계 — 초기 종단 = **[적용]이 쓸 값을 같은 코드로** 후보마다 서버가 셈(측점 틀 → 1차 계획선 438 → 켬이면 1 m 균형 목표 → `held_pass_through`) · 추천 결과 옆 파생 저장본(`route_recommend/initial/<키>.json` · 지문) · 모달은 그 선을 그리기만 · [적용]은 서버가 같은 함수로 다시 셈(옛 꼭짓점 이어받기 걷음) → 작업본 → 초기값 스냅샷.
|
||||
- 가장 작은 고침(필수) = [적용](`as_initial`)이면 `_carry_profile` 안 부름 — 이것만으로 「같은 노선도 새 규칙」 · 「기존 프로젝트 = [적용] 다시 = 새 초기 종단」이 섬.
|
||||
|
||||
## 1. 지금 흐름
|
||||
|
||||
### 1.1 추천 요청 → 엔진
|
||||
|
||||
| 걸음 | 하는 일 | 자리 |
|
||||
|---|---|---|
|
||||
| 모달 알약 | `POST /route/initial` `{mode, weights, criteria, with_profile, recompute}` | `B05_Profile_UI_RouteEdit_Initial.ts:121-137` |
|
||||
| 라우터 | 예상노선 · 상한(법정 또는 칸) · 설계속도 · 표준 횡단면 · 비용면 지형 읽음 → 지문 → 저장본 있으면 꺼냄 · 없으면 셈 → 덮개 수만 지금 관으로 | `B05_Profile_Router_RouteInitial.py:42-193` |
|
||||
| 지문 | 묶음(지형 서명 · 예상노선 · 계류 · 상한 · R · 이격 · 고름 · 목표) + 갈래 · 비중 · `with_profile` · 설계속도 · 표준 횡단면 · `ALGO_VERSION 8` · 엔진 소스 지문(`Engine_RouteInitial*` · `Sections_Core` · `B06 Engine_Design*` · `route_polyline`) | `B05_Profile_Engine_RouteInitial_Store.py:39-115` |
|
||||
| 저장본 | `B05_Profile/route_recommend/<키>.json` · 덮어쓰기 없음 · 종류마다 2 벌 · 다른 판 30 일 뒤 지움 · STORAGE_SCOPE · 스냅샷 밖 | 같은 파일 `:149-217` · `common_util_save_guard.py:23-34` |
|
||||
| 엔진 | 갈래 하나 = 후보 하나(follow · 묶음에서 고름 · 비중) → 측점 맞춤 → `finish` 에서 고른 선에만 정밀 균형 종단 | `B05_Profile_Engine_RouteInitial.py:289-522` |
|
||||
| 미리 셈 | 체인 끝 · B05 열 때 · 기본 다섯 갈래(+ 저장된 제약 다섯) · `with_profile=True` | `B05_Profile_Router_RouteInitial.py:218-308` |
|
||||
|
||||
### 1.2 후보마다 셈하는 것
|
||||
|
||||
- 평면 — `planned`(4자리) · `nodes` · `curves` · 비교값(연장 · 이격 · 기울기 · 계류 · 곡선 측점 밖 수).
|
||||
- `with_profile` 켬 — `attach_profile` → `route_profile(vertices, terrain=2 m 비용면)` → `balanced_profile`(20 m 측점 + 종점 · 횡단 ㎥ 균형 DP) · 결과 = `stations_m · ground_m · plan_m · 절 · 성 · 누가 · 최대 기울기 · curve_over` (`B05_Profile_Engine_RouteInitial.py:362-373 · 473-490` · `_Profile.py:477-503 · 551-589`).
|
||||
- 438 직선화 · 종단곡선 · 실제 측점 틀 · 1 m 표본기 — **없음**(파일 머리 `_Profile.py:4-6` 「확정 종단과 무관」).
|
||||
- 모달 — 지반선 · 균형 계획선 SVG · 한 줄 · 후보 표(`B05_Profile_UI_RouteEdit_Recommend_Profile.ts:87-108` · `_Recommend.ts:426`) · 끔이면 지반선만.
|
||||
|
||||
### 1.3 [적용]
|
||||
|
||||
| 걸음 | 하는 일 | 자리 |
|
||||
|---|---|---|
|
||||
| 브라우저 | `onApply` → `saveRecommendedRoute` · 잠금 막 · `POST /route/replan {draft(스냅 켬), initial, balanced_profile, as_initial: true}` | `_RouteEdit_Initial.ts:161-181` · `_RouteEdit_Apply.ts:195-226` |
|
||||
| 노선 | 노드 → 계획 폴리라인 csv · 곡선표(실패면 되돌림) | `B05_Profile_Router_Replan.py:569-611` |
|
||||
| 체인 | `_recompute` → 켬이면 `balanced_target`(1 m 표본기 · 20 m 측점) → `run_route_save_chain` | `Replan.py:329-459 · 612-624` · `Router_RouteInitial.py:420-492` |
|
||||
| 노선 체인 | 구조물 · 추가 측점 따라감(파일) → 노선 풀기(새 `routes` 행 · `route_points`) → 관 따라감 + 새 교차 관 → 종횡단 다시(`run_section_generation` = 측점 틀 + **1차 계획선 438**) → 계획고(아래 표) → 횡단 이월(`cross_sections` · 손 입력 넘김) → B06 확정 · 3D | `B05_Profile_Route_Save.py:350-523` |
|
||||
| 계획고 | 균형 목표 있음 = `apply_profile_target`(`_set_base_pvi` → `held_pass_through` 438 · 편집 {}) · 없음 = `_carry_profile`(옛 꼭짓점) | `Route_Save.py:464-475` · `Router_RouteInitial.py:356-417` · `Route_Save.py:209-258` |
|
||||
| 선택 기록 | `initial_choice.json`(갈래 · 제약 · 종단 반영) | `Replan.py:640-652` |
|
||||
| 초기값 | `as_initial` 이면 `refresh_initial_snapshot` — 옛 스냅숏 버리고 작업본(`B05_Profile/route` · `B06_Section/longitudinal` · `cross_sections` · 배수 폴더 · DB 노선 행 넷) 떠 둠 · 실패 = 로그만 | `Replan.py:655-658` · `Router_RouteInitial.py:495-518` · `common_util_initial_snapshot.py:36-41 · 183` |
|
||||
| 브라우저 뒤 | `routeSaved`(시설 확정 · 노선 초안 비움 · 결과 캐시 비움) → `clearDrafts` → 페이지 다시 세움 | `_RouteEdit_Apply.ts:133-138 · 211-215` |
|
||||
|
||||
### 1.4 초기 종단을 세우는 자리 · 438 을 비껴가는 길
|
||||
|
||||
| 길 | 438 | 근거 |
|
||||
|---|---|---|
|
||||
| 측점 생성(체인 · 노선 저장 · 재확정 · 넓힘) | 거침 — `design_ground_following_profile` → `straight_pass_through` · 폴백(관 정착 · 직선 분할 · 455 ②)도 | `B05_Profile_Engine_Sections.py:340-389` · `Grade_Profile.py:189-207 · 278-279` |
|
||||
| [적용] · 켬 | 거침 — `held_pass_through` | `Router_RouteInitial.py:372-374` · `_Profile.py:273-290` |
|
||||
| [적용] · 끔 · 같은 노선 | **안 거침** — 옛 `base_pvi` · 옛 `edits` 통째 · `carry_policy` 옛 L | `Route_Save.py:233-242` |
|
||||
| [적용] · 끔 · 바뀐 노선 | 바뀐 구간만 — 안 바뀐 구간 옛 꼭짓점 · 옛 편집 · 옛 L | `Route_Save.py:236-247` |
|
||||
| [적용] · 켬 · 균형 셈 실패 | **안 거침** — 목표 None → `_carry_profile` | `Replan.py:425-429` · `Router_RouteInitial.py:480-482` · `Route_Save.py:464-475` |
|
||||
| [적용] · 켬 · `apply_profile_target` 실패 | 거침(새 1차 계획선 438 이 남음 · 로그만) | `Router_RouteInitial.py:416-417` |
|
||||
| 손 노선 [저장] · [초기화] · 종단 편집 | 규칙대로 안 거침(사용자 값 · 스냅숏 복원) | 475 ④ 3.3 |
|
||||
| B03 자동설계 체인 | 거침 · 스냅숏 | `B03_FileInput_Service_Chain.py:303-336` |
|
||||
|
||||
## 2. 설계
|
||||
|
||||
### 2.1 셈 자리 — 라우터 쪽 후보마다(엔진 안 아님)
|
||||
|
||||
- 엔진(`generate_initial_route`)은 2 m 비용면 · 프로젝트 파일 모름 — 초기 종단은 프로젝트 상태(관 · 구조물 · 추가 측점 · stage 2 기준 · 1 m 표본기)가 필요해 라우터 `compute_initial` 끝(덮개 수 세는 자리 `:167-175` 옆)에서 붙임 · 저장본에서 꺼낸 결과에도 붙음.
|
||||
- 미리 셈(`precompute_defaults`)이 `compute_initial` 을 부르므로 따로 손 안 댐 — 기본 다섯 갈래가 데워짐.
|
||||
- 알약을 처음 누른 갈래(저장본 없음) = 지금 셈 + 초기 종단(끔 0.1 s · 켬 +3 s).
|
||||
|
||||
### 2.2 같은 코드 한 벌(472 원칙)
|
||||
|
||||
- 새 순수 함수 `candidate_initial_profile(project_root, polyline, curves, sampler, section_options, grade_options, with_profile, balanced_args)` — 새 파일 `B05_Profile/B05_Profile_Engine_RouteInitial_Initial.py`(`Engine_RouteInitial*` 라 추천 소스 지문에 저절로 듦).
|
||||
1. 측점 틀 + 지반 = `generate_sections`(`Sections_Core.py:449` · 순수) · 곡선표 = 후보 `curves` · 스냅 켬 · 간격 None(= [적용]이 보내는 값 · `_RouteEdit_Apply.ts:208`).
|
||||
2. 비정규 측점 = 체인과 같은 따라감을 **메모리에서** — 관 `_load_pipe_points(root, 후보 선)`(좌표 얹음 · 이미 순수 읽기) · 구조물 `follow_structures`(사본) · 추가 측점 `facility.plus_follow`(Node) → `resolve_extra_stations` 와 같은 `plan_stations`.
|
||||
3. 1차 계획선 = `_append_design_profiles`(438 · 455 ② 폴백 그대로).
|
||||
4. 켬 = `balanced_profile_of` 와 같은 `route_profile(1 m 표본기)` → `_set_base_pvi` 의 셈 몫(`held_pass_through` + 꼭짓점 0.1 mm 반올림)을 떼어 낸 순수 함수 → `build_alignment`.
|
||||
- 체인 쪽도 같은 조각 — `run_section_generation` 을 「셈(`build_sections`) · 쓰기」로 나눔 · `_set_base_pvi` = 떼어 낸 순수 함수 + 파일 쓰기. 그래서 미리 셈 · [적용] · 자동설계 체인이 한 벌.
|
||||
|
||||
### 2.3 저장 — 추천 결과 옆 파생 저장본
|
||||
|
||||
- 자리 `B05_Profile/route_recommend/initial/<결과 키>.json`(하위 폴더 — 결과 정리 `*.json` glob 이 안 봄 · 결과를 지울 때 짝 파일도 지움 · STORAGE_SCOPE · 스냅숏 밖 · 자료 교체 때 폴더째).
|
||||
- 지문(다르면 다시 셈 · 하나만 둠)
|
||||
- 후보 — 결과 키 · `planned` · `curves` 해시
|
||||
- 지형 — 설계 지형 선택(filter · method · smooth) · `[적용]`이 보낼 `terrain` · npz 이름 · 크기 · 수정시각
|
||||
- 기준 — `_regeneration_grade_options(stage 2 params)`.as_dict(페이지 설정 최대 기울기 · 최소 R · 접선 · 최소고 강제 · 설계속도 · 지형 · 포장) · 측점 옵션(간격 · 종단 표본 간격 · 끝점)
|
||||
- 시설 — 비정규 측점 목록(누가거리 · 이름) · 관 누가거리
|
||||
- 균형 — `with_profile` · 균형 상한(법정 또는 칸) · 표준 횡단면
|
||||
- 규칙 — 소스 지문(`Engine_Grade*.py` · `Engine_Sections*.py` · `Engine_RouteInitial_Profile.py` · 새 파일 · `config_system_design` 의 기본 L · 직선 문턱)
|
||||
- 값 = `{fingerprint, with_profile, curve_length_m, stations_m, ground_m, plan_m(측점 계획고), line: [[s, z]…](종단 표본 간격 · 곡선 포함), pvi_count, curve_count, straightened(직선화 꼭짓점 수), max_grade_pct, warnings, seconds}` · 실패 = `{error}`(지반고 종단 알림).
|
||||
- 응답 칸 — 결과에 `initial_profile` 하나 더함(1 km 에 ~20 KB).
|
||||
|
||||
### 2.4 비용(측정 · dad81824 · 후보 10 벌)
|
||||
|
||||
| 몫 | 시간 | 비고 |
|
||||
|---|---|---|
|
||||
| 측점 틀 + 지반(56~59 측점) | 0.02~0.03 s | `generate_sections` |
|
||||
| 1차 계획선 438 | 0.03~0.05 s | 종단곡선 44~48 · 최대 기울기 32~67 % |
|
||||
| 1 m 균형 종단 | 2.36~3.59 s | 지금 2 m 판(2.1~3.2 s)과 같은 몫 |
|
||||
| 균형 → 438 얹기 | 0.02~0.05 s | |
|
||||
|
||||
- 미리 셈 덧 = 끔 0.1 s · 켬 다섯 갈래 ~15 s(두 벌이면 ~30 s · 뒤에서).
|
||||
- 덜 쓰는 길(뒤로 미룸) — 엔진 `finish` 의 정밀 균형 종단을 1 m 표본기로 바꾸면 균형 셈 한 번(점수 · 미리 보기 · 초기 종단 같은 값) · `ALGO_VERSION` 9 = 저장본 전부 다시 셈 · 묶음 다시 짬. 필요하면 그때.
|
||||
|
||||
### 2.5 화면(모달) — [적용] 전에 보이는 것
|
||||
|
||||
- 「초기 종단」 선 하나 더 — 지반선 · (켬) 균형 계획선 · **적용될 초기 종단**(종단곡선 포함 `line`) · 한 줄 「초기 종단: 꼭짓점 N · 종단곡선 N · 직선화 N · 최대 종단경사 x %(L 20)」 · 「[적용]하면 이 종단이 작업본 · 초기값」.
|
||||
- 끔이면 지반선 + 초기 종단(≈ 지반) · 셈 실패면 이유 한 줄.
|
||||
- 계산 자리 = 서버 단독(③) — 화면은 그리기만 · 세션에 안 적음(`writeInitialChoice` 처럼 뺌).
|
||||
|
||||
### 2.6 [적용] — 서버가 같은 값으로 다시 셈
|
||||
|
||||
- `replan_route` → `_recompute` → `run_route_save_chain` 에 `initial=True`(= `as_initial`) 넘김.
|
||||
- 체인 계획고 걸음
|
||||
- 켬 + 목표 셈 됨 → 지금처럼 `apply_profile_target`(편집 {} · 정책 = 새 파일 L 20).
|
||||
- 그 밖(끔 · 목표 None) → **아무것도 안 함** = `run_section_generation` 이 막 쓴 1차 계획선 438 그대로 · `_carry_profile` · `carry_policy` 안 부름.
|
||||
- 손 노선 [저장](`initial=False`)은 지금 그대로(`_carry_profile`).
|
||||
- 저장본 값을 받아 적지 않음 — 브라우저 값 아님 · 서버 파생값이어도 측점 틀 · 지형이 [적용] 순간 다시 정해지므로 다시 셈(끔 0.1 s · 켬 3 s · 체인 전체에 견주어 작음).
|
||||
- 같은 값 보장 = 시험(2.2 함수를 [적용] 체인과 미리 셈이 함께 부름 · 고정 자료에서 꼭짓점 차 ≤ 1 mm).
|
||||
- 그 뒤 `refresh_initial_snapshot` 그대로 — 작업본을 뜨므로 초기값 = 작업본.
|
||||
- 기존 프로젝트 — 추천 [적용] 다시 누름 = 같은 노선이어도 새 초기 종단(따로 단추 없음 · 요구 276).
|
||||
|
||||
## 3. 위험
|
||||
|
||||
| 위험 | 내용 | 대응 |
|
||||
|---|---|---|
|
||||
| 후보 수 · 시간 | 켬 = 후보마다 +3 s(미리 셈 ~15~30 s 뒤에서) · 저장본 없는 알약 첫 누름 +3 s | 미리 셈이 데움 · 진행 표시 그대로 · 2.4 덜 쓰는 길은 뒤 |
|
||||
| 저장본 낡음 | 페이지 설정 · 관 · 구조물 · 추가 측점 · 설계 지형 · 표준 횡단면 · 438 코드가 바뀌면 낡음 | 지문(2.3) 다르면 꺼낼 때 다시 셈 · 파일 하나만 둠 · 시놀로지가 npz 수정시각을 바꾸면 다시 셈(비용 작음) |
|
||||
| 미리 보기 ≠ [적용] | 새 세류선 교차 관(`add_crossing_pipes` · B04 `_prepare` 필요) · 사용 범위 자름 · 폴리라인 조밀화 mm · [적용] 지형 바꿈 | 교차 관은 미리 보기 밖(알림 한 줄) · 나머지는 같은 빌더로 · 시험이 차 한도 잼 |
|
||||
| 사용자 편집 잃음 | 종단 편집(`edits`) · 세션 초안 모두 지움 = **예상된 동작**(새 초기값) | 모달 [적용] 확인 글에 「종단 손 편집이 지워짐」 |
|
||||
| 횡단 손 입력 넘김 | [적용]도 `_carry_cross` 가 손 입력을 새 측점에 넘기고 그대로 스냅숏에 듦(346-3 규칙 · 요구 276 밖) | 사용자 판단 필요(아래 물음) |
|
||||
| 472-6 한 본문 · 잠금 | 추천 [적용]은 `/design/save` 밖 `/route/replan` 직접 — `project_lock` · `save_guard` 안 탐 · 다른 탭 [저장]과 겹칠 수 있음 · 되돌림 = 체인 `_Backup` 만(스냅숏 갈음은 성공 뒤 · 실패 = 로그) | 작은 고침 — `replan_route` as_initial 길을 `guard.project_lock` 안으로(같은 잠금) · 즉시 저장 유지(요구 275 ②) |
|
||||
| 미리 셈 ↔ [적용] 겹침 | 미리 셈은 `route_recommend` 만 씀 · 원자 쓰기 | 문제 없음(초기 종단 파일도 원자 쓰기) |
|
||||
| B03 자동설계 체인 | 끔 규칙(1차 계획선 438)으로 스냅숏 — 모달 기본 「종단 반영」 켬과 다름(지금도 같음) | 그대로 · 체인 = 끔 판 · 모달이 켬 판을 보여 줌 |
|
||||
| 덮개 수 | 지금 균형 종단 기준(관 = 지금 관) | 초기 종단 기준으로도 셀지 = 뒤 |
|
||||
|
||||
## 4. 코더 일감(두 창 · 파일 안 겹침)
|
||||
|
||||
### 476-1 서버 — [적용] 새 규칙 + 후보 초기 종단(파이썬)
|
||||
|
||||
- 파일 — `B05_Profile_Router_Replan.py`(`initial` 넘김 · as_initial 잠금) · `B05_Profile_Route_Save.py`(`initial=True` 면 `_carry_profile` 안 부름) · `B05_Profile_Router_RouteInitial.py`(`compute_initial` 끝 붙임 · `_set_base_pvi` 셈 몫 떼어 씀) · `B05_Profile_Engine_Sections.py`(`run_section_generation` 셈 · 쓰기 나눔) · 새 `B05_Profile_Engine_RouteInitial_Initial.py`(2.2 · 2.3) · `B05_Profile_Engine_RouteInitial_Store.py`(결과 지울 때 짝 파일).
|
||||
- 차례 — ① [적용] 규칙(작은 고침 먼저 · 단독으로도 요구 276 의 「[적용] 늘 새 규칙」) ② 셈 · 쓰기 나눔(동작 같음 · golden 그대로) ③ 후보 초기 종단 · 저장본 ④ 잠금.
|
||||
- 시험(새 `resources/tester/test_476_1_apply_initial.py` · `test_476_1_recommend_initial.py`)
|
||||
- 같은 노선 · 끔 · `as_initial` → 새 종단 `base_pvi` = 1차 계획선 438(R > 500 꼭짓점 0 · 정책 L 20 · `edits` 빔) — **옛 코드 실패**(옛 꼭짓점 · L 15 이어받음 · `test_346_3_route_save` 의 chain_world 꼴).
|
||||
- 켬 + 균형 셈 실패 → 1차 계획선 438(옛 = 옛 꼭짓점) — 옛 코드 실패.
|
||||
- 손 노선 [저장]은 지금처럼 계획고 옮김(되돌림 없음 확인).
|
||||
- 추천 응답에 `initial_profile`(꼭짓점 · `line` · 직선화 수) — 옛 코드 실패(칸 없음).
|
||||
- 같은 후보 · 같은 상태 → 미리 셈 초기 종단 = [적용] 체인 종단(golden_472 고정 자료 사본 · 꼭짓점 차 ≤ 1 mm · 끔 · 켬 둘).
|
||||
- 지문 — 페이지 설정 최대 기울기 · 관 하나 옮김 · 438 소스 바뀜 → 다시 셈 · 같으면 꺼냄.
|
||||
- 영향 시험 — `test_346_3_route_save` · `test_438_1_initial_straighten` · `test_432_1_curve_law` · `test_224_3_recommend_store` · `test_351_1_recommend_gaps` · `test_364_4_precompute_on_open` · `test_74_route_confirm_initial` · `test_initial_snapshot` · `test_472_1_golden`.
|
||||
|
||||
### 476-2 화면 — 모달 초기 종단 선(TS)
|
||||
|
||||
- 파일 — `B05_Profile_UI_RouteEdit_Initial_Model.ts`(`initial_profile` 펴기 · 세션에 안 적음) · `B05_Profile_UI_RouteEdit_Recommend_Profile.ts`(선 · 한 줄) · `B05_Profile_UI_RouteEdit_Recommend.ts`(배선 · [적용] 확인 글) · `B05_Profile_UI_Style_RouteRecommend.css`.
|
||||
- 476-1 응답 꼴(2.3) 뒤 · 시험 = 펴기 · SVG 에 초기 종단 경로 · 끔이면 지반 + 초기 종단 · 실패 글.
|
||||
|
||||
### 화면 확인(코더 배정 검증 프로젝트 · 공용 프로젝트 안 씀)
|
||||
|
||||
- 먼저 떠 둠 — DB `routes` · 자식 넷 · `project_workflow_stages` · `projects` 줄(`common_util_save_guard.snapshot_rows`) · storage `B05_Profile/route` · `B05_Profile/route_recommend` · `B06_Section` · `B04_PreProcess/drainage` · `initial_snapshot`(해시).
|
||||
1. B05 [노선 추천] 열기 — 다섯 알약마다 초기 종단 선 · 한 줄(직선화 N · L 20) · 「종단 반영」 끔/켬 바꿔 선 바뀜 · 저장본 꺼냄(두 번째 열기 빠름).
|
||||
2. 페이지 설정 최대 기울기 바꿈 → 모달 다시 열기 = 다시 셈(로그 「셈」) → 원래 값으로.
|
||||
3. 지금 노선과 같은 갈래 · 끔 [적용] → B05 종단 표 꼭짓점 · R(R > 500 없음 · L 20) = 모달 선(측점 계획고 차 ≤ 1 mm · `orca eval`) · B06 같음.
|
||||
4. 켬 [적용] → 같은 대조 · 손 종단 편집(꼭짓점 하나 올림) 뒤 [초기화] → [적용]한 초기 종단으로 돌아옴(스냅숏 = 작업본).
|
||||
5. 다른 탭 [저장] 중 [적용] → 기다림(잠금) · 어긋남 없음.
|
||||
- 끝 — DB 행 · storage 되돌림(`restore_rows` · 파일 해시 같음) · 세션 비움 · 탭 닫음.
|
||||
|
||||
## 5. 사용자 물음
|
||||
|
||||
- [적용] 때 횡단 손 입력(측구 · 암선 · 경사 등)도 버리고 기본값으로 둘지(지금 = 새 측점에 넘김 · 스냅숏에 듦).
|
||||
- 미리 보기에 새 세류선 교차 관 자리 측점을 넣을지(B04 세류선 읽기 · 셈 늘어남) — 지금 제안 = 빼고 알림 한 줄.
|
||||
Reference in New Issue
Block a user