- `docs/` 를 .gitignore 에서 빼 git 추적 대상으로 전환 (위키·완료 이력·검증 기록) - `docs/raw/PLAN.md` · `docs/raw/OWNERS.md` 를 저장소 최상위로 이동 후 .gitignore 에 등록 — 창끼리 공유하되 저장소에는 안 올리는 장부 - 살아 있는 경로 참조 7개 파일 정정 (아카이브 107건은 그때 사실이라 그대로 둠) - graphify 날짜별 산출물(`docs/wiki/graphify-out/20*/`) 제외 — `graphify update` 가 다시 만듦 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
55 lines
6.1 KiB
Markdown
55 lines
6.1 KiB
Markdown
---
|
|
status: stable
|
|
page_id: B08_DesignDetail
|
|
related_pages: ["[[B08_DesignDetail/B08_frontend]]", "[[B08_DesignDetail/B08_api]]", "[[B07_Quantity/B07_backend]]", "[[db_schema/structure_output]]", "[[dependencies]]", "[[architecture/implementation_status]]", "[[architecture/workflow_data_flow]]"]
|
|
last_updated: 2026-08-30
|
|
source: ["docs/raw/verification/2026-07-19_verify_B07_DesignDetail.md", "docs/raw/verification/2026-07-20_verify_B07_상세설계개선.md", "docs/raw/verification/2026-07-21_verify_B06_ground_section_type_B07_linkage.md", "docs/raw/verification/2026-07-21_verify_B06_default_design_B07_gating.md", "docs/raw/verification/2026-07-22_verify_B06_B07.md", "docs/raw/verification/2026-07-25_verify_b07_design_detail.md", "docs/raw/verification/2026-07-26_verify_B07_도면_템플릿_및_도각_적용.md", "docs/raw/verification/2026-08-08_verify_server_and_e2e_fixes.md"]
|
|
---
|
|
|
|
# B08_DesignDetail — Backend
|
|
|
|
## 도면 관리, 종단 30측점 분할, CAD 수량산출표 및 도면 템플릿 파이프라인
|
|
B06(종횡단) 결과물과 CAD 에디터(`openwebcad`) 간의 도면 데이터 관리, 종단도 30측점 N분할, 선별 레이어 분리, A1 도각 템플릿 병합 및 납품 양식 CAD 테이블 직렬화를 수행합니다.
|
|
|
|
| 소스 파일 / 엔드포인트 | 위치 | 역할 |
|
|
|---|---|---|
|
|
| `GET /api/projects/{project_id}/design-drawings` | `B08_DesignDetail_Router.py` | 프로젝트 도면 목록 메타데이터 로드 (종단도 30측점 동적 분할 `longitudinal_chunks()` 연동) |
|
|
| `GET /api/projects/{project_id}/design-drawings/{drawing_id}` | `B08_DesignDetail_Router.py` | 선택 도면의 CAD 스키마 JSON(포맷 버전 8) 및 Y축/도각 템플릿 병합 결과물 전달 |
|
|
| `PUT /api/projects/{project_id}/design-drawings/{drawing_id}/confirm` | `B08_DesignDetail_Router.py` | 도면 편집 JSON 및 CAD 수량표 역추출(`extract_quantity_table`) 데이터 확정 저장 (버전 스탬프 `v5`, `get_db_pool()` 동기 호출 예외 정정) |
|
|
| `B08_DesignDetail_Engine_Cad_Long.py` | `B08_DesignDetail/` | 종단 CAD 도면 및 하단 납품 측점 테이블(`b07-long-table`) 조립 엔진, 도각 템플릿 병합 적용 (663줄) |
|
|
| `B08_DesignDetail_Engine_Cad.py` | `B08_DesignDetail/` | 횡단 CAD 4개 레이어 분리 및 CAD 수량표 조립 엔진 (693줄, `DRAWING_FORMAT = 7` 스키마 무효화) |
|
|
| `B08_DesignDetail_Engine_Template.py` | `B08_DesignDetail/` | **[신설/도각병합]** A1 도각 JSON 템플릿 로드, 콘텐츠 bbox 기준 균등 스케일링/이동 연산, 레이어 잠금(`b07-frame`) 및 uuid5 결정적 ID 변환 모듈 (123줄) |
|
|
| `dxf_to_openwebcad.py` | `resources/dwg_analysis/` | **[신설/템플릿변환]** `ezdxf` 기반 원시 도각 DXF 마스터 파일을 openwebcad JSON 포맷으로 일방향 자동 변환하는 오프라인 파이프라인 스크립트 (341줄) |
|
|
| `/b08-cad` 정적 서빙 | `main.py` | `B08_DesignDetail/openwebcad/dist` 경로의 독립형 2D CAD 컴파일본 서빙 |
|
|
|
|
토적도·유역도는 [[B08_DesignDetail/B08_drawing_masshaul_watershed]], CAD 명령 구조는 [[B08_DesignDetail/B08_CAD_commands]]에서 관리한다.
|
|
|
|
## 도각 템플릿 변환 및 종단도 A1 도각 병합 (2026-07-26)
|
|
* **DXF ➡️ openwebcad JSON 변환**: openwebcad 에디터에 호환되는 독자적 기하 JSON 스펙으로 DXF Model Space 원시 객체(Line, Arc, Circle, Text 등)를 1:1 파싱합니다. ACI 7(검은색)을 웹 캔버스 전용 `#f5f7fa` 색상으로 보정하며, `uuid5` 기반 결정적 ID를 생성하여 재변환 시의 Git diff를 차단합니다.
|
|
* **A1 도각 템플릿 병합**: 840×594 크기의 A1 프레임 내부 작도영역 `_A1_INNER` 에 종단 콘텐츠 bbox가 5% 여백을 두고 안전하게 중앙 배치되도록 스케일 배율과 이동 변위를 역산하여 오버레이합니다. fontSize와 radius도 스케일비에 비례해 자동 축소/확대 렌더링되며, 템플릿 레이어는 `b07-frame` (잠금 상태)로 강제 잠금 처리됩니다.
|
|
|
|
## 종단도 30측점 N분할 및 납품 양식 측점 테이블 (2026-07-25 N-1-1)
|
|
* **30측점 N분할 (`longitudinal_chunks`)**: 가로 폭 축척 보정을 위해 종단도를 30측점 단위로 동적 N분할하여 `종단도 (1/N)` 메타데이터로 서빙.
|
|
* **하단 CAD 측점 테이블 (`b07-long-table`)**: 세로쓰기(`textDirection: (0,1)`) 지반고/계획고/절성토고 값 표기, 구배/곡선 브래킷 및 사선+원 표기 엔티티 직렬화. Y축 눈금/라벨 및 `b07-long-grid` 잠금 레이어 연동.
|
|
|
|
## 횡단도 4개 선별 레이어 및 CAD 수량산출표 (2026-07-25 N-1-2/N-1-3)
|
|
* **4개 레이어 분리**: `b07-ground`(#f5f7fa, `isLocked: true` 지표선 선택 제외), `b07-design`(#b794f6, 계획선), `b07-structure`(#f6d55c, 구조물), `b07-rock-boundary`(#f59e0b 파선, 암경계선).
|
|
* **CAD 수량산출표 엔티티 (`b07-cross-table`)**: HTML 패널 대신 21개 수량 키셋 기반 3그룹 CAD 테이블 엔티티를 도면 하단에 직렬화하고 더블클릭 편집 및 확정 저장 시 `extract_quantity_table()` 역추출 보존 연동.
|
|
|
|
## 워크플로우 게이팅 연동
|
|
* **횡단도 완료 게이팅**: 백엔드 `confirm_design_drawing`의 `expected_ids`를 `kind == "cross"`인 횡단도만으로 한정하여, 종단도 확정 여부와 관계없이 **모든 횡단 도면이 최종 확정**되면 단계 완료(B08 이동 허용) 처리.
|
|
* 도면 변경 시 `invalidate` API를 호출하여 단계를 IN_PROGRESS로 복원하고 다음 단계 게이팅을 차단함.
|
|
|
|
## 현재 책임 경계
|
|
|
|
| 항목 | 현재 구현 | 판정 |
|
|
|---|---|---|
|
|
| 횡단 절·성토 단면 재계산 | B06 지정값과 계획고로 재계산 후 DB design을 `confirmed`로 병합 | B08 구현 책임 |
|
|
| CAD 수량표 | 횡단 도면의 `quantity_table` 생성·역추출·manifest 저장 | 구현됨 |
|
|
| 프로젝트 전체 수량 산출 | 공종별 집계·수량 SSOT·보정 이력 | B08에도 완성 구현 없음 |
|
|
| B07 연계 | B07은 계산 없이 stage 4 완료 | 향후 책임 경계 결정 필요 |
|
|
|
|
|
|
|
|
- 하위 컴포넌트: [[B08_DesignDetail/backend/B08_DesignDetail_Router|B08_DesignDetail_Router]]
|