@flyfish-dev/cad-viewer 0.6.4 → 0.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -2
- package/README.zh-CN.md +25 -2
- package/dist/cad-viewer.es.js +1824 -1378
- package/dist/cad-viewer.es.js.map +1 -1
- package/dist/cad-viewer.umd.cjs +7 -7
- package/dist/cad-viewer.umd.cjs.map +1 -1
- package/dist/types/core/bounds.d.ts +9 -0
- package/dist/types/core/bounds.d.ts.map +1 -0
- package/dist/types/core/entity.d.ts +3 -1
- package/dist/types/core/entity.d.ts.map +1 -1
- package/dist/types/core/linetype.d.ts +32 -0
- package/dist/types/core/linetype.d.ts.map +1 -0
- package/dist/types/core/scene.d.ts +8 -0
- package/dist/types/core/scene.d.ts.map +1 -0
- package/dist/types/core/transform.d.ts.map +1 -1
- package/dist/types/core/types.d.ts +48 -0
- package/dist/types/core/types.d.ts.map +1 -1
- package/dist/types/index.d.ts +8 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/loaders/dwg/DwgParser.d.ts.map +1 -1
- package/dist/types/viewer/CadCanvasRenderer.d.ts +7 -4
- package/dist/types/viewer/CadCanvasRenderer.d.ts.map +1 -1
- package/dist/types/viewer/CadViewer.d.ts +3 -2
- package/dist/types/viewer/CadViewer.d.ts.map +1 -1
- package/dist/types/viewer/CadWebGLRenderer.d.ts +5 -2
- package/dist/types/viewer/CadWebGLRenderer.d.ts.map +1 -1
- package/dist/wasm/dwg-worker.js +8 -8
- package/dist/wasm/dwg-worker.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -12,6 +12,19 @@ The project provides a clean loader architecture for **DWG**, **DXF**, **DWF**,
|
|
|
12
12
|
|
|
13
13
|
> DWG support uses `@mlightcad/libredwg-web` / LibreDWG WebAssembly in a worker. DXF support uses JavaScript parsing plus a built-in fallback parser. DWF, DWFx and XPS support is powered by `dwf-viewer` 0.6.x, including DWF 6+ ZIP containers, WHIP/W2D 2D sheets, W3D/HSF 3D eModel geometry, DWFx/OPC/XPS pages, adaptive CAD line weights and an optional raster WASM fallback.
|
|
14
14
|
|
|
15
|
+
## What changed in 0.6.6
|
|
16
|
+
|
|
17
|
+
- Added automatic initial fitting based on meaningful geometry inside a valid active DWG viewport, preventing remote coordinate clusters from shrinking the main drawing into a dot.
|
|
18
|
+
- Added `fitMode: 'auto' | 'saved-view' | 'extents'` and `viewer.fit(mode)` for automatic content fitting, exact saved-view restoration or complete drawing extents.
|
|
19
|
+
- Unified bounds and fitting behavior across the retained WebGL renderer and Canvas2D fallback.
|
|
20
|
+
|
|
21
|
+
## What changed in 0.6.5
|
|
22
|
+
|
|
23
|
+
- Preserved active DWG VPORT/header UCS saved views and applied safe planar scene transforms exactly once across geometry, text, inserts, bounds and interaction coordinates.
|
|
24
|
+
- Added DWG LTYPE normalization and Canvas2D/WebGL rendering for dashed, dotted, BYLAYER and BYBLOCK linetypes, including continuous polyline phase and entity/global scale handling.
|
|
25
|
+
- Preserved LibreDWG closed-polyline flags and added guarded fallbacks for tilted views, complex SHX linetype glyphs and pathological microscopic patterns.
|
|
26
|
+
- Added public line-pattern helpers, `getSourceDocument()` and an eight-case DWG normalization regression suite.
|
|
27
|
+
|
|
15
28
|
## What changed in 0.6.4
|
|
16
29
|
|
|
17
30
|
- Added a stable package export for `@flyfish-dev/cad-viewer/wasm/dwg-worker.js`.
|
|
@@ -85,6 +98,7 @@ The project provides a clean loader architecture for **DWG**, **DXF**, **DWF**,
|
|
|
85
98
|
- **Pure frontend viewer component**: `new CadViewer({ container })` or `new CadViewer({ canvas })`.
|
|
86
99
|
- **Loader registry**: DWG, DXF and DWF loaders are independent and replaceable; native-renderable loaders can mount their own optimized viewer.
|
|
87
100
|
- **DWG preview**: browser-local parsing through LibreDWG WebAssembly, executed in a Web Worker by default.
|
|
101
|
+
- **DWG view and linetype fidelity**: active planar saved views, closed polylines, LTYPE tables, BYLAYER/BYBLOCK inheritance, dash/dot patterns and stable pattern scaling.
|
|
88
102
|
- **DXF preview**: JavaScript parser path with fallback support for common ASCII DXF `ENTITIES`.
|
|
89
103
|
- **DWF/DWFx/XPS preview**: powered by `dwf-viewer` for DWF ZIP packages, WebGL-accelerated W2D and XPS/DWFx 2D vectors, W3D/HSF eModel geometry, embedded XPS fonts, adaptive CAD line weights and raster fallback.
|
|
90
104
|
- **CAD color handling**: ACI, BYLAYER, BYBLOCK inheritance, DWG layer colors, true color, fill color, opacity and adaptive contrast.
|
|
@@ -150,6 +164,7 @@ const viewer = new CadViewer({
|
|
|
150
164
|
canvasOptions: {
|
|
151
165
|
background: '#05070d',
|
|
152
166
|
foreground: '#f8fafc',
|
|
167
|
+
fitMode: 'auto',
|
|
153
168
|
contrastMode: 'adaptive',
|
|
154
169
|
minColorContrast: 2.45
|
|
155
170
|
}
|
|
@@ -163,6 +178,8 @@ input.addEventListener('change', async () => {
|
|
|
163
178
|
});
|
|
164
179
|
```
|
|
165
180
|
|
|
181
|
+
`fitMode: 'auto'` is the default. For DWG files with a valid active VPORT, it fits meaningful geometry inside the saved viewport, so remote survey coordinates or auxiliary geometry do not collapse the main sheet into a dot. Use `viewer.fit('saved-view')` to restore the exact saved viewport, or `viewer.fit('extents')` to include every coordinate cluster.
|
|
182
|
+
|
|
166
183
|
|
|
167
184
|
## WebGL rendering and performance model
|
|
168
185
|
|
|
@@ -256,6 +273,7 @@ const viewer = new CadViewer({
|
|
|
256
273
|
canvasOptions: {
|
|
257
274
|
background: '#05070d',
|
|
258
275
|
foreground: '#ffffff',
|
|
276
|
+
fitMode: 'auto', // 'auto' | 'saved-view' | 'extents'
|
|
259
277
|
contrastMode: 'adaptive', // 'adaptive' | 'preserve'
|
|
260
278
|
minColorContrast: 2.45,
|
|
261
279
|
showPageBounds: true,
|
|
@@ -286,11 +304,15 @@ const viewer = new CadViewer({
|
|
|
286
304
|
|
|
287
305
|
await viewer.loadFile(file);
|
|
288
306
|
await viewer.loadBuffer(arrayBuffer, 'drawing.dxf');
|
|
289
|
-
viewer.fit();
|
|
307
|
+
viewer.fit(); // automatic meaningful-content fit
|
|
308
|
+
viewer.fit('saved-view'); // exact active DWG viewport
|
|
309
|
+
viewer.fit('extents'); // all geometry, including remote coordinate clusters
|
|
290
310
|
viewer.zoomIn();
|
|
291
311
|
viewer.zoomOut();
|
|
292
312
|
await viewer.preloadDwg(); // optional DWG worker/WASM warmup
|
|
293
313
|
viewer.setCanvasOptions({ background: '#f7f8fb', foreground: '#111827' });
|
|
314
|
+
viewer.getDocument(); // transformed render-space CadDocument
|
|
315
|
+
viewer.getSourceDocument(); // parser-owned WCS CadDocument
|
|
294
316
|
viewer.clear();
|
|
295
317
|
viewer.destroy();
|
|
296
318
|
```
|
|
@@ -355,7 +377,7 @@ viewer.registerLoader({
|
|
|
355
377
|
|
|
356
378
|
| Format | Loader | Coverage |
|
|
357
379
|
|---|---|---|
|
|
358
|
-
| DWG | `DwgLoader` | Uses LibreDWG WebAssembly.
|
|
380
|
+
| DWG | `DwgLoader` | Uses LibreDWG WebAssembly. Preserves active planar saved views, closed polylines and LTYPE definitions; Canvas2D/WebGL render dash/dot patterns with BYLAYER/BYBLOCK inheritance. Complex SHX glyphs use a marker approximation. |
|
|
359
381
|
| DXF | `DxfLoader` | Uses `dxf-parser` plus fallback parsing. Supports codepage-aware text decoding, CAD text escape normalization, core entities, blocks/inserts, colors/layers, polylines, hatch boundaries and splines as preview polylines. |
|
|
360
382
|
| DWF | `DwfLoader` + `dwf-viewer` | DWF 6+ ZIP packages, WHIP/W2D 2D sheets, W3D/HSF 3D eModel pages, model tree metadata, WebGL rendering and optional WASM fallback. |
|
|
361
383
|
| DWFx / XPS | `DwfLoader` + `dwf-viewer` | DWFx/OPC/XPS pages with WebGL-accelerated vector paths, embedded fonts, text, images, package resources and adaptive overview line weights through the native DWF renderer. |
|
|
@@ -385,6 +407,7 @@ new CadViewer({ canvasOptions: { trueColorByteOrder: 'bgr' } });
|
|
|
385
407
|
npm install
|
|
386
408
|
npm run dev # run the demo
|
|
387
409
|
npm run typecheck # TypeScript validation
|
|
410
|
+
npm test # build the library and run DWG normalization regressions
|
|
388
411
|
npm run build # library + demo
|
|
389
412
|
npm run preview # preview built demo
|
|
390
413
|
```
|
package/README.zh-CN.md
CHANGED
|
@@ -12,6 +12,19 @@
|
|
|
12
12
|
|
|
13
13
|
> DWG 使用 `@mlightcad/libredwg-web` / LibreDWG WebAssembly,并默认运行在 Worker 中。DXF 使用 JavaScript 解析器并带内置 fallback。DWF、DWFx、XPS 由 `dwf-viewer` 0.6.x 驱动,覆盖 DWF 6+ ZIP 包、WHIP/W2D 2D 图纸、W3D/HSF 3D eModel、DWFx/OPC/XPS 页面、自适应 CAD 线宽和可选 raster WASM fallback。
|
|
14
14
|
|
|
15
|
+
## 0.6.6 变更
|
|
16
|
+
|
|
17
|
+
- 新增基于有效 DWG active VPORT 内有意义几何的自动首屏拟合,避免远距离坐标簇把主图压缩成小黑点。
|
|
18
|
+
- 新增 `fitMode: 'auto' | 'saved-view' | 'extents'` 和 `viewer.fit(mode)`,分别用于智能内容拟合、严格恢复保存视口及查看全部图形范围。
|
|
19
|
+
- 统一 retained WebGL renderer 与 Canvas2D fallback 的边界计算和拟合行为。
|
|
20
|
+
|
|
21
|
+
## 0.6.5 变更
|
|
22
|
+
|
|
23
|
+
- 保留 DWG active VPORT/header UCS saved view,并将安全的平面场景变换只应用一次,统一覆盖几何、文字、INSERT、bounds 和交互坐标。
|
|
24
|
+
- 新增 DWG LTYPE 归一化与 Canvas2D/WebGL 线型渲染,支持虚线、点线、BYLAYER、BYBLOCK、多段线连续相位以及实体/全局缩放。
|
|
25
|
+
- 保留 LibreDWG 的闭合多段线标志;对倾斜视图、复杂 SHX 线型 glyph 和异常微小 pattern 提供明确降级策略。
|
|
26
|
+
- 新增公开线型工具、`getSourceDocument()` 和 8 项 DWG normalization 回归测试。
|
|
27
|
+
|
|
15
28
|
## 0.6.4 变更
|
|
16
29
|
|
|
17
30
|
- 新增稳定的 package subpath:`@flyfish-dev/cad-viewer/wasm/dwg-worker.js`。
|
|
@@ -85,6 +98,7 @@
|
|
|
85
98
|
- **纯前端组件**:`new CadViewer({ container })` 或 `new CadViewer({ canvas })`。
|
|
86
99
|
- **正确的 loader 架构**:DWG / DXF / DWF 独立 loader,可替换、可扩展;native-renderable loader 可以挂载自己的优化渲染器。
|
|
87
100
|
- **DWG 预览**:通过 LibreDWG WebAssembly 在浏览器本地解析,默认在 Web Worker 中执行。
|
|
101
|
+
- **DWG 视图与线型保真**:active 平面 saved view、闭合多段线、LTYPE 表、BYLAYER/BYBLOCK 继承、dash/dot pattern 和稳定线型缩放。
|
|
88
102
|
- **DXF 预览**:JavaScript 解析,支持常见 ASCII DXF `ENTITIES`,并带 fallback parser。
|
|
89
103
|
- **DWF/DWFx/XPS 预览**:由 `dwf-viewer` 支持 DWF ZIP 包、WebGL 加速 W2D 与 XPS/DWFx 2D 矢量、W3D/HSF eModel、XPS 嵌入字体、自适应 CAD 线宽和 raster fallback。
|
|
90
104
|
- **CAD 颜色处理**:支持 ACI、BYLAYER、BYBLOCK 继承、DWG 图层颜色、true color、填充色、透明度和自适应对比度。
|
|
@@ -150,6 +164,7 @@ const viewer = new CadViewer({
|
|
|
150
164
|
canvasOptions: {
|
|
151
165
|
background: '#05070d',
|
|
152
166
|
foreground: '#f8fafc',
|
|
167
|
+
fitMode: 'auto',
|
|
153
168
|
contrastMode: 'adaptive',
|
|
154
169
|
minColorContrast: 2.45
|
|
155
170
|
}
|
|
@@ -163,6 +178,8 @@ input.addEventListener('change', async () => {
|
|
|
163
178
|
});
|
|
164
179
|
```
|
|
165
180
|
|
|
181
|
+
`fitMode: 'auto'` 是默认值。DWG 存在有效 active VPORT 时,会拟合保存视口内有意义的几何内容,避免远距离测绘坐标或辅助实体把主图框压成小黑点。使用 `viewer.fit('saved-view')` 可严格恢复保存视口,使用 `viewer.fit('extents')` 可查看全部坐标簇。
|
|
182
|
+
|
|
166
183
|
|
|
167
184
|
## WebGL 渲染与性能策略
|
|
168
185
|
|
|
@@ -256,6 +273,7 @@ const viewer = new CadViewer({
|
|
|
256
273
|
canvasOptions: {
|
|
257
274
|
background: '#05070d',
|
|
258
275
|
foreground: '#ffffff',
|
|
276
|
+
fitMode: 'auto', // 'auto' | 'saved-view' | 'extents'
|
|
259
277
|
contrastMode: 'adaptive', // 'adaptive' | 'preserve'
|
|
260
278
|
minColorContrast: 2.45,
|
|
261
279
|
showPageBounds: true,
|
|
@@ -286,11 +304,15 @@ const viewer = new CadViewer({
|
|
|
286
304
|
|
|
287
305
|
await viewer.loadFile(file);
|
|
288
306
|
await viewer.loadBuffer(arrayBuffer, 'drawing.dxf');
|
|
289
|
-
viewer.fit();
|
|
307
|
+
viewer.fit(); // 自动拟合有意义的首屏内容
|
|
308
|
+
viewer.fit('saved-view'); // 严格恢复 DWG active viewport
|
|
309
|
+
viewer.fit('extents'); // 查看全部几何,包括远距离坐标簇
|
|
290
310
|
viewer.zoomIn();
|
|
291
311
|
viewer.zoomOut();
|
|
292
312
|
await viewer.preloadDwg(); // 可选 DWG worker/WASM 预热
|
|
293
313
|
viewer.setCanvasOptions({ background: '#f7f8fb', foreground: '#111827' });
|
|
314
|
+
viewer.getDocument(); // 已应用 saved view 的渲染场景 CadDocument
|
|
315
|
+
viewer.getSourceDocument(); // parser 保留的原始 WCS CadDocument
|
|
294
316
|
viewer.clear();
|
|
295
317
|
viewer.destroy();
|
|
296
318
|
```
|
|
@@ -355,7 +377,7 @@ viewer.registerLoader({
|
|
|
355
377
|
|
|
356
378
|
| 格式 | Loader | 支持范围 |
|
|
357
379
|
|---|---|---|
|
|
358
|
-
| DWG | `DwgLoader` | 使用 LibreDWG WebAssembly
|
|
380
|
+
| DWG | `DwgLoader` | 使用 LibreDWG WebAssembly。保留 active 平面 saved view、闭合多段线和 LTYPE 定义;Canvas2D/WebGL 支持 dash/dot 与 BYLAYER/BYBLOCK 继承,复杂 SHX glyph 使用 marker 近似。 |
|
|
359
381
|
| DXF | `DxfLoader` | 使用 `dxf-parser` + 内置 fallback。支持 codepage-aware 文本解码、CAD 文本转义归一化、基础实体、block/insert、颜色/图层、多段线、hatch boundary、spline 预览。 |
|
|
360
382
|
| DWF | `DwfLoader` + `dwf-viewer` | DWF 6+ ZIP 包、WHIP/W2D 2D 图纸、W3D/HSF 3D eModel、模型树元数据、WebGL 渲染和可选 WASM fallback。 |
|
|
361
383
|
| DWFx / XPS | `DwfLoader` + `dwf-viewer` | DWFx/OPC/XPS 页面,包含 WebGL 加速 vector path、嵌入字体、文本、图片、包内资源和自适应总览线宽,通过原生 DWF 渲染器展示。 |
|
|
@@ -385,6 +407,7 @@ new CadViewer({ canvasOptions: { trueColorByteOrder: 'bgr' } });
|
|
|
385
407
|
npm install
|
|
386
408
|
npm run dev # 运行 demo
|
|
387
409
|
npm run typecheck # TypeScript 检查
|
|
410
|
+
npm test # 构建 library 并运行 DWG normalization 回归测试
|
|
388
411
|
npm run build # 构建 library + demo
|
|
389
412
|
npm run preview # 预览构建后的 demo
|
|
390
413
|
```
|