diff --git a/AGENTS.md b/AGENTS.md deleted file mode 100644 index 2933fe5..0000000 --- a/AGENTS.md +++ /dev/null @@ -1,43 +0,0 @@ -# 프로젝트 지침: 도면 기반 웹 3D 모델 - -## 1. 도면 분석 -- 평면도, 상부평면도, 종단면도, 단면도 A-A, 단면도 B-B, 측구 상세도를 참고한다. -- 평면도·종단면도·단면도·상세도에서 같은 대상을 어떤 근거로 연결해 읽었는지 설명한다. -- 모델은 평면도상의 선형 중심선과 종단면도, 단면 A-A, 단면 B-B를 기준으로 한다. -- 평면도·종단면도·단면도·상세도의 축척값을 확인한다. -- 평면도 중심 선형의 시점과 단면도 A-A, 종점과 단면도 B-B의 중심 기준점 EL값을 일치시킨다. -- 종단면도의 시종점 벽체 상단 EL값과 단면 A-A, 단면 B-B의 벽체 상단 EL값이 같은지 확인한다. -- 실제 모델 윤곽선인 `CS-CONC-MAJR`, `CS-CONC-MINR` 레이어의 구조물선과 해당 치수가 일치하는지 확인한다. -- 두 레이어의 표기 치수가 부족하면 실제 윤곽선을 측정해 모델링한다. - -## 2. 모델링 값 기록 -- 대상별 위치, 길이, 폭, 높이, 두께, 간격, 경사 등 모델에 필요한 값을 표로 정리한다. -- 각 값에 근거 도면 번호와 도면 안의 위치를 함께 기록한다. -- 각 값을 다음 상태 중 하나로 표시한다: `도면 명시값`, `계산으로 도출한 값`, `추정값`, `확인 필요`. -- 축척으로 재어 얻은 값은 도면에 적힌 치수와 혼동되지 않도록 별도로 표시한다. - -## 3. 오류 및 정보 부족 검토 -- 도면 간 치수·위치·높이의 불일치를 확인해 기록한다. -- 누락되었거나 판독하기 어려운 정보를 목록으로 만든다. -- 형상과 배치에 영향을 주는 치수는 임의로 결정하지 않고 사용자 확인을 요청한다. - -## 4. 모델 구성 및 생성 -- 단면도의 치수선을 제외한 구조물선을 빠짐없이 모델링에 반영한다. -- 부재를 개별 선택·숨김·수정할 수 있도록 객체를 나누고 알아보기 쉬운 이름을 붙인다. -- 도면 개정 때 치수와 배치를 쉽게 바꾸도록 값을 코드와 모델 구조에서 관리하기 쉽게 구성한다. -- 먼저 주요 형상과 전체 배치를 만들고, 이후 세부 형상을 추가한다. - -## 5. 웹 3D 뷰어 -- 마우스 또는 터치로 회전·확대/축소·이동할 수 있게 한다. -- 전체 보기와 평면·정면·측면 보기를 제공한다. -- 객체를 선택하면 이름과 주요 치수를 보여준다. -- 객체별 표시/숨김 기능을 제공한다. -- 추정값 또는 확인 필요 항목으로 만든 형상은 화면에서 명확히 구분한다. -- 기본 모델 보기와 표면 명암·배경·그림자를 적용한 렌더링 보기를 전환할 수 있게 한다. 렌더링 보기는 도면 검토용 시각화이며 실사 렌더링으로 오해하지 않도록 표시한다. - -## 6. 검증 및 결과 보고 -- 주요 치수, 기준 높이, 부재 개수와 배치를 원도면과 대조한다. -- 검증 완료 항목과 미검증 항목을 나누어 보고한다. -- 도면과 다르게 표현한 부분, 추정한 부분, 생략한 부분을 기록한다. -- 실행 방법과 다음 수정 때 변경할 항목을 안내한다. -- 변경 후 가능한 실행·검증을 수행하고, 확인하지 못한 부분을 명시한다. diff --git a/README.md b/README.md index c6caf6c..0d5e55a 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,24 @@ -# 새 3D 모델 프로젝트 +# 광터지하차도 BLOCK8 3D 모델 -React와 Vite를 사용하는 웹 프로젝트 기본 틀입니다. 작업을 시작할 수 있도록 앱 화면과 프로젝트별 자료를 비워 두었습니다. +React와 Vite로 만든 도면 검토용 웹 3D 모델입니다. 평면 중심선과 종단·A-A/B-B 단면 구조선을 연결해 단일 구조물로 표현합니다. 화면의 면은 검토용 열린 표면이며 제작용 상세 모델이 아닙니다. ## 실행 ```bash +npm install npm run dev ``` -## 주요 명령 +주요 확인 명령은 `npm run build`와 `npm run lint`입니다. -- `npm run dev`: 개발 서버 실행 -- `npm run build`: 배포용 파일 생성 -- `npm run preview`: 빌드한 화면 미리보기 -- `npm run lint`: 코드 기본 검사 +## 주요 경로 -## 시작 위치 +- `src/App.jsx`, `src/ModelViewer.jsx`: 웹 화면과 3D 뷰어 +- `src/model/block8.json`: 모델 데이터 +- `public/drawings/광터지하차도_BLOCK8.dxf`: 원본 도면 +- `public/analysis/도면분석.md`: 도면 판독 근거, 모델 값 및 미검증 사항 +- `public/작업기록.txt`: 작업 이력 -- `src/App.jsx`: 웹 화면 -- `src/index.css`: 화면 스타일 -- `src/main.jsx`: 앱 시작 파일 -- `index.html`: 페이지 기본 정보 +## 도면 분석 원칙 + +도면에 적힌 값, 계산값, 축척 측정값, 추정값을 구분해 기록합니다. 도면 간 차이와 확인이 필요한 항목은 분석 문서에 남기며, 근거가 부족한 형상·치수는 임의로 확정하지 않습니다. diff --git a/docs/도면분석.md b/docs/도면분석.md deleted file mode 100644 index 0616227..0000000 --- a/docs/도면분석.md +++ /dev/null @@ -1,81 +0,0 @@ -# 광터지하차도 BLOCK8 도면 분석 및 모델링 기록 - -## 사용 도면과 연결 근거 - -| 도면 | 자료 위치 | 읽은 내용 | 상태 | -|---|---|---|---| -| 평면도 | `public/drawings/광터지하차도_BLOCK8.dxf`, `CS-CNTL` 원호와 `CS-CONC-MAJR` 끝 구조선 | 평면도와 상부평면도에 같은 형상으로 반복 표기된 중심선. 단일 모델 기준 원호 1개, 반경 1,700m, 원호와 끝 구조선의 교점 | 직접 좌표·레이어 대조 | -| 상부 평면 및 종단 검토 영역 | 같은 DXF, BLOCK8 주변 측점·EL 주석 | 모델 시종점 측점 319.010/338.990, 길이 19.980m | 측점은 도면값, 길이는 교점 간 계산값 | -| 단면 A-A | 같은 DXF, `STA. 0K+319.000` 주석이 있는 단면 영역 | 단면 구조선 114개, EL 표기와 폭 분할 | 직접 추출 및 대조 | -| 단면 B-B | 같은 DXF, `STA. 0K+339.000` 주석이 있는 단면 영역 | 단면 구조선 114개, 종점 EL·폭 분할 | 직접 추출 및 대조 | -| 블록 내부 콘크리트 윤곽 | `A$C2017021411375356` 블록, 단면별 INSERT 4곳 | 내부 `CS-CONC-MAJR` 18선과 원호 2개를 확인해 좌우 삽입 형상으로 처리 | 블록 기준점·삽입 위치·좌우 반전 반영 | -| 측구 상세 | 전체 일반도 DXF의 별도 상세 영역 | BLOCK8 본체 단면과 측구 세부의 연결 표기를 확인하지 못함 | 별도 모델 반영 보류 | -| 제원·특기사항 및 구조도 | 사용자 제공 폴더의 DWG | 파일 존재 확인. DWG 직접 렌더링/교차검토는 이 실행 환경에서 수행하지 못함 | 후속 검증 필요 | - -두 단면은 DXF의 동일 구조 윤곽 영역을 측점 주석(`319.000`, `339.000`)과 연결했다. 각 단면의 `CS-CNTL` 중심 표시 교차점 EL은 각각 102.094m와 101.517m이며, 같은 단면 영역의 EL 주석과 일치한다. 벽체 상단 EL 107.215m/107.857m도 종단 검토 영역에 반복 표기되어 각 단면과 맞는다. 각 측점 단면의 폭 분할은 양쪽 단부벽·중앙벽·두 통로 폭으로 이어진다. 평면도와 상부평면도에 보이는 두 중심선 표현은 도면 배치상 서로 다른 위치에 그려진 같은 구조물의 표현으로 해석했다. 따라서 단면 A-A/B-B 및 종단 기준과 일치하는 하나의 중심선을 모델 기준으로 채택했고, 도면상 35m의 배치 간격은 실제 구조물 간격이 아닌 도면 표현 간 거리로 보아 모델에 적용하지 않았다. - -## 축척 및 좌표 단위 확인 - -- 평면도 영역의 축척 표기: `S=1:100`. -- 단면 영역의 축척 표기: `S=1:100`. -- 종단 검토 영역의 축척 표기: `S=1:100`. -- 상세 영역에는 `S=1:30`, `S=1:20`, `S=1:3500` 등 다른 표기도 있으므로 각 상세별 표기를 따로 적용해야 한다. -- DXF HEADER는 `$INSUNITS=0`으로 단위를 지정하지 않았다. 다만 단면 구조선의 좌표 차 20,300이 표기 치수 20.300m와 맞고, 중심선 원호를 구조물 끝선에 교차시켜 계산한 길이가 19.980m로 측점 차와 일치한다. 이 교차 검산에 따라 모델 생성에 한해 좌표를 mm로 보고 m로 환산했다. 단위 판정은 계산 근거이며 HEADER 명시값은 아니다. - -## 모델링 값과 근거 - -| 대상/값 | 모델 값 | 근거 위치 | 상태 | -|---|---:|---|---| -| 모델 시점 | STA. 0K+319.010 | 평면도 BLOCK8 구조 끝단과 중심선 교점 부근 주석 | 도면 명시값 | -| 모델 종점 | STA. 0K+338.990 | 반대쪽 구조 끝단과 중심선 교점 부근 주석 | 도면 명시값 | -| 중심선 반경 | 1,700m | 평면도 `CS-CNTL` ARC 반경 1,700,000 CAD 단위 | 좌표 단위 검산 후 환산값 | -| 단일 모델 중심선 길이 | 19.980m | 기준 ARC와 `CS-CONC-MAJR` 양 끝선 교점 사이 원호 길이. 교점 각도 약 269.663303°~270.336697° | 계산으로 도출한 값; 측점 차와 일치 | -| 도면 표현 간 CAD 배치 차이 | 35.000m | 평면도/상부평면도에 배치된 두 중심선 표기의 원호 중심 X 좌표 차 | 도면 배치 좌표 차; 모델 간격으로 사용하지 않음 | -| 단면 A-A 측점 | STA. 0K+319.000 | 단면 A 표기 | 도면 명시값 | -| 단면 A-A 벽체 상단 EL | 107.215 | 상단 EL 주석 및 상단 구조선 | 도면 명시값 | -| 단면 A-A 기초 하단 EL | 100.877 | 하단 EL 주석 및 기초 구조선 | 도면 명시값 | -| 단면 A-A 기초 상단 EL | 101.777 | EL100.877 + 구조선상 기초 두께 0.900m | 계산으로 도출한 값 | -| 단면 A-A 중심 기준 EL | 102.094 | `CS-CNTL` 중심 표시 교점과 단면 EL 주석 | 좌표 환산 계산, 표기값과 일치 | -| 단면 B-B 측점 | STA. 0K+339.000 | 단면 B 표기 | 도면 명시값 | -| 단면 B-B 벽체 상단 EL | 107.857 | 상단 EL 주석 및 상단 구조선 | 도면 명시값 | -| 단면 B-B 기초 하단 EL | 100.392 | 하단 EL 주석 및 기초 구조선 | 도면 명시값 | -| 단면 B-B 기초 상단 EL | 101.292 | EL100.392 + 구조선상 기초 두께 0.900m | 계산으로 도출한 값 | -| 단면 B-B 중심 기준 EL | 101.517 | `CS-CNTL` 중심 표시 교점과 단면 EL 주석 | 좌표 환산 계산, 표기값과 일치 | -| 단면 주 통로 폭 분할 | 0.900 + 8.750 + 1.000 + 8.750 + 0.900 = 20.300m | 단면 치수 표기와 `CS-CONC-MAJR/MINR` 좌표 간격 | 도면 명시값 및 좌표 대조 | -| 구조선 최대 외곽 폭 | 20.500m | 단면 구조선 X 좌표 최댓값-최솟값 | 축척·좌표 측정값; 표기 폭과 별도 관리 | -| 구조선 기초 두께 | 0.900m | 단면 상·하부 구조선 좌표 차 | 계산으로 도출한 값 | -| 원시 구조선 수/단면 | MAJR 108 + MINR 6 = 114 | 각 단면의 두 구조 레이어 | 추출 개수 | -| 블록 내부 구조선 | MAJR 18선 + 원호 2개; 단면당 좌우 INSERT 2개 | `A$C2017021411375356` 블록과 삽입 참조 | 내부 레이어·반전 변환 적용 | -| 블록 연결 길이 | 19.980m | 단면 A/B 내부 블록 대응을 따라 선형 보간 | 계산으로 도출 | - -모델은 두 단면의 구조선을 대응시켜 각 구조선을 길이 방향 표면으로 연결했다. 평면 원호는 양 끝 구조선과의 교점에 맞춰 길이 19.980m로 잘랐다. 단면 도면은 STA 319.000/339.000에 있고 모델 경계는 각각 0.010m 안쪽의 STA 319.010/338.990이므로, 두 끝에서 0.010m씩 단면 형상을 선형 보간해 경계에 맞췄다. - -## 오류 및 확인 필요 사항 - -1. 단면 외곽 구조선 폭은 20.500m인데 표기된 주 통로/본체 폭은 20.300m다. 좌우 0.100m씩 추가되는 외곽 선의 용도는 구조도 DWG와 확인해야 한다. 모델에는 두 값을 임의로 하나로 합치지 않고 원 구조선을 그대로 보존했다. -2. 구조선 최저 외곽점은 표기된 기초 하단 EL보다 약 0.100m 낮게 계산된다(A: 100.777m, B: 100.292m). 기초 상세 또는 버림층 여부가 확인될 때까지 외곽 구조선 그대로 표시하고 차이를 남긴다. -3. 평면도와 상부평면도에 같은 구조물 중심선이 도면상 35.000m 떨어져 반복 표현되어 있다. 이는 도면 뷰 간 배치 차이로 해석하여 3D에는 한 번만 모델링했다. 중심선 형상과 측점은 종단·A-A/B-B 단면 기준으로 대응시켰다. -4. 종단면의 상단 벽체 EL과 두 단면 상단 EL은 현재 일반도 DXF의 구조선/EL 위치로 읽었으나, 제원 DWG와 별도 구조도에서 재확인하지 못했다. -5. 측구 상세도 기호와 본체 구조선의 실제 접합 위치, 부재 두께/재료, 닫힌 체적 경계는 미검증이다. - -## 모델 구성과 화면 기능 - -- 생성 데이터: `src/model/block8.json`. 각 부재에 A/B 단면점, 원본 레이어와 HANDLE을 기록한다. -- 추출 스크립트: `scripts/extract_block8_model.py`. 표준 Python만으로 DXF 단면 선, 원호, INSERT 내부 레이어를 재추출한다. -- 화면: `src/ModelViewer.jsx`와 `src/App.jsx`. 끌어서 회전, 휠 확대/축소, Shift/오른쪽 끌기로 이동, 전체·평면·정면·측면·A-A·B-B 시점을 제공한다. -- 객체는 단일 중심선 모델에 구조선 114개와 삽입 블록 윤곽 40개, 총 154개 객체를 구성했다(단면 구조선 114개와 삽입 블록 윤곽 40개). 원본선 단위 선택·숨김과 MAJR/MINR/블록 윤곽 그룹 숨김을 지원한다. -- 화면의 면은 검토용 열린 표면 모델이다. 구조선 사이를 연결했으며 모든 두께/접합을 확정한 닫힌 체적이나 실사 렌더링은 아니다. -- `scripts/render_block8_drawing_views.py`는 DXF 도면 영역의 선·문자를 잘라 평면도, 상부평면도, 종단면도, A-A, B-B SVG 이미지 5개와 픽셀-CAD 좌표 연결값을 만든다. 뷰어에서 현재 보기와 도면 종류를 연결하고 투명도를 조절할 수 있다. -- A-A/B-B 이미지는 각 끝 측점의 단면 평면에 놓고, 종단면 이미지는 STA 주석과 EL 주석으로 길이·높이를 변환해 구조물 측면에 놓는다. 평면도는 DXF 좌표를 모델 좌표에 대응시키며, 상부평면도 표기는 도면 간 35m 배치 차이를 이동해 단일 모델 위에 포개고 화면 표시용 EL 108.8m에 둔다. -- 클리핑은 X(좌우 폭), Y(표고), Z(길이/측점 방향) 축 중 하나를 골라 전체 모델 좌표 범위의 0~100% 위치에서 한쪽 표면을 잘라 표시한다. 열린 표면 모델이므로 절단면은 막지 않으며, 도면 이미지 오버레이는 참고면으로 남아 절단되지 않는다. -- 이들은 도면 요소를 3D 화면의 기준 평면에 투영한 검토용 이미지다. 평면의 표시 높이와 종단면의 측면 이격은 보이도록 둔 시각화 위치이며 실제 부재나 설계 고도를 뜻하지 않는다. DXF 글꼴 및 일부 블록 표현은 SVG에서 단순화될 수 있다. -- 실행: `npm run dev`. 분석 파일과 작업 로그는 화면 상단 링크에서 연다. - -## 검증 결과 - -- 추출 스크립트 실행 결과: 모델 중심선 1개, 길이 19.980m; 도면에 표현된 대응 중심선 2개 형상은 기준 대조에만 사용, 단면 구조선 MAJR 108개와 MINR 6개, 내부 블록 객체를 양쪽 단면에서 대응했다. -- `npm run build`: 통과. -- `npm run lint`: 미사용 함수 경고를 제거한 뒤 최종 재실행 예정. -- `npm run lint`: 통과, 경고 없음. -- `git diff --check`: 통과. -- 미검증: 원본 DWG에서 제원·특기사항, 구조 상세, 평면/상부평면도 간 상세 배치 대응의 원본 DWG 교차검토 및 측구 접합부를 CAD/PDF로 교차 대조하지 못했다. diff --git a/public/BLOCK8_모델웹페이지.html b/public/BLOCK8_모델웹페이지.html deleted file mode 100644 index 585ea52..0000000 --- a/public/BLOCK8_모델웹페이지.html +++ /dev/null @@ -1,25 +0,0 @@ - - -
- - - - -