forked from kimminsung/dwg-dxf-viewer-sample
- acadrust-0.6.5-upgrade.md: what changed in dwg-wasm and why (failsafe reads, 32 MiB wasm memory growth, API changes), the field-level parse diff with each cause, cost (wasm size, load time) and what is left. - acadrust-0.6.5-upgrade-report.html: self-contained report with old/new captures of all 22 samples, zoomed checks of the formerly patched MESH and OLE2FRAME paths, and a diff image for each of the 5 changed views. - license-mpl2-acadrust.md / README: the obligation is now license text plus source location; records why the 0.4.1 notice was wrong. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
138 lines
4.8 KiB
Markdown
138 lines
4.8 KiB
Markdown
# dwg-dxf-viewer-sample
|
|
|
|
**hmwebviewer 형제 폴더**에 분리된 DWG/DXF 2D 뷰어 샘플입니다.
|
|
|
|
`docs/modules-dwg-dxf.html` 모듈 지도의 카드
|
|
(`acadrust-dwg`, `dxf-parser`, `Viewer2D` …)를 **직접 조합**해 동작하는 독립 프로젝트입니다.
|
|
`hmwebviewer` 저장소 안에 의존하지 않습니다.
|
|
|
|
```
|
|
D:\MYCLAUDE_PROJECT\
|
|
hmwebviewer\ ← 본 제품
|
|
dwg-dxf-viewer-sample\ ← 이 샘플 (형제)
|
|
```
|
|
|
|
---
|
|
|
|
## 실행
|
|
|
|
```bash
|
|
cd D:\MYCLAUDE_PROJECT\dwg-dxf-viewer-sample
|
|
npm install
|
|
npm run dev
|
|
# → http://localhost:5173
|
|
```
|
|
|
|
| UI | 모듈 경로 |
|
|
|----|-----------|
|
|
| **Sample DWG** | `ext2d` → **acadrust-dwg WASM** → `Viewer2D` |
|
|
| **Sample DXF** | `ext2d` → **dxf-parser + hatch + adapter** → `Viewer2D` |
|
|
| 파일 드롭 / Open | 확장자로 위 둘 중 하나 |
|
|
|
|
모듈 지도: 브라우저에서 [`docs/modules-dwg-dxf.html`](./docs/modules-dwg-dxf.html)
|
|
조합 코드: [`src/main.ts`](./src/main.ts)
|
|
|
|
---
|
|
|
|
## 레이아웃
|
|
|
|
```
|
|
dwg-dxf-viewer-sample/
|
|
docs/modules-dwg-dxf.html # 모듈 조합 레시피 HTML
|
|
public/
|
|
fonts/NanumGothic-Regular.ttf
|
|
samples/BasicSample.dwg
|
|
samples/simple.dxf
|
|
src/
|
|
main.ts # 모듈을 import 해서 조립
|
|
viewer2d/ # 재사용 모듈 본체
|
|
acadrust-dwg/ # WASM
|
|
Viewer2D.js
|
|
dwgParser.ts
|
|
parseDxf.ts
|
|
dxfAdapter.js
|
|
dxfHatchHandler.js
|
|
ext2d.ts
|
|
slugText.ts
|
|
…
|
|
package.json
|
|
vite.config.ts
|
|
```
|
|
|
|
---
|
|
|
|
## 조합 파이프라인
|
|
|
|
```
|
|
File/URL
|
|
→ ext2d (isDwg / isDxf)
|
|
→ parseDwgBuffer | parseDxfBuffer
|
|
│ │
|
|
└ acadrust-dwg ├ decodeDxf
|
|
├ dxf-parser + dxfHatchHandler
|
|
└ dxfAdapter
|
|
→ CadParseResult
|
|
→ Viewer2D.load() (+ three, slugText/font)
|
|
```
|
|
|
|
---
|
|
|
|
## 의존성
|
|
|
|
| 패키지 | 역할 |
|
|
|--------|------|
|
|
| `three` | WebGL 렌더 / OrbitControls |
|
|
| `dxf-parser` | DXF 텍스트 파싱 |
|
|
| `opentype.js` | TTF 글리프 (slugText) |
|
|
|
|
WASM(`acadrust_dwg_bg.wasm`)은 `src/viewer2d/acadrust-dwg/` 에 포함되어 있으며
|
|
Vite `?url` import 로 로드됩니다.
|
|
|
|
---
|
|
|
|
## 다른 앱에 이식
|
|
|
|
1. `src/viewer2d/` 폴더 복사
|
|
2. `npm i three dxf-parser opentype.js`
|
|
3. 폰트 `public/fonts/NanumGothic-Regular.ttf`
|
|
4. Vite: `assetsInclude: ['**/*.wasm']`
|
|
5. `src/main.ts` 의 ①~④ 블록을 호스트에 붙이고 ⑤ UI만 교체
|
|
|
|
소스 동기화(선택): 본가 `hmwebviewer/src/viewer2d` 가 업데이트되면 해당 파일을
|
|
이 프로젝트 `src/viewer2d` 로 다시 복사하면 됩니다.
|
|
|
|
---
|
|
|
|
## 알려진 이슈 / 원본 반영 메모
|
|
|
|
| 이슈 | 문서 |
|
|
|------|------|
|
|
| 구형 한글 DWG TEXT 깨짐 (CP949→Latin-1 mojibake) | [`docs/korean-dwg-text-encoding.md`](./docs/korean-dwg-text-encoding.md) |
|
|
| Model + Paper 동시 렌더로 글자 겹침 / Layout 탭 | [`docs/model-paper-space.md`](./docs/model-paper-space.md) |
|
|
| `dist2` 정적 빌드 배포 절차 (공식 배포 스크립트 없음) | [`docs/deploy-dist2-static-build.md`](./docs/deploy-dist2-static-build.md) |
|
|
| SubDMesh(MESH) 미표시 — parseResult 누락 + 큰 메쉬 잘림 | [`docs/subdmesh-rendering.md`](./docs/subdmesh-rendering.md) |
|
|
| 선가중치(Lineweight) 미적용 — parseResult 누락 + WebGL 1px 한계 | [`docs/lineweight-rendering.md`](./docs/lineweight-rendering.md) |
|
|
| acadrust MPL-2.0 고지 누락 (수정본 wasm 공개 배포) | [`docs/license-mpl2-acadrust.md`](./docs/license-mpl2-acadrust.md) |
|
|
| acadrust 0.6.5 무수정 전환 — strict 파싱 실패, memory.grow 지연, VIEWPORT id | [`docs/acadrust-0.6.5-upgrade.md`](./docs/acadrust-0.6.5-upgrade.md) · 캡처 비교 [`report.html`](./docs/acadrust-0.6.5-upgrade-report.html) |
|
|
| ↳ 위 둘의 측정 결과 + 상호작용(메쉬 선분이 굵기 버킷 상한을 넘길 위험) | [`docs/improvement-results-2026-08-04.md`](./docs/improvement-results-2026-08-04.md) |
|
|
|
|
샘플 패치: `fixDwgKoreanText`, `cadSpaces` + Viewer2D 공간 필터, Model/Layout 탭.
|
|
원본 `hmwebviewer` 반영 절차는 각 문서를 따른다.
|
|
|
|
---
|
|
|
|
## 라이선스 메모
|
|
|
|
| 조각 | 라이선스 |
|
|
|------|----------|
|
|
| Viewer2D 포트 · 샘플 글루 | MIT (hmwebviewer 계열) |
|
|
| acadrust 0.6.5 (WASM 내부, crates.io 무수정) | **MPL-2.0** |
|
|
| dxf-parser · three · opentype.js | MIT |
|
|
| NanumGothic | OFL |
|
|
|
|
acadrust 는 무수정으로 쓰므로 **MPL 원문 동봉 + 소스 입수 위치 고지**만 하면 된다.
|
|
고지와 MPL 원문은 [`THIRD-PARTY-NOTICES.md`](./THIRD-PARTY-NOTICES.md) 와
|
|
`public/licenses/`(배포 시 `/licenses/`)에 동봉한다. 0.4.1 패치본에서 옮겨 온 경위:
|
|
[`docs/acadrust-0.6.5-upgrade.md`](./docs/acadrust-0.6.5-upgrade.md)
|
|
의무 범위와 조치 근거: [`docs/license-mpl2-acadrust.md`](./docs/license-mpl2-acadrust.md)
|