Merge remote-tracking branch 'origin/dev' into sub_laptop_7

This commit is contained in:
2026-10-18 22:51:34 +09:00
3 changed files with 126 additions and 0 deletions
@@ -239,3 +239,12 @@
## 요구 270 (10-18 · 사용자)
1. 다음으로 추가 오류가 발견됨. 평면의 구조물 측점이 괜찮을때도 있지만 평면 이동을 하다보면 연동측점에 연결이 된다거나 구조물 형상이 측점은 맞지만 구조물이 없는 상태가 되기도 함. 세밀하게 검증 필요. 내가 요청한건 노선 변경시 최대한 측점번호를 옮기더라도 구조물의 절대 위치를 유사한 곳으로 옮겼으면 했고 이때 옮기게되면 다시 그지점에 횡단도와 종단도에 관련 데이터들이 다시 생성되어야하거든 지금은 이동만되고 있다고 보여지네 면밀히 검토 후 반영해줘.
## 요구 271 (10-18 · 사용자)
종단 그래프 관련 신규 기능 추가 및 수정 확인
1. 직선화 기능에서 종단 R이 없는 지점을 선택하는 경우 붉은 색 세로점선과 계획선에 중첩된 붉은선이 생김 안생기게 변경. 단, 사용자가 지정한 영역이 직선 영역이라면 시작과 종료 측점에 신규 R이 생성되어야하며 이때도 기본 L값은 지켜야함.
2. 직선화 기능에서 시작 세로선을 선택하면 마우스커서에 따라 실시간으로 영역을 알려주는 기능 추가(자유지정의 지정영역 활성화 확인)
3. 자유지정 기능에서 시작세로선 선택하면 마우스 커서에 따라 영역을 실시간으로 알려주는 기능 추가
4. 너도 브라우져로 분석이 가능하니 화면 확인이 필요한 사항은 너가 확인
5. B05와 B06의 같은 페이지 처럼 동작해야함. 원척적으로 구조를 그렇게 만들어 달라고 너에게 요청했음. 새로고침 뒤 B06에서 업데이트가 되면 B05에서도 업데이트가 되는게 맞음.
@@ -0,0 +1,61 @@
# 요구 271-1~3 — 종단 직선화 붉은 강조 · 끝 R 기본 L · 영역 실시간 띠
분석 = 클로드 에이전트(Opus 5.5 · 읽기만 · 진짜 TS node 재현 · scratchpad `req271\repro.cjs`) · 브레인 판단.
## 1. 붉은 세로 점선 · 붉은 선 정체
- 경고 아님 — [쉬프트]용 「고른 직선」 강조(RunHighlight)가 직선화 모드에서 뜸.
- 직선화 첫 클릭이 직선 구간 안쪽이면 측점 고름 대신 직선 전체를 기울이기 대상으로 고름(`B05_Profile_UI_Profile_Panel_Tools.ts:181-188` · 고름 `B05_Profile_UI_Profile_Tools.ts:155-160, 206` · 그림 `B05_Profile_UI_Profile_RunHighlight.ts:74-111` · 색 `B05_Profile_UI_Style_Table.css:326-341`).
- 「R 없는 지점」 = 직선 위 꼭짓점(426 판정 · `tidyEdits` 가 R 지움) 또는 직선 안 빈 곳 · 438 초기 직선화로 긴 직선이 많아 자주 걸림.
- 덤: 직선화 빈 곳 클릭이 측점에 안 붙음(`B05_Profile_UI_Profile_Render.ts:226-232` · 자유지정은 `snapStation`).
## 2. 곡선 규칙(지금)
- 편집 = `station_offsets`(높이) · `curve_radii`(R) · 열쇠 chainageKey · 측점마다 꼭짓점 · 끝은 `pinEnds`.
- R 지정 꼭짓점 L = R·|Δ| · 지정 없는 꺾임 = 기본 L(TS `logic/B05_Profile_UI_Profile_Alignment.ts:297-358` ↔ `B05_Profile_Engine_Grade_Alignment.py:306-360`) · BP · EP 곡선 없음.
- 직선화 뒤 끝 꼭짓점이 R 없으면 L 20 곡선 생김(정상) · 끝에 저장 자동 R 이 남으면 그 R 을 써서 L ≠ 20.
- 이미 직선인 범위 = Δ 0 → 곡선 못 생김.
- 덤 흠: tilt · 자유지정이 적는 R = L/Δ 를 반올림 높이로 다시 셈하면 L 19.99998 → 거짓 「L 20m 미달」(오차 1e-6 · `logic/B05_Profile_Profile_CurveLaw.ts:75` · `B05_Profile_Engine_Grade_CurveLaw.py:63`).
## 3. 정함(브레인)
- 직선화 모드 클릭 = 늘 측점 고름(181-188 갈림 지움 · 붉은 강조 안 생김) · 클릭은 `snapStation` 으로 측점에 붙임.
- 끝 꼭짓점 R 이 저장 자동 R 과 같으면 지움(433-13 ▲▼ 규칙과 같음 · 사용자 R 은 둠) → 끝 곡선 기본 L 20 · 자유지정 `buildFreeEdits` 끝도 같은 규칙.
- 이미 직선인 범위 = 그 범위를 부분 구간으로 고름(보라 띠 · 안내 「이미 직선 — ▲▼ 로 꺾으면 양 끝에 기본 L 곡선」) · ▲▼ = `tiltStraightRun(sub)` → 양 끝 L 20 · BP · EP 는 곡선 없음.
- 법정 판정 오차 = 1e-3 m(TS ↔ 파이썬 짝).
- 실시간 띠 = 새 도우미 `A00_Common/design/design_profile_range_band.ts`(띠 + 세로선 + 「시작–끝 · 길이」 글) · 직선화 · 자유지정 range 단계 함께 · 첫 클릭 뒤 커서 측점까지 · 그래프 밖 = 시작선만 · Esc = 시작만 취소(모드 유지) · 반대 방향 정렬.
- 서버 = 편집 꼴 같음 · `_apply_alignment_edits` → `build_alignment` 가 같은 규칙 → 거울 시험만.
## 4. 파일 · 줄 수(한도 700)
| 파일 | 줄 | 바뀜 |
|---|---|---|
| `B05_Profile_UI_Profile_Panel_Tools.ts` | 364 | 갈림 지움 · 붙음 · 띠 · Esc |
| `B05_Profile_UI_Profile_Tools.ts` | 240 | 안내 · 부분 구간 고름 |
| `logic/B05_Profile_UI_Profile_Straighten.ts` | 306 | 끝 자동 R 규칙 |
| `A00_Common/design/logic/design_profile_free.ts` | 401 | hoverStation · marks |
| `A00_Common/design/design_profile_free_view.ts` | 217 | 띠 그림 = 도우미 |
| `A00_Common/design/design_profile_range_band.ts` | 새 | ~70 |
| `logic/B05_Profile_Profile_CurveLaw.ts` · `B05_Profile_Engine_Grade_CurveLaw.py` | 81 · 68 | 오차 짝 |
손대지 않음: `logic/B05_Profile_UI_Profile_Alignment.ts`(700) · `design_profile.ts`(691) · Render · RunHighlight · 서버 묶음 영향 없음.
## 5. 화면 확인 목록(밝음 · 어두움)
1. 직선 안 R 없는 꼭짓점 첫 클릭 = 붉은 선 · 점선 없음 · 보라 시작선.
2. 빈 곳 클릭 = 가까운 측점선에 붙음.
3. 첫 클릭 뒤 마우스 이동 = 띠가 커서 측점까지 · 글 · 둘째 클릭 범위 = 띠.
4. 왼쪽으로 고름 = 같은 결과.
5. 끝이 R 없는 점 = L 20 곡선 · 법정 경고 칩 그대로.
6. 끝에 저장 자동 R = 직선화 뒤 L 20 · 손 R 은 그대로.
7. BP · EP 끝 = 곡선 없음.
8. 이미 직선 범위 = 보라 띠 + 안내 · ▲▼ = 양 끝 L 20 · 거짓 미달 경고 없음.
9. 곡선 섞인 범위 = 안쪽 R 지움 · 양 끝 L 20.
10. Esc = 시작만 취소 · 고른 측점 안 풀림.
11. 그래프 밖 = 시작선만 · 다시 들어오면 이어짐.
12. 가로 줌 · 스크롤 중 띠 = 측점선 자리.
13. ↶ 한 번에 원위치 · ↷.
14. 자유지정 range 단계 실시간 띠 · 둘째 클릭 뒤 고정 · armed · drawing 미리보기 그대로 · Backspace · ↶ · Esc.
15. [쉬프트] 붉은 강조는 그대로.
16. 팝아웃 종단에서 3 · 14.
17. 직선화 중 ▲ 단추가 계획고 조정 + 고름 둘로 새는지.
@@ -0,0 +1,56 @@
# 요구 271-5 — B05 · B06 한 페이지(새로고침 뒤 B06 고침 → B05 반영)
분석 = 클로드 에이전트(Opus 5.5 · 읽기만 · node 재현 `scratchpad\req271b\r271.cjs` · 진짜 Section_Store · design_pipe_ids) · 브레인 판단.
## 1. 새로고침해 B06 로 들어올 때
- 페이지(`design_page.ts:111`)는 관 id 장부 · 관 길이 출처만 세움 · 보기 둘은 처음 보일 때 세움(`:88, 254-263`).
- B06 보기가 세우는 한 벌: 좌측 패널 · 구조물 폼 · 종단도 · 유토 · 표 · 배수유역도(`B06_Section_UI_Section_View_Profile.ts:277` → `design_shared.ts:183`) · 계산 묶음(`design_shared.ts:222`).
- B05 를 열 때까지 미뤄지는 것: 평면 편집기 · 평면 마커 · 3D · B05 좌측(설정 · 추천 · 보기) · 구조물 다리 · 상단측.
- B05 보기 안에만 있는 상태: `design_view_profile.ts:114` lastPipes · `:118` sessionIds · `:119-140` shownPipes(관 id 장부 place · prune 유일한 자리) · `B05_Profile_UI_Page_Structures.ts:66-155` 비정규 측점 · 관 · 구조물 · 알약 목록 · 페이지 설정을 종단도에 얹는 일(`design_view_profile_sections.ts:89-91` · `design_view_profile.ts:375-377`) · 상단측 덮어쓰기 · `profileSaveParts`.
## 2. 조작별 반영(P1 = B06 새로고침 → 조작 → B05 처음 엶 · P2 = B05 먼저 열어 숨김 → 조작 → B05 보임)
| B06 조작 | P1 | P2 |
|---|---|---|
| 카드 단추 · 쉬프트 · 소단 · 암선 · 조정창 · [전체 반영] | ✓ | ✓ |
| 종단 ▲▼ · 직선화 · 자유지정 | ✓ | ✓ |
| 구조물 폼 추가 · 옮김 · 지움 | ✓ | 평면 패널 마커 ✗(숨은 B05 다리 안 따라감) |
| 관 추가 · 옮김 · 지움 | ✓(장부 헛 기록은 B05 열 때 걷힘) | 평면 패널 관 마커 ✗(보일 때만 · `:217`) |
| 평면 패널 노선 끌기 | — | 패널 마커 ✗ · 보일 때 bridge.load carryEdits=true(`:470`) ≠ 보이던 때(`:164` false) → 계획고 편집 두 번 옮김 위험(추정) |
| 반폭 넓힘 재생성 | ✓ | ✗ B05 가 옛 상세 객체 쥠(R1 재현) |
| [측점 만들기] | ✗ 두 보기 다(R2 재현 · `B06_Section_UI_Missing_Stations.ts:91`) | ✗ |
| [저장] | 요청 다름(원인 4) | ✓ |
| 새로고침 자체 | 측점 라벨 오프셋 · 기울기 상한(448) · 흙덮기 강제가 B05 열기 전까지 다름 | ✓ |
- R3 재현: B06 만 연 채 351 관(pipe-s1) → 360 → 버림 → 장부 {s1@360 헛 · s2@351}(451 잔여).
- 반대 방향: B05 폼 세월교 · BOX 옵션이 `shared.pipeOptionQueue`(메모리 · `design_shared.ts:141`)에만 → B06 안 연 채 새로고침이면 잃음(추정) · 페이지 설정 3종은 B05 를 거쳐야 종단도에 얹힘.
## 3. 원인(순위)
1. 시설 줄(구조물 + 관 → 알약 · 비정규 측점 · 평면 마커 · 관 id 장부)을 보기마다 따로 셈 — B05 = 구조물 다리 + shownPipes · B06 = `syncMarks`(`B06_Section_UI_Section_View_Profile.ts:183`) · B05 몫은 B05 가 설 때만 · 숨으면 가게 안 들음.
2. 페이지 설정을 종단도에 얹는 일이 B05 좌측 패널에만.
3. 상세 가게 갈아끼움 알림이 강제 다시 받기(넓힘)에 없음 · [측점 만들기] 뒤 캐시 안 비움.
4. [저장] 상단측 차례 일부가 B05 보기 몫(`profileSaveParts`) — B05 안 열었으면 기본 창구(`design_save.ts:187`)로 · 경로 확정 요청(filter · method · 지표면 id)이 빠짐(`B05_Profile_Router_Lifecycle.py:75-131` · 영향 추정).
5. 보기 사이 전달이 메모리에만 · 길마다 인자 다름(pipeOptionQueue · carryEdits).
## 4. 정함(브레인)
- 원칙: 두 보기가 같이 보는 파생값은 페이지가 한 번 세우고 가게를 늘 들음(순수 계산 · 숨은 동안도) · 보기는 보일 때 그리기만 · 처음 서든 다시 보이든 같은 함수로 「지금 페이지 값」을 읽음(서버 GET 아님).
- (A) 페이지 한 벌 `A00_Common/design/design_facility_lane.ts` — 입력 = 가게 구조물(없으면 저장분) · 관 보고 + 관 초안 · 종류 표 · 추가 측점 → 출력 = 알약 · 비정규 측점 · 흙덮기 관 · 관 id 장부 맞춤(sessionIds 포함) · 종단도 · 평면 마커 원천에 여기서만 씀 · B05 다리 = 목록 · 종류 · 저장만 · B06 `syncMarks` = 읽기만 · carryEdits 차이 사라짐.
- (B) 페이지 설정 한 칸 — 종단도가 설 때 세션 초안(448) 있으면 그것 · 없으면 저장 노선 설정 · 세션 칸도 들음 · B05 패널은 세션에 쓰기만.
- (C) 강제 다시 받기 = 갈아끼움 알림 · [측점 만들기] 뒤 캐시 비우고 강제로 받음.
- (D) [저장] 기본 창구 = B05 몫과 같은 본문(노선 캐시 지표 조건 + 확정 지표면 id · 비정규 목록 빈 목록) · B05 몫은 그 함수를 부름.
- (E) pipeOptionQueue → 세션 칸.
## 5. 나눔
| 절 | 창 | 파일 | 시작 |
|---|---|---|---|
| 462 (A) · (E) | sub2 | `design_facility_lane.ts`(새) · `design_shared.ts` · `design_pipe_ids.ts` · `design_view_profile.ts` · `B05_Profile_UI_Page_Structures.ts` · `B06_Section_UI_Section_View_Profile.ts` · `B06_Section_UI_Page_Structures_Panel.ts` | 지금 |
| 463 (B) · (C) · (D) | sub6 | `design_profile.ts` · `design_view_profile_sections.ts` · `B05_Profile_UI_Panel.ts` · `B06_Section_Section_Store.ts` · `B06_Section_UI_Missing_Stations.ts` · `design_save.ts` · `B05_Profile_UI_Page_Actions.ts` · `B05_Profile_Api_Fetch.ts` | 458 · 459 합친 뒤(Section_Store · design_save 겹침) |
## 6. 시험 · 화면 확인
- 시험: `test_271_facility_lane`(B06 먼저 → B05 읽음 = B05 먼저 듣는 중 · 알약 · 측점 · 평면 마커 · 장부 같음 · 헛 id 0) · `test_271_detail_notify`(강제 받기 · [측점 만들기] 뒤 듣는 쪽 한 번) · `test_271_save_same`(B05 있을 때 · 없을 때 요청 줄 같음) · `test_271_profile_settings`.
- 화면(P1 · P2 · P3 = B06 새로고침 → 평면 패널 엶): 평면 마커 수 · 자리 · 발자국 · 평면 횡단 판 · 종단 알약 · 측점선 · 라벨 오프셋 · 기울기 빨강 · 유토 합계 · 좌측 목록 · 고름 강조 · 장부 헛 기록 0 · [3D 업데이트] — 카드 단추 넷 · 쉬프트 · 소단 · 암선 · 조정창 · 구조물 폼 · 종단 관 추가 · 끌기 · 지움 · 평면 패널 교점 끌기 · 되돌리기 · [측점 만들기] · 넓힘 · [전체 반영] · ▲▼ · 직선화 · 자유지정 · [저장] 두 길 요청 줄 · [확정] · [초기화] · 반대 방향 · 예외(빈 관 목록 · 같은 자리 관 둘 · 저장 안 하고 오가기 · 계산 중 · 저장 중 전환).