qcast-front/.claude/memory/project_v2_design_direction.md

40 lines
3.9 KiB
Markdown

---
name: v2.0 (sk-v2.0 브랜치) 설계 방향 — wall master, v1 호환 잊기
description: sk-v2.0 브랜치에서는 v1 시각/동작 호환을 신경쓰지 말고 v2.0 자체 설계로만 진행. v1 은 별도 트랙.
type: project
---
**규칙**: `sk-v2.0` 브랜치 작업 시 v1 (tag `v1.0`, commit `9a73fce3`) 와의 호환/시각 동등성 신경쓰지 말 것. v1 은 별도 트랙으로 계속 진행됨. v2.0 은 v2.0 자체 설계 목표만 보고 진행.
**v2.0 최종 그림**:
- `wall.baseLines` = master 좌표 (사용자 이동 가능)
- `roof.points` = wallLine + offset 확장으로 도출 (사용자 이동 가능, 독립적으로)
- SkeletonBuilder 입력 = wall master 기반
- 보조선(eaveHelpLine, HIP, 잔여선 등) 모두 이 구조 위에서 재구성
**Phase 분할** (사용자 결정, 2026-04-28):
- **Phase 1** ✅ (2026-04-28 사각형 + 복잡한 도형 통과): SkeletonBuilder 입력을 `roof.points` 가 아닌 `wall.baseLines` 좌표로 변경. offset/roof 참조 제거. SK 폴리곤 = wall 폴리곤 그 자체. 구현: `skeleton-utils.js:709-720` (offset 확장 로직 70줄 제거, 직접 매핑 10줄로 대체).
- **Phase 2** ✅ (2026-04-28 사각형 + 복잡한 도형 통과, offset 변경 케이스 포함):
- **최종 방식 (사용자 통찰 반영)**: SK 그래프 mutate 안 함. wall corner 마다 magenta 단일 45° extension 라인을 별도 QLine 으로 추가. SK 자체는 wall 좌표 그대로 보존 → wallbaseLine 안 변하면 SK 도 안 변함, 라인이동/offset/보조선 셋이 서로 리셋 안 됨.
- 사용자 통찰 (2026-04-28): "wallbaseLine 안 변하면 SK 자체도 안 변해야 한다. mutate 하면 한 vertex 가 여러 edge 의 begin/end 로 공유되어 의도치 않은 endpoint 변경. 미리 통합하지 말고 마지막에 통합하자".
- extension 끝점 공식: bisector dir = `n1 + n2`, λ = **max(λA, λB)** (작은 offset 쪽 roofLine 통과해서 큰 offset 쪽까지 뻗음). 휘지 않는 단일 직선.
- Polygon 밖으로 나간 부분은 `clipLineToRoofBoundary(wp, bp, roof.lines)` 로 절삭. clip 후 길이 < 0.5 skip.
- 구현: `computeWallCornerExtensions(baseLines, wall)`, `skeleton-utils.js:556` 부근. 호출부 `skeleton-utils.js:980` 부근에서 magenta(`#FF00FF`) QLine 으로 추가.
- `processInBoth` (skeleton-utils.js:1517 부근) v2.0 에서 early-return. v1 HIP extension 생성 로직은 vestigial Phase 2 동일 역할.
- **버려진 시도들** (디버깅 흔적): SK vertex mutate (eave slanted ), L자 extension (휘는 라인), min(λ) 끝점 (한쪽 offset~0 corner extension 짧아짐), 선형방정식 교점 (roof corner 까지) 모두 사용자 의도와 맞음.
- **Phase 3**: wall/roof 독립 이동, 보조선(eaveHelpLine ) 전면 재설계.
**Why**:
- 고객이 roofLine wallLine 처럼 움직이고 싶어함 축이 독립적이어야 처음부터 설계 다시 (사용자 표현: "처음부터 설계를 다시 해야 할것 같다").
- v1 호환을 유지하려 하면 "wallLineroofLine derivation" 양방향 dependency 되어 설계가 꼬임.
- v1 v1 트랙(main 또는 dev) 에서 별개로 진행됨.
**How to apply**:
- `sk-v2.0` 브랜치에서 작업 시: v1 회귀 체크리스트(project_skeleton_regression_checklist.md) 무시 가능. 그건 v1 트랙 전용.
- "시각적으로 동일해야 하나?" 같은 질문 자체를 하지 . v2.0 자체 시각으로 진행.
- v2.0 내에서는 사용자가 "한단계 한단계" 강조했으므로 Phase 123 순서 엄수, Phase 안에서도 사각형복잡한 도형 순으로.
**관련 메모**:
- `project_skeleton_regression_checklist.md` v1 트랙용 회귀 시나리오. v2.0 작업에는 적용 .
- `project_shoulder_absorbed_thresholds.md` v1 흡수 가드. v2.0 에서는 wall master 흡수 자체가 다른 의미가 , 재검토 필요.