minsungandClaude Opus 5 cf1298749b fix(viewer2d): show lineweight at AutoCAD's display scale (20 px/mm)
Hand test against an AutoCAD capture: the 0.50mm road edge is ~10px
there but only ~4px here. Lineweight is zoom-independent screen pixels,
so the two captures compare directly - the 8 px/mm mapping was 2.5x too
small. AutoCAD's default display scale is one pixel per 0.05mm, so use
20 px/mm (0.35mm = 7px, 0.50mm = 10px, 2.11mm = 42px) and raise the
clamp to 48px.

Add setLineweightScale()/getLineweightScale() so a host can retune it -
AutoCAD exposes the same thing as the Adjust Display Scale slider.

Re-measured headless: the 0.35mm road-gutter line now renders ~7px, so
both weight classes land on the same scale.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 20:34:27 +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
dist2 정적 빌드 배포 절차 (공식 배포 스크립트 없음) docs/deploy-dist2-static-build.md
SubDMesh(MESH) 미표시 — parseResult 누락 + 큰 메쉬 잘림 docs/subdmesh-rendering.md
선가중치(Lineweight) 미적용 — parseResult 누락 + WebGL 1px 한계 docs/lineweight-rendering.md
acadrust MPL-2.0 고지 누락 (수정본 wasm 공개 배포) docs/license-mpl2-acadrust.md
↳ 위 둘의 측정 결과 + 상호작용(메쉬 선분이 굵기 버킷 상한을 넘길 위험) docs/improvement-results-2026-08-04.md

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


라이선스 메모

조각 라이선스
Viewer2D 포트 · 샘플 글루 MIT (hmwebviewer 계열)
acadrust (WASM 내부, read_mesh 로컬 패치 포함) MPL-2.0 — 수정본
dxf-parser · three · opentype.js MIT
NanumGothic OFL

acadrust 는 파일 단위 카피레프트라 패치한 파일의 소스를 배포 대상자에게 제공할 의무가 있다. 고지·MPL 원문·패치는 THIRD-PARTY-NOTICES.mdpublic/licenses/(배포 시 /licenses/)에 동봉한다. 의무 범위와 조치 근거: docs/license-mpl2-acadrust.md

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%