This branch is 8 commits behind kimminsung/dwg-dxf-viewer-sample:master
minsung fb8f7ca4eb fix(viewer2d): correct Slug GPU text scale to match DWG cap-height
SlugTextBatch.add() scaled em-unit glyph outlines by the raw DWG
`height` value, but glyph ink only reaches capHeightEm (~0.74 em) of
the em box. Rendered cap height ended up ~26% short of spec (e.g. a
3.6-height TABLE cell text rendered at ~2.68), while the canvas-sprite
fallback already corrected for this via measured ascent. Divide by
capHeightEm so both paths agree.

Rebuilds dist2 (was stale since before the Entity selection/Property
Inspector/Layer panel work landed).
2026-08-03 15:26:06 +09:00

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\    ← 이 샘플 (형제)

실행

cd D:\MYCLAUDE_PROJECT\dwg-dxf-viewer-sample
npm install
npm run dev
# → http://localhost:5173
UI 모듈 경로
Sample DWG ext2dacadrust-dwg WASMViewer2D
Sample DXF ext2ddxf-parser + hatch + adapterViewer2D
파일 드롭 / Open 확장자로 위 둘 중 하나

모듈 지도: 브라우저에서 docs/modules-dwg-dxf.html
조합 코드: 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
Model + Paper 동시 렌더로 글자 겹침 / Layout 탭 docs/model-paper-space.md

샘플 패치: fixDwgKoreanText, cadSpaces + Viewer2D 공간 필터, Model/Layout 탭.
원본 hmwebviewer 반영 절차는 각 문서를 따른다.


라이선스 메모

조각 라이선스
Viewer2D 포트 · 샘플 글루 MIT (hmwebviewer 계열)
acadrust (WASM 내부) MPL-2.0
dxf-parser · three MIT
NanumGothic OFL
S
Description
Standalone DWG/DXF 2D viewer sample — compose acadrust-dwg + dxf-parser + Viewer2D (Vite/Three.js)
Readme
8 MiB
Languages
JavaScript 55.6%
TypeScript 31.2%
HTML 12.3%
CSS 0.6%
Shell 0.3%