40 lines
3.9 KiB
Markdown
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 호환을 유지하려 하면 "wallLine→roofLine derivation" 이 양방향 dependency 가 되어 설계가 꼬임.
|
|
- v1 은 v1 트랙(main 또는 dev) 에서 별개로 진행됨.
|
|
|
|
**How to apply**:
|
|
- `sk-v2.0` 브랜치에서 작업 시: v1 회귀 체크리스트(project_skeleton_regression_checklist.md) 무시 가능. 그건 v1 트랙 전용.
|
|
- "시각적으로 동일해야 하나?" 같은 질문 자체를 하지 말 것. v2.0 은 자체 시각으로 진행.
|
|
- 단 v2.0 내에서는 사용자가 "한단계 한단계" 를 강조했으므로 Phase 1→2→3 순서 엄수, Phase 안에서도 사각형→복잡한 도형 순으로.
|
|
|
|
**관련 메모**:
|
|
- `project_skeleton_regression_checklist.md` — v1 트랙용 회귀 시나리오. v2.0 작업에는 적용 안 함.
|
|
- `project_shoulder_absorbed_thresholds.md` — v1 흡수 가드. v2.0 에서는 wall master 라 흡수 자체가 다른 의미가 됨, 재검토 필요.
|