Compare commits
3
Commits
1aa927e2e9
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
473addbe44 | ||
|
|
daa1ea06e7 | ||
|
|
4bacefa615 |
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 344 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 79 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 97 KiB |
@@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
/**
|
||||||
|
* Parse a DWG in Node — no browser, no Viewer2D. Same acadrust wasm and
|
||||||
|
* Korean-text fixup as src/viewer2d/dwgParser.ts.
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* node scripts/parse-dwg.mjs <file.dwg> # print summary
|
||||||
|
* node scripts/parse-dwg.mjs <file.dwg> out.json # also write full parseResult
|
||||||
|
*
|
||||||
|
* Needs Node >= 22.18 (imports fixDwgKoreanText.ts via built-in type stripping).
|
||||||
|
*/
|
||||||
|
import { readFileSync, writeFileSync } from 'node:fs';
|
||||||
|
import { initSync, parse_dwg_json } from '../src/viewer2d/acadrust-dwg/acadrust_dwg.js';
|
||||||
|
import { fixDwgKoreanText } from '../src/viewer2d/fixDwgKoreanText.ts';
|
||||||
|
|
||||||
|
const [inPath, outPath] = process.argv.slice(2);
|
||||||
|
if (!inPath) {
|
||||||
|
console.error('usage: node scripts/parse-dwg.mjs <file.dwg> [out.json]');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const wasmUrl = new URL('../src/viewer2d/acadrust-dwg/acadrust_dwg_bg.wasm', import.meta.url);
|
||||||
|
initSync({ module: readFileSync(wasmUrl) });
|
||||||
|
|
||||||
|
const t0 = performance.now();
|
||||||
|
const result = fixDwgKoreanText(JSON.parse(parse_dwg_json(readFileSync(inPath))));
|
||||||
|
const ms = performance.now() - t0;
|
||||||
|
|
||||||
|
const entities = result.entities ?? [];
|
||||||
|
const byType = {};
|
||||||
|
for (const e of entities) byType[e.type] = (byType[e.type] ?? 0) + 1;
|
||||||
|
|
||||||
|
console.log(`file : ${inPath}`);
|
||||||
|
console.log(`version : ${result.version}`);
|
||||||
|
console.log(`parse : ${ms.toFixed(0)} ms`);
|
||||||
|
console.log(`entities : ${entities.length}`);
|
||||||
|
console.table(Object.entries(byType).sort((a, b) => b[1] - a[1]).map(([type, count]) => ({ type, count })));
|
||||||
|
console.log(`tables : ${Object.keys(result.tables ?? {}).join(', ')}`);
|
||||||
|
if (result.stats) console.log('stats :', result.stats);
|
||||||
|
|
||||||
|
if (outPath) {
|
||||||
|
writeFileSync(outPath, JSON.stringify(result, null, 2));
|
||||||
|
console.log(`wrote : ${outPath}`);
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# acadrust-dwg — DWG 파서 wasm (빌드 정보)
|
||||||
|
|
||||||
|
이 폴더를 다른 레포로 복사해 쓴다면 **이 README 도 같이 복사**한다. 사본이 최신인지 판별할 근거가 여기 있다.
|
||||||
|
|
||||||
|
| 항목 | 값 |
|
||||||
|
|---|---|
|
||||||
|
| acadrust | **0.6.5** — crates.io 판을 **무수정**으로 사용 (upstream commit `289a616da6c68518218594aa80802cbe7fa71309`, crate SHA-256 `5eaa72520f70eb6f7f09b06f44e1ed0d8fad5fa743364f2c3715c30df962ec7c`) |
|
||||||
|
| 래퍼 (dwg-wasm, MIT) | `hmwebviewer` 의 `rust/dwg-wasm`, 브랜치 `chore/acadrust-0.6.5`, 커밋 `7c6786a` |
|
||||||
|
| `acadrust_dwg_bg.wasm` SHA-256 | `2d58b20f172cad3c6a38330c7173d9292107bd2fec8e4085f68507be961761fd` |
|
||||||
|
| 빌드 | 2026-10-19 · wasm-pack 0.15 · rustc 1.92 · `opt-level = "s"`, LTO |
|
||||||
|
| 정본 위치 | `gitea.hmac.kr/kimminsung/dwg-dxf-viewer-sample` → `src/viewer2d/acadrust-dwg/` (master) |
|
||||||
|
|
||||||
|
## 내 사본이 최신인지 확인
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sha256sum acadrust_dwg_bg.wasm # 2d58b20f172cad3c… 이면 이 빌드
|
||||||
|
grep -c -a 'acadrust-0.6.5' acadrust_dwg_bg.wasm # 1 이상 = 0.6.5 빌드, 0 = 옛 0.4.x 빌드
|
||||||
|
```
|
||||||
|
|
||||||
|
`package.json` 의 `version`(0.1.0)은 옛 빌드와 같아서 판별에 쓸 수 없다.
|
||||||
|
`grep` 표식은 wasm 안에 남은 crates.io 경로(`…\acadrust-0.6.5\src\…`)라서, 0.6.5 crate 로 빌드했을 때만 생긴다.
|
||||||
|
|
||||||
|
## 옛 빌드(acadrust 0.4.1 + 로컬 패치)에서 바꿀 때 알아 둘 것
|
||||||
|
|
||||||
|
- **API 는 같다.** `init` / `initSync`, `parse_dwg_json(bytes)`, `parse_dwg(bytes)`, parseResult 구조 모두 그대로다. 파일 4개(`acadrust_dwg.js`, `acadrust_dwg.d.ts`, `acadrust_dwg_bg.wasm`, `acadrust_dwg_bg.wasm.d.ts`)만 바꾸면 된다.
|
||||||
|
- **크기**: 864 KB → 2.9 MB (brotli 294 → 815 KB). 대형 도면 로드는 약 2~9 % 느리다.
|
||||||
|
- **더 정확해진 값** (0.4.1 이 잘못 읽던 것):
|
||||||
|
- 레이아웃 전체 뷰포트의 `VIEWPORT.id` = 1
|
||||||
|
- 3D 폴리선 vertex 순서
|
||||||
|
- ATTDEF 정렬
|
||||||
|
- 치수 `pt10`
|
||||||
|
- 트루컬러의 근사 ACI
|
||||||
|
- **한글**: 한글(CP949)을 원본 출력에서 바로 디코딩한다. JS 쪽 `fixDwgKoreanText` 는 그대로 둬도 무해하다.
|
||||||
|
- **새 타입명**: `DIMENSION_ARC`, `DIMENSION_LARGE_RADIAL`. 0.4.1 은 이 치수를 버렸다.
|
||||||
|
- **손상 레코드**: 도면 전체를 거부하지 않고 건너뛴 뒤 notification 으로 남긴다 (failsafe).
|
||||||
|
- 상세: 정본 레포 `docs/acadrust-0.6.5-upgrade.md`. 22개 샘플 화면 비교: `docs/acadrust-0.6.5-upgrade-report.html`.
|
||||||
|
|
||||||
|
## 라이선스
|
||||||
|
|
||||||
|
acadrust 는 MPL-2.0 이고 무수정으로 쓴다. 배포할 때는 MPL 원문과 소스 입수 위치 고지를 동봉한다 (정본 레포의 `THIRD-PARTY-NOTICES.md`, `public/licenses/`). 래퍼는 MIT.
|
||||||
Reference in new issue
Block a user