eomsangdon and Claude Opus 5
3651ad9875
feat(B05): 종단 계획선 전체 측점 폴리라인 전환 + 직선화·쉬프트·undo/redo 신설
...
2026-09-02 사용자 지시 9건 반영. 화면 실조작 검증은 다음 세션 몫 (사용자 지시로
코딩까지만 진행).
1. 초기 계획선 = 전체 측점 폴리라인 — `design_ground_following_profile()` 신설.
모든 측점을 변화점으로 잡고 계획고 = 원지반고, 라운드는 R을 지정한 자리에만
(`build_curves(only_explicit=)`·`build_alignment(only_explicit_curves=)`).
basis `ground_polyline`. 관 정착 선형은 폴백으로 내림.
2. 구간 쉬프트(⬆⬇) 삭제.
3. [직선화] 신설 — `B05_Profile_UI_Profile_Straighten.ts`. 두 측점의 라운드에 탄젠트한
직선으로 대체하고 사이 라운드 삭제. 직선 틸팅 시 가운데 라운드 + 양측 탄젠트 재구성.
4. [쉬프트] 신설 — 직선 구간을 기하에서 되읽어(`detectStraightRun`) 복수 선택,
최외곽 라운드 중심 기준 상·하 평행이동.
5. 방향키 조작 — 상하 0.1m 계획고, 좌우 0.1m 누가거리(구조물·비정규 측점 한정).
6. undo/redo 신설 — B05·B06 조작 세션 키 묶음 스냅샷(`_Profile_History.ts`).
버튼은 요약줄 맨 앞(최대 기울기 좌측), 21x17px. Ctrl+Z / Ctrl+Shift+Z.
7. 종단 요약줄의 횡단배수 최소고 표시 삭제(산식·편집 차단은 유지).
8. [편집 되돌리기] 버튼 삭제 — undo/redo로 대체.
9. 지형 구분 기본값 특수지형 — 패널 셀렉트와 백엔드 기본값(스키마·체인 폴백) 일치.
700줄 제한 — 패널을 `_Profile_Panel_Tools` · `_Profile_Preview` 로 분리하고 측점↔구조물
짝짓기를 `_Profile_Structures` 로 이관(842줄 → 696줄).
검증: tsc --noEmit 오류 0, ruff format/check 통과,
pytest tmp/tests/ -q → 366 passed / 14 skipped / 0 failed.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-09-02 19:30:16 +09:00
eomsangdon and Claude Fable 5
d8080109c1
feat(B05): 쉬프트 재정의(힌지 승격) + 최소고 판정점을 제어점으로
...
2026-08-23 사용자 개념 확정 반영.
- 틸트는 그 지점을 라운드로 주변 직선과 잇는 조작이고, 측점·횡단배수 지점의
수직선에는 라운드 중심점이 놓인다. 따라서 최소고 판정도 제어점 z 기준이어야
한다(controlElevationAt) - 곡선 샘플 계획고로 재던 탓에 배수 지점 옆을
틸팅해 라운드 형상만 바뀌어도 락이 걸렸다.
- 쉬프트 재정의(shiftMovingPoints): 구간 끝이 사용자 틸팅점이면 그 점이 직접
움직이고, 고정점(BP·EP·횡단배수 앵커)이면 움직이지 않는다. 대신 구간 안쪽
미틸트 측점의 외곽 2개를 힌지로 승격해 라운드를 만들고 그 사이 직선을
평행이동한다. 힌지 둘을 못 만드는 구간(안쪽 측점 2개 미만)은 쉬프트 대상이
아니므로 ⬆⬇ 버튼을 만들지 않는다(canShift).
- shiftSegment 되먹임 보정 - 라운드 중앙종거가 낀 자리에서도 화면 계획고가
정확히 1스텝 움직인다.
검증: tsc 통과 · pytest 185 passed(힌지 규칙 4건 신규) · 공용 브라우저 실측 -
구간 0~84 ⬆에서 힌지(20·80)만 이동하고 BP·앵커 오프셋 미생성, 두 힌지 계획고
정확히 +0.1000m(구배 보존), 앵커 이웃 80.0m ▼ 차단 해제, 앵커 84.3m ▼ 차단 유지.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-23 17:01:45 +09:00
eomsangdon and Claude Opus 5
1f631bc3d4
fix(B05): 코리도 평면 궤적 스플라인화 + 좌표 정밀도 + 편집 되돌리기 곡선반경 보존
...
평면 궤적 (사용자 제안 채택)
- 노선 정점을 직선으로 잇던 것을 centripetal Catmull-Rom으로 교체.
실측 노선은 정점 135개·평균 간격 2.61m·꺾임각 최대 42.4°라, 0.1m로 잘게
쪼개도 정점 이음매의 각짐은 그대로였다
- 스플라인 도입으로 세분은 0.2m로 되돌림 — 데이터·연산 절반
좌표 정밀도 (지그재그의 진짜 원인)
- 코리도 좌표는 EPSG 절대값(183,494 / 489,290)이라 Float32에 담으면 해상도가
0.14m까지 떨어져, 0.2m 세분 점들이 양자화 계단을 타며 최대 35°짜리 각도
노이즈가 생겼다. positions를 Float64로 올린다(화면에 올릴 때 원점을 빼며
Float32로 줄이므로 렌더 비용은 그대로)
- 실측: 중심선 꺾임 평균 4.271° → 0.704°, 5° 초과 838개 → 25개
편집 되돌리기
- resetAll이 자동 계획선이 역산해 저장한 curve_radii까지 비워, 프론트가 기본
R로 다시 그리며 화면 계획고가 정본과 어긋났다(세월교 지점 0.22m 낮음 →
최소고 경고 오탐). 사용자 편집 측점만 지우고 곡선반경은 저장분으로 되돌린다
검증: pytest 14/14(스플라인 제어점 통과·오버슈트 없음 3건 신규), tsc 통과,
화면 실측 — 경고 소거, 줌인 시 곡선 매끄러움 확인
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-08-23 14:40:56 +09:00
eomsangdon
3e9be53e7c
auto: 2026-08-17 17:09 (ESD_LAPTOP)
2026-08-17 17:09:05 +09:00
eomsangdon and Claude Fable 5
54954a05e5
refactor(B05,B06): B05_wf2_Route -> B05_Profile, B06_wf3_ProfileCross -> B06_Section 동시 개명
...
- 한몸으로 동작하는 두 페이지라 한 커밋으로 처리 (상호 참조 다수)
- B05 37파일 + B06 20파일 접두사 개명 (git mv, 이력 보존)
- 참조 치환 91파일: import 경로, 라우트 슬러그(b05-profile/b06-section),
라우트 키(B05_PROFILE/B06_SECTION), B03 자동 체인, storage 상수, pyproject 제외 경로
- 로직 변경 없음. typecheck·백엔드 import 검증 통과
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-08 10:03:11 +09:00