chore(요구): 요구 271-1~3 분석 — 직선화 붉은 강조 정체 · 끝 R 기본 L · 영역 실시간 띠

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C6BNBFXFndbqYxu6sZuknK
This commit is contained in:
2026-10-18 22:38:37 +09:00
co-authored by Claude Opus 5.5
parent b4ae9d10b5
commit 0f969c5a4d
@@ -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. 직선화 중 ▲ 단추가 계획고 조정 + 고름 둘로 새는지.