@linkiez/dxf-renew 7.0.0 → 7.2.0
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/.eslintrc.json +1 -16
- package/.github/instructions/code-patterns.instructions.md +1 -1
- package/.github/instructions/exdxf.instruction.md +161 -0
- package/.github/instructions/tdd.instructions.md +271 -0
- package/.yarn/install-state.gz +0 -0
- package/ARCHITECTURE.md +163 -0
- package/CHANGELOG.md +39 -0
- package/CONTRIBUTING.md +16 -14
- package/README.md +113 -16
- package/{PLAN.md → ROADMAP.md} +244 -102
- package/dist/dxf.js +2212 -454
- package/docs/EZDXF_REFERENCE_SITEMAP.md +55 -0
- package/docs/FIXTURE_VALIDATION_EZDXF.md +62 -0
- package/lib/Helper.cjs +6 -2
- package/lib/Helper.cjs.map +3 -3
- package/lib/Helper.js +6 -2
- package/lib/Helper.js.map +2 -2
- package/lib/denormalise.cjs +131 -91
- package/lib/denormalise.cjs.map +2 -2
- package/lib/denormalise.js +131 -91
- package/lib/denormalise.js.map +2 -2
- package/lib/dimensionToSVG.cjs +318 -53
- package/lib/dimensionToSVG.cjs.map +3 -3
- package/lib/dimensionToSVG.js +316 -52
- package/lib/dimensionToSVG.js.map +2 -2
- package/lib/entityToPolyline.cjs +95 -0
- package/lib/entityToPolyline.cjs.map +3 -3
- package/lib/entityToPolyline.js +95 -0
- package/lib/entityToPolyline.js.map +2 -2
- package/lib/handlers/entities.cjs +111 -27
- package/lib/handlers/entities.cjs.map +3 -3
- package/lib/handlers/entities.js +111 -27
- package/lib/handlers/entities.js.map +3 -3
- package/lib/handlers/entity/dgnUnderlay.cjs +106 -0
- package/lib/handlers/entity/dgnUnderlay.cjs.map +7 -0
- package/lib/handlers/entity/dgnUnderlay.js +71 -0
- package/lib/handlers/entity/dgnUnderlay.js.map +7 -0
- package/lib/handlers/entity/dimension.cjs +24 -0
- package/lib/handlers/entity/dimension.cjs.map +2 -2
- package/lib/handlers/entity/dimension.js +24 -0
- package/lib/handlers/entity/dimension.js.map +2 -2
- package/lib/handlers/entity/dwfUnderlay.cjs +106 -0
- package/lib/handlers/entity/dwfUnderlay.cjs.map +7 -0
- package/lib/handlers/entity/dwfUnderlay.js +71 -0
- package/lib/handlers/entity/dwfUnderlay.js.map +7 -0
- package/lib/handlers/entity/image.cjs +123 -0
- package/lib/handlers/entity/image.cjs.map +7 -0
- package/lib/handlers/entity/image.js +88 -0
- package/lib/handlers/entity/image.js.map +7 -0
- package/lib/handlers/entity/leader.cjs +148 -0
- package/lib/handlers/entity/leader.cjs.map +7 -0
- package/lib/handlers/entity/leader.js +113 -0
- package/lib/handlers/entity/leader.js.map +7 -0
- package/lib/handlers/entity/mleader.cjs +69 -0
- package/lib/handlers/entity/mleader.cjs.map +7 -0
- package/lib/handlers/entity/mleader.js +34 -0
- package/lib/handlers/entity/mleader.js.map +7 -0
- package/lib/handlers/entity/mline.cjs +91 -0
- package/lib/handlers/entity/mline.cjs.map +7 -0
- package/lib/handlers/entity/mline.js +56 -0
- package/lib/handlers/entity/mline.js.map +7 -0
- package/lib/handlers/entity/oleframe.cjs +98 -0
- package/lib/handlers/entity/oleframe.cjs.map +7 -0
- package/lib/handlers/entity/oleframe.js +63 -0
- package/lib/handlers/entity/oleframe.js.map +7 -0
- package/lib/handlers/entity/pdfUnderlay.cjs +106 -0
- package/lib/handlers/entity/pdfUnderlay.cjs.map +7 -0
- package/lib/handlers/entity/pdfUnderlay.js +71 -0
- package/lib/handlers/entity/pdfUnderlay.js.map +7 -0
- package/lib/handlers/entity/ray.cjs +81 -0
- package/lib/handlers/entity/ray.cjs.map +7 -0
- package/lib/handlers/entity/ray.js +46 -0
- package/lib/handlers/entity/ray.js.map +7 -0
- package/lib/handlers/entity/region.cjs +67 -0
- package/lib/handlers/entity/region.cjs.map +7 -0
- package/lib/handlers/entity/region.js +32 -0
- package/lib/handlers/entity/region.js.map +7 -0
- package/lib/handlers/entity/shape.cjs +95 -0
- package/lib/handlers/entity/shape.cjs.map +7 -0
- package/lib/handlers/entity/shape.js +60 -0
- package/lib/handlers/entity/shape.js.map +7 -0
- package/lib/handlers/entity/table.cjs +71 -0
- package/lib/handlers/entity/table.cjs.map +7 -0
- package/lib/handlers/entity/table.js +36 -0
- package/lib/handlers/entity/table.js.map +7 -0
- package/lib/handlers/entity/tolerance.cjs +90 -0
- package/lib/handlers/entity/tolerance.cjs.map +7 -0
- package/lib/handlers/entity/tolerance.js +55 -0
- package/lib/handlers/entity/tolerance.js.map +7 -0
- package/lib/handlers/entity/trace.cjs +101 -0
- package/lib/handlers/entity/trace.cjs.map +7 -0
- package/lib/handlers/entity/trace.js +66 -0
- package/lib/handlers/entity/trace.js.map +7 -0
- package/lib/handlers/entity/wipeout.cjs +122 -0
- package/lib/handlers/entity/wipeout.cjs.map +7 -0
- package/lib/handlers/entity/wipeout.js +87 -0
- package/lib/handlers/entity/wipeout.js.map +7 -0
- package/lib/handlers/entity/xline.cjs +81 -0
- package/lib/handlers/entity/xline.cjs.map +7 -0
- package/lib/handlers/entity/xline.js +46 -0
- package/lib/handlers/entity/xline.js.map +7 -0
- package/lib/handlers/objects.cjs +299 -136
- package/lib/handlers/objects.cjs.map +2 -2
- package/lib/handlers/objects.js +299 -136
- package/lib/handlers/objects.js.map +2 -2
- package/lib/handlers/tables.cjs +96 -17
- package/lib/handlers/tables.cjs.map +2 -2
- package/lib/handlers/tables.js +96 -17
- package/lib/handlers/tables.js.map +2 -2
- package/lib/index.cjs +5 -2
- package/lib/index.cjs.map +3 -3
- package/lib/index.js +18 -16
- package/lib/index.js.map +3 -3
- package/lib/toJson.cjs +29 -0
- package/lib/toJson.cjs.map +7 -0
- package/lib/toJson.js +9 -0
- package/lib/toJson.js.map +7 -0
- package/lib/toSVG.cjs +105 -11
- package/lib/toSVG.cjs.map +3 -3
- package/lib/toSVG.js +106 -12
- package/lib/toSVG.js.map +2 -2
- package/lib/types/dimension-entity.cjs.map +1 -1
- package/lib/types/entity.cjs.map +1 -1
- package/lib/types/helper.cjs.map +1 -1
- package/lib/types/image-entity.cjs +17 -0
- package/lib/types/image-entity.cjs.map +7 -0
- package/lib/types/image-entity.js +1 -0
- package/lib/types/image-entity.js.map +7 -0
- package/lib/types/index.cjs +28 -0
- package/lib/types/index.cjs.map +2 -2
- package/lib/types/index.js +14 -0
- package/lib/types/index.js.map +2 -2
- package/lib/types/leader-entity.cjs +17 -0
- package/lib/types/leader-entity.cjs.map +7 -0
- package/lib/types/leader-entity.js +1 -0
- package/lib/types/leader-entity.js.map +7 -0
- package/lib/types/mleader-entity.cjs +17 -0
- package/lib/types/mleader-entity.cjs.map +7 -0
- package/lib/types/mleader-entity.js +1 -0
- package/lib/types/mleader-entity.js.map +7 -0
- package/lib/types/mline-entity.cjs +17 -0
- package/lib/types/mline-entity.cjs.map +7 -0
- package/lib/types/mline-entity.js +1 -0
- package/lib/types/mline-entity.js.map +7 -0
- package/lib/types/oleframe-entity.cjs +17 -0
- package/lib/types/oleframe-entity.cjs.map +7 -0
- package/lib/types/oleframe-entity.js +1 -0
- package/lib/types/oleframe-entity.js.map +7 -0
- package/lib/types/options.cjs.map +1 -1
- package/lib/types/ray-entity.cjs +17 -0
- package/lib/types/ray-entity.cjs.map +7 -0
- package/lib/types/ray-entity.js +1 -0
- package/lib/types/ray-entity.js.map +7 -0
- package/lib/types/region-entity.cjs +17 -0
- package/lib/types/region-entity.cjs.map +7 -0
- package/lib/types/region-entity.js +1 -0
- package/lib/types/region-entity.js.map +7 -0
- package/lib/types/shape-entity.cjs +17 -0
- package/lib/types/shape-entity.cjs.map +7 -0
- package/lib/types/shape-entity.js +1 -0
- package/lib/types/shape-entity.js.map +7 -0
- package/lib/types/table-entity.cjs +17 -0
- package/lib/types/table-entity.cjs.map +7 -0
- package/lib/types/table-entity.js +1 -0
- package/lib/types/table-entity.js.map +7 -0
- package/lib/types/tables.cjs.map +1 -1
- package/lib/types/tolerance-entity.cjs +17 -0
- package/lib/types/tolerance-entity.cjs.map +7 -0
- package/lib/types/tolerance-entity.js +1 -0
- package/lib/types/tolerance-entity.js.map +7 -0
- package/lib/types/trace-entity.cjs +17 -0
- package/lib/types/trace-entity.cjs.map +7 -0
- package/lib/types/trace-entity.js +1 -0
- package/lib/types/trace-entity.js.map +7 -0
- package/lib/types/underlay-entity.cjs +17 -0
- package/lib/types/underlay-entity.cjs.map +7 -0
- package/lib/types/underlay-entity.js +1 -0
- package/lib/types/underlay-entity.js.map +7 -0
- package/lib/types/wipeout-entity.cjs +17 -0
- package/lib/types/wipeout-entity.cjs.map +7 -0
- package/lib/types/wipeout-entity.js +1 -0
- package/lib/types/wipeout-entity.js.map +7 -0
- package/lib/types/xline-entity.cjs +17 -0
- package/lib/types/xline-entity.cjs.map +7 -0
- package/lib/types/xline-entity.js +1 -0
- package/lib/types/xline-entity.js.map +7 -0
- package/lib/util/escapeXmlText.cjs +27 -0
- package/lib/util/escapeXmlText.cjs.map +7 -0
- package/lib/util/escapeXmlText.js +7 -0
- package/lib/util/escapeXmlText.js.map +7 -0
- package/package.json +9 -18
- package/playwright.config.cjs +20 -0
- package/src/Helper.ts +8 -3
- package/src/denormalise.ts +182 -116
- package/src/dimensionToSVG.ts +466 -54
- package/src/entityToPolyline.ts +124 -2
- package/src/handlers/entities.ts +129 -34
- package/src/handlers/entity/dgnUnderlay.ts +94 -0
- package/src/handlers/entity/dimension.ts +27 -1
- package/src/handlers/entity/dwfUnderlay.ts +94 -0
- package/src/handlers/entity/image.ts +118 -0
- package/src/handlers/entity/leader.ts +153 -0
- package/src/handlers/entity/mleader.ts +46 -0
- package/src/handlers/entity/mline.ts +74 -0
- package/src/handlers/entity/oleframe.ts +62 -0
- package/src/handlers/entity/pdfUnderlay.ts +94 -0
- package/src/handlers/entity/ray.ts +52 -0
- package/src/handlers/entity/region.ts +42 -0
- package/src/handlers/entity/shape.ts +73 -0
- package/src/handlers/entity/table.ts +49 -0
- package/src/handlers/entity/tolerance.ts +75 -0
- package/src/handlers/entity/trace.ts +72 -0
- package/src/handlers/entity/wipeout.ts +114 -0
- package/src/handlers/entity/xline.ts +52 -0
- package/src/handlers/objects.ts +379 -139
- package/src/handlers/tables.ts +134 -21
- package/src/index.ts +9 -18
- package/src/toJson.ts +8 -0
- package/src/toSVG.ts +143 -10
- package/src/types/dimension-entity.ts +11 -0
- package/src/types/entity.ts +30 -0
- package/src/types/helper.ts +2 -1
- package/src/types/image-entity.ts +35 -0
- package/src/types/index.ts +14 -0
- package/src/types/leader-entity.ts +40 -0
- package/src/types/mleader-entity.ts +8 -0
- package/src/types/mline-entity.ts +12 -0
- package/src/types/oleframe-entity.ts +40 -0
- package/src/types/options.ts +48 -0
- package/src/types/ray-entity.ts +12 -0
- package/src/types/region-entity.ts +11 -0
- package/src/types/shape-entity.ts +19 -0
- package/src/types/table-entity.ts +14 -0
- package/src/types/tables.ts +160 -0
- package/src/types/tolerance-entity.ts +20 -0
- package/src/types/trace-entity.ts +14 -0
- package/src/types/underlay-entity.ts +35 -0
- package/src/types/wipeout-entity.ts +20 -0
- package/src/types/xline-entity.ts +12 -0
- package/src/util/escapeXmlText.ts +10 -0
- package/tools/browser_test_server.cjs +87 -0
- package/tools/ezdxf_generate_dimensions_all_types.py +246 -0
- package/tools/ezdxf_generate_dimensions_angular_3p.py +59 -0
- package/tools/ezdxf_generate_dimensions_large_scale.py +87 -0
- package/tools/ezdxf_regenerate_problem_fixtures.py +184 -0
- package/tools/ezdxf_validate_fixtures.py +165 -0
- package/docs/DIMENSION_SUMMARY.md +0 -248
- package/docs/DIMENSION_SUMMARY.pt-BR.md +0 -248
- package/docs/IMPLEMENTED-2D-ENTITIES.md +0 -54
- package/docs/IMPLEMENTED-2D-ENTITIES.pt-BR.md +0 -54
- package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.md +0 -241
- package/docs/TEXT-MTEXT-DIMENSION-SUPPORT.pt-BR.md +0 -169
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# ezdxf Reference Sitemap (Stable)
|
|
2
|
+
|
|
3
|
+
This project uses the official **ezdxf** documentation as the primary, practical reference when implementing DXF parsing behavior.
|
|
4
|
+
|
|
5
|
+
- Reference home: <https://ezdxf.readthedocs.io/en/stable/reference.html>
|
|
6
|
+
|
|
7
|
+
## What to use for what
|
|
8
|
+
|
|
9
|
+
- **High-level DXF structure (sections/tables/blocks/entities/objects):**
|
|
10
|
+
- Sections index: <https://ezdxf.readthedocs.io/en/stable/sections/index.html>
|
|
11
|
+
- Tables index: <https://ezdxf.readthedocs.io/en/stable/tables/index.html>
|
|
12
|
+
- Blocks index: <https://ezdxf.readthedocs.io/en/stable/blocks/index.html>
|
|
13
|
+
|
|
14
|
+
- **Entity-specific group codes and attributes (our roadmap A.1):**
|
|
15
|
+
- DXF Entities index: <https://ezdxf.readthedocs.io/en/stable/dxfentities/index.html>
|
|
16
|
+
|
|
17
|
+
Common 2D targets:
|
|
18
|
+
- TEXT: <https://ezdxf.readthedocs.io/en/stable/dxfentities/text.html>
|
|
19
|
+
- MTEXT: <https://ezdxf.readthedocs.io/en/stable/dxfentities/mtext.html>
|
|
20
|
+
- DIMENSION: <https://ezdxf.readthedocs.io/en/stable/dxfentities/dimension.html>
|
|
21
|
+
- LEADER: <https://ezdxf.readthedocs.io/en/stable/dxfentities/leader.html>
|
|
22
|
+
- MLEADER: <https://ezdxf.readthedocs.io/en/stable/dxfentities/mleader.html>
|
|
23
|
+
- IMAGE: <https://ezdxf.readthedocs.io/en/stable/dxfentities/image.html>
|
|
24
|
+
- UNDERLAY: <https://ezdxf.readthedocs.io/en/stable/dxfentities/underlay.html>
|
|
25
|
+
- WIPEOUT: <https://ezdxf.readthedocs.io/en/stable/dxfentities/wipeout.html>
|
|
26
|
+
- RAY: <https://ezdxf.readthedocs.io/en/stable/dxfentities/ray.html>
|
|
27
|
+
- XLINE: <https://ezdxf.readthedocs.io/en/stable/dxfentities/xline.html>
|
|
28
|
+
- TRACE: <https://ezdxf.readthedocs.io/en/stable/dxfentities/trace.html>
|
|
29
|
+
- REGION: <https://ezdxf.readthedocs.io/en/stable/dxfentities/region.html>
|
|
30
|
+
- SHAPE: <https://ezdxf.readthedocs.io/en/stable/dxfentities/shape.html>
|
|
31
|
+
- MLINE: <https://ezdxf.readthedocs.io/en/stable/dxfentities/mline.html>
|
|
32
|
+
|
|
33
|
+
- **Objects (our roadmap A.3):**
|
|
34
|
+
- DXF Objects index: <https://ezdxf.readthedocs.io/en/stable/dxfobjects/index.html>
|
|
35
|
+
|
|
36
|
+
Common reference-based objects:
|
|
37
|
+
- DICTIONARY: <https://ezdxf.readthedocs.io/en/stable/dxfobjects/dictionary.html>
|
|
38
|
+
- XRECORD: <https://ezdxf.readthedocs.io/en/stable/dxfobjects/xrecord.html>
|
|
39
|
+
- ImageDef / ImageDefReactor: <https://ezdxf.readthedocs.io/en/stable/dxfobjects/imagedef.html>
|
|
40
|
+
- UnderlayDefinition: <https://ezdxf.readthedocs.io/en/stable/dxfobjects/underlaydef.html>
|
|
41
|
+
- MLeaderStyle: <https://ezdxf.readthedocs.io/en/stable/dxfobjects/mleaderstyle.html>
|
|
42
|
+
|
|
43
|
+
- **Tables (our roadmap A.2):**
|
|
44
|
+
- Layer: <https://ezdxf.readthedocs.io/en/stable/tables/layer_table_entry.html>
|
|
45
|
+
- DimStyle: <https://ezdxf.readthedocs.io/en/stable/tables/dimstyle_table_entry.html>
|
|
46
|
+
- Style: <https://ezdxf.readthedocs.io/en/stable/tables/style_table_entry.html>
|
|
47
|
+
- Linetype: <https://ezdxf.readthedocs.io/en/stable/tables/linetype_table_entry.html>
|
|
48
|
+
- View: <https://ezdxf.readthedocs.io/en/stable/tables/view_table_entry.html>
|
|
49
|
+
- AppID: <https://ezdxf.readthedocs.io/en/stable/tables/appid_table_entry.html>
|
|
50
|
+
- UCS: <https://ezdxf.readthedocs.io/en/stable/tables/ucs_table_entry.html>
|
|
51
|
+
- BlockRecord: <https://ezdxf.readthedocs.io/en/stable/tables/blockrecord_table_entry.html>
|
|
52
|
+
|
|
53
|
+
## Notes
|
|
54
|
+
|
|
55
|
+
- ezdxf tracks DXF internals closely, but it is still an implementation. When behavior is ambiguous, treat Autodesk’s DXF reference as the authoritative source.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# DXF Fixture Validation (ezdxf)
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Ensure every DXF fixture under `test/resources/` is:
|
|
6
|
+
|
|
7
|
+
- Readable by **ezdxf** (independent parser), and
|
|
8
|
+
- Free of audit fatal errors (and optionally free of audit errors).
|
|
9
|
+
|
|
10
|
+
This provides an external sanity check so our test fixtures stay “real DXF” and not just “files our parser happens to accept”.
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
The project includes a small validator:
|
|
15
|
+
|
|
16
|
+
- `tools/ezdxf_validate_fixtures.py`
|
|
17
|
+
|
|
18
|
+
It:
|
|
19
|
+
|
|
20
|
+
1. Enumerates `test/resources/*.dxf`
|
|
21
|
+
2. Loads each file via `ezdxf.readfile(...)`
|
|
22
|
+
3. Extracts `$ACADVER`
|
|
23
|
+
4. Counts entity types in modelspace
|
|
24
|
+
5. Runs `doc.audit()` and reports counts
|
|
25
|
+
|
|
26
|
+
## Run Locally
|
|
27
|
+
|
|
28
|
+
- `yarn validate:fixtures`
|
|
29
|
+
|
|
30
|
+
Notes:
|
|
31
|
+
|
|
32
|
+
- If `./.venv-ezdxf/bin/python` exists, the script uses it.
|
|
33
|
+
- Otherwise it falls back to `python3`.
|
|
34
|
+
|
|
35
|
+
## Failure Policy
|
|
36
|
+
|
|
37
|
+
By default (current yarn script):
|
|
38
|
+
|
|
39
|
+
- Fails if any fixture cannot be read by ezdxf
|
|
40
|
+
- Fails if audit reports fatal errors or errors
|
|
41
|
+
|
|
42
|
+
If you need a “report-only” run, execute the script directly:
|
|
43
|
+
|
|
44
|
+
- `./.venv-ezdxf/bin/python tools/ezdxf_validate_fixtures.py`
|
|
45
|
+
|
|
46
|
+
## Using the Report
|
|
47
|
+
|
|
48
|
+
Use the printed per-file summary to:
|
|
49
|
+
|
|
50
|
+
- Verify a new fixture’s `$ACADVER` is what you expect
|
|
51
|
+
- Confirm an entity appears in the file (entity type counts)
|
|
52
|
+
- Catch malformed DXF output from generators
|
|
53
|
+
|
|
54
|
+
## Adding/Updating Fixtures
|
|
55
|
+
|
|
56
|
+
When adding a new fixture:
|
|
57
|
+
|
|
58
|
+
1. Add the DXF file under `test/resources/`.
|
|
59
|
+
2. Run `yarn validate:fixtures`.
|
|
60
|
+
3. Add unit tests (parsing) and integration tests (final SVG).
|
|
61
|
+
|
|
62
|
+
See also: the entity workflow checklist in `ROADMAP.md` under “Documentation (Consolidated) → Entity SVG Roadmap”.
|
package/lib/Helper.cjs
CHANGED
|
@@ -34,6 +34,7 @@ module.exports = __toCommonJS(Helper_exports);
|
|
|
34
34
|
var import_denormalise = __toESM(require("./denormalise"), 1);
|
|
35
35
|
var import_groupEntitiesByLayer = __toESM(require("./groupEntitiesByLayer"), 1);
|
|
36
36
|
var import_parseString = __toESM(require("./parseString"), 1);
|
|
37
|
+
var import_toJson = __toESM(require("./toJson"), 1);
|
|
37
38
|
var import_toPolylines = __toESM(require("./toPolylines"), 1);
|
|
38
39
|
var import_toSVG = __toESM(require("./toSVG"), 1);
|
|
39
40
|
var import_logger = __toESM(require("./util/logger"), 1);
|
|
@@ -79,8 +80,11 @@ class Helper {
|
|
|
79
80
|
}
|
|
80
81
|
return this._groups;
|
|
81
82
|
}
|
|
82
|
-
toSVG() {
|
|
83
|
-
return (0, import_toSVG.default)(this.parsed);
|
|
83
|
+
toSVG(options) {
|
|
84
|
+
return (0, import_toSVG.default)(this.parsed, options);
|
|
85
|
+
}
|
|
86
|
+
toJson(options) {
|
|
87
|
+
return (0, import_toJson.default)(this.parsed, options);
|
|
84
88
|
}
|
|
85
89
|
toPolylines() {
|
|
86
90
|
return (0, import_toPolylines.default)(this.parsed);
|
package/lib/Helper.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/Helper.ts"],
|
|
4
|
-
"sourcesContent": ["import denormalise from './denormalise'\nimport groupEntitiesByLayer from './groupEntitiesByLayer'\nimport parseString from './parseString'\nimport toPolylines from './toPolylines'\nimport toSVG from './toSVG'\nimport logger from './util/logger'\n\nimport type { Entity, LayerGroups, ParsedDXF } from './types'\n\nexport default class Helper {\n private readonly _contents: string\n private _parsed: ParsedDXF | null\n private _denormalised: Entity[] | null\n private _groups: LayerGroups | null\n\n constructor(contents: string) {\n if (typeof contents !== 'string') {\n throw new TypeError('Helper constructor expects a DXF string')\n }\n this._contents = contents\n this._parsed = null\n this._denormalised = null\n this._groups = null\n }\n\n parse(): ParsedDXF {\n this._parsed = parseString(this._contents)\n logger.info('parsed:', this.parsed)\n return this._parsed\n }\n\n get parsed(): ParsedDXF {\n if (this._parsed === null) {\n this.parse()\n }\n return this._parsed as ParsedDXF\n }\n\n denormalise(): Entity[] {\n this._denormalised = denormalise(this.parsed)\n logger.info('denormalised:', this._denormalised)\n return this._denormalised\n }\n\n get denormalised(): Entity[] {\n if (!this._denormalised) {\n this.denormalise()\n }\n return this._denormalised as Entity[]\n }\n\n group(): LayerGroups {\n this._groups = groupEntitiesByLayer(this.denormalised)\n return this._groups\n }\n\n get groups(): LayerGroups {\n if (!this._groups) {\n this.group()\n }\n return this._groups as LayerGroups\n }\n\n toSVG(): string {\n return toSVG(this.parsed)\n }\n\n toPolylines(): ReturnType<typeof toPolylines> {\n return toPolylines(this.parsed)\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAwB;AACxB,kCAAiC;AACjC,yBAAwB;AACxB,yBAAwB;AACxB,mBAAkB;AAClB,oBAAmB;AAInB,MAAO,OAAqB;AAAA,EAM1B,YAAY,UAAkB;AAC5B,QAAI,OAAO,aAAa,UAAU;AAChC,YAAM,IAAI,UAAU,yCAAyC;AAAA,IAC/D;AACA,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,gBAAgB;AACrB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,QAAmB;AACjB,SAAK,cAAU,mBAAAA,SAAY,KAAK,SAAS;AACzC,kBAAAC,QAAO,KAAK,WAAW,KAAK,MAAM;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAoB;AACtB,QAAI,KAAK,YAAY,MAAM;AACzB,WAAK,MAAM;AAAA,IACb;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,cAAwB;AACtB,SAAK,oBAAgB,mBAAAC,SAAY,KAAK,MAAM;AAC5C,kBAAAD,QAAO,KAAK,iBAAiB,KAAK,aAAa;AAC/C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAyB;AAC3B,QAAI,CAAC,KAAK,eAAe;AACvB,WAAK,YAAY;AAAA,IACnB;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAqB;AACnB,SAAK,cAAU,4BAAAE,SAAqB,KAAK,YAAY;AACrD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAsB;AACxB,QAAI,CAAC,KAAK,SAAS;AACjB,WAAK,MAAM;AAAA,IACb;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,
|
|
6
|
-
"names": ["parseString", "logger", "denormalise", "groupEntitiesByLayer", "toSVG", "toPolylines"]
|
|
4
|
+
"sourcesContent": ["import denormalise from './denormalise'\nimport groupEntitiesByLayer from './groupEntitiesByLayer'\nimport parseString from './parseString'\nimport toJson from './toJson'\nimport toPolylines from './toPolylines'\nimport toSVG from './toSVG'\nimport logger from './util/logger'\n\nimport type { Entity, LayerGroups, ParsedDXF, ToJsonOptions, ToSVGOptions } from './types'\n\nexport default class Helper {\n private readonly _contents: string\n private _parsed: ParsedDXF | null\n private _denormalised: Entity[] | null\n private _groups: LayerGroups | null\n\n constructor(contents: string) {\n if (typeof contents !== 'string') {\n throw new TypeError('Helper constructor expects a DXF string')\n }\n this._contents = contents\n this._parsed = null\n this._denormalised = null\n this._groups = null\n }\n\n parse(): ParsedDXF {\n this._parsed = parseString(this._contents)\n logger.info('parsed:', this.parsed)\n return this._parsed\n }\n\n get parsed(): ParsedDXF {\n if (this._parsed === null) {\n this.parse()\n }\n return this._parsed as ParsedDXF\n }\n\n denormalise(): Entity[] {\n this._denormalised = denormalise(this.parsed)\n logger.info('denormalised:', this._denormalised)\n return this._denormalised\n }\n\n get denormalised(): Entity[] {\n if (!this._denormalised) {\n this.denormalise()\n }\n return this._denormalised as Entity[]\n }\n\n group(): LayerGroups {\n this._groups = groupEntitiesByLayer(this.denormalised)\n return this._groups\n }\n\n get groups(): LayerGroups {\n if (!this._groups) {\n this.group()\n }\n return this._groups as LayerGroups\n }\n\n toSVG(options?: ToSVGOptions): string {\n return toSVG(this.parsed, options)\n }\n\n toJson(options?: ToJsonOptions): string {\n return toJson(this.parsed, options)\n }\n\n toPolylines(): ReturnType<typeof toPolylines> {\n return toPolylines(this.parsed)\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAwB;AACxB,kCAAiC;AACjC,yBAAwB;AACxB,oBAAmB;AACnB,yBAAwB;AACxB,mBAAkB;AAClB,oBAAmB;AAInB,MAAO,OAAqB;AAAA,EAM1B,YAAY,UAAkB;AAC5B,QAAI,OAAO,aAAa,UAAU;AAChC,YAAM,IAAI,UAAU,yCAAyC;AAAA,IAC/D;AACA,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,gBAAgB;AACrB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,QAAmB;AACjB,SAAK,cAAU,mBAAAA,SAAY,KAAK,SAAS;AACzC,kBAAAC,QAAO,KAAK,WAAW,KAAK,MAAM;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAoB;AACtB,QAAI,KAAK,YAAY,MAAM;AACzB,WAAK,MAAM;AAAA,IACb;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,cAAwB;AACtB,SAAK,oBAAgB,mBAAAC,SAAY,KAAK,MAAM;AAC5C,kBAAAD,QAAO,KAAK,iBAAiB,KAAK,aAAa;AAC/C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAyB;AAC3B,QAAI,CAAC,KAAK,eAAe;AACvB,WAAK,YAAY;AAAA,IACnB;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAqB;AACnB,SAAK,cAAU,4BAAAE,SAAqB,KAAK,YAAY;AACrD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAsB;AACxB,QAAI,CAAC,KAAK,SAAS;AACjB,WAAK,MAAM;AAAA,IACb;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,SAAgC;AACpC,eAAO,aAAAC,SAAM,KAAK,QAAQ,OAAO;AAAA,EACnC;AAAA,EAEA,OAAO,SAAiC;AACtC,eAAO,cAAAC,SAAO,KAAK,QAAQ,OAAO;AAAA,EACpC;AAAA,EAEA,cAA8C;AAC5C,eAAO,mBAAAC,SAAY,KAAK,MAAM;AAAA,EAChC;AACF;",
|
|
6
|
+
"names": ["parseString", "logger", "denormalise", "groupEntitiesByLayer", "toSVG", "toJson", "toPolylines"]
|
|
7
7
|
}
|
package/lib/Helper.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import denormalise from "./denormalise";
|
|
2
2
|
import groupEntitiesByLayer from "./groupEntitiesByLayer";
|
|
3
3
|
import parseString from "./parseString";
|
|
4
|
+
import toJson from "./toJson";
|
|
4
5
|
import toPolylines from "./toPolylines";
|
|
5
6
|
import toSVG from "./toSVG";
|
|
6
7
|
import logger from "./util/logger";
|
|
@@ -46,8 +47,11 @@ class Helper {
|
|
|
46
47
|
}
|
|
47
48
|
return this._groups;
|
|
48
49
|
}
|
|
49
|
-
toSVG() {
|
|
50
|
-
return toSVG(this.parsed);
|
|
50
|
+
toSVG(options) {
|
|
51
|
+
return toSVG(this.parsed, options);
|
|
52
|
+
}
|
|
53
|
+
toJson(options) {
|
|
54
|
+
return toJson(this.parsed, options);
|
|
51
55
|
}
|
|
52
56
|
toPolylines() {
|
|
53
57
|
return toPolylines(this.parsed);
|
package/lib/Helper.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/Helper.ts"],
|
|
4
|
-
"sourcesContent": ["import denormalise from './denormalise'\nimport groupEntitiesByLayer from './groupEntitiesByLayer'\nimport parseString from './parseString'\nimport toPolylines from './toPolylines'\nimport toSVG from './toSVG'\nimport logger from './util/logger'\n\nimport type { Entity, LayerGroups, ParsedDXF } from './types'\n\nexport default class Helper {\n private readonly _contents: string\n private _parsed: ParsedDXF | null\n private _denormalised: Entity[] | null\n private _groups: LayerGroups | null\n\n constructor(contents: string) {\n if (typeof contents !== 'string') {\n throw new TypeError('Helper constructor expects a DXF string')\n }\n this._contents = contents\n this._parsed = null\n this._denormalised = null\n this._groups = null\n }\n\n parse(): ParsedDXF {\n this._parsed = parseString(this._contents)\n logger.info('parsed:', this.parsed)\n return this._parsed\n }\n\n get parsed(): ParsedDXF {\n if (this._parsed === null) {\n this.parse()\n }\n return this._parsed as ParsedDXF\n }\n\n denormalise(): Entity[] {\n this._denormalised = denormalise(this.parsed)\n logger.info('denormalised:', this._denormalised)\n return this._denormalised\n }\n\n get denormalised(): Entity[] {\n if (!this._denormalised) {\n this.denormalise()\n }\n return this._denormalised as Entity[]\n }\n\n group(): LayerGroups {\n this._groups = groupEntitiesByLayer(this.denormalised)\n return this._groups\n }\n\n get groups(): LayerGroups {\n if (!this._groups) {\n this.group()\n }\n return this._groups as LayerGroups\n }\n\n toSVG(): string {\n return toSVG(this.parsed)\n }\n\n toPolylines(): ReturnType<typeof toPolylines> {\n return toPolylines(this.parsed)\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAAO,iBAAiB;AACxB,OAAO,0BAA0B;AACjC,OAAO,iBAAiB;AACxB,OAAO,iBAAiB;AACxB,OAAO,WAAW;AAClB,OAAO,YAAY;AAInB,MAAO,OAAqB;AAAA,EAM1B,YAAY,UAAkB;AAC5B,QAAI,OAAO,aAAa,UAAU;AAChC,YAAM,IAAI,UAAU,yCAAyC;AAAA,IAC/D;AACA,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,gBAAgB;AACrB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,QAAmB;AACjB,SAAK,UAAU,YAAY,KAAK,SAAS;AACzC,WAAO,KAAK,WAAW,KAAK,MAAM;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAoB;AACtB,QAAI,KAAK,YAAY,MAAM;AACzB,WAAK,MAAM;AAAA,IACb;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,cAAwB;AACtB,SAAK,gBAAgB,YAAY,KAAK,MAAM;AAC5C,WAAO,KAAK,iBAAiB,KAAK,aAAa;AAC/C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAyB;AAC3B,QAAI,CAAC,KAAK,eAAe;AACvB,WAAK,YAAY;AAAA,IACnB;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAqB;AACnB,SAAK,UAAU,qBAAqB,KAAK,YAAY;AACrD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAsB;AACxB,QAAI,CAAC,KAAK,SAAS;AACjB,WAAK,MAAM;AAAA,IACb;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,
|
|
4
|
+
"sourcesContent": ["import denormalise from './denormalise'\nimport groupEntitiesByLayer from './groupEntitiesByLayer'\nimport parseString from './parseString'\nimport toJson from './toJson'\nimport toPolylines from './toPolylines'\nimport toSVG from './toSVG'\nimport logger from './util/logger'\n\nimport type { Entity, LayerGroups, ParsedDXF, ToJsonOptions, ToSVGOptions } from './types'\n\nexport default class Helper {\n private readonly _contents: string\n private _parsed: ParsedDXF | null\n private _denormalised: Entity[] | null\n private _groups: LayerGroups | null\n\n constructor(contents: string) {\n if (typeof contents !== 'string') {\n throw new TypeError('Helper constructor expects a DXF string')\n }\n this._contents = contents\n this._parsed = null\n this._denormalised = null\n this._groups = null\n }\n\n parse(): ParsedDXF {\n this._parsed = parseString(this._contents)\n logger.info('parsed:', this.parsed)\n return this._parsed\n }\n\n get parsed(): ParsedDXF {\n if (this._parsed === null) {\n this.parse()\n }\n return this._parsed as ParsedDXF\n }\n\n denormalise(): Entity[] {\n this._denormalised = denormalise(this.parsed)\n logger.info('denormalised:', this._denormalised)\n return this._denormalised\n }\n\n get denormalised(): Entity[] {\n if (!this._denormalised) {\n this.denormalise()\n }\n return this._denormalised as Entity[]\n }\n\n group(): LayerGroups {\n this._groups = groupEntitiesByLayer(this.denormalised)\n return this._groups\n }\n\n get groups(): LayerGroups {\n if (!this._groups) {\n this.group()\n }\n return this._groups as LayerGroups\n }\n\n toSVG(options?: ToSVGOptions): string {\n return toSVG(this.parsed, options)\n }\n\n toJson(options?: ToJsonOptions): string {\n return toJson(this.parsed, options)\n }\n\n toPolylines(): ReturnType<typeof toPolylines> {\n return toPolylines(this.parsed)\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,iBAAiB;AACxB,OAAO,0BAA0B;AACjC,OAAO,iBAAiB;AACxB,OAAO,YAAY;AACnB,OAAO,iBAAiB;AACxB,OAAO,WAAW;AAClB,OAAO,YAAY;AAInB,MAAO,OAAqB;AAAA,EAM1B,YAAY,UAAkB;AAC5B,QAAI,OAAO,aAAa,UAAU;AAChC,YAAM,IAAI,UAAU,yCAAyC;AAAA,IAC/D;AACA,SAAK,YAAY;AACjB,SAAK,UAAU;AACf,SAAK,gBAAgB;AACrB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,QAAmB;AACjB,SAAK,UAAU,YAAY,KAAK,SAAS;AACzC,WAAO,KAAK,WAAW,KAAK,MAAM;AAClC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAoB;AACtB,QAAI,KAAK,YAAY,MAAM;AACzB,WAAK,MAAM;AAAA,IACb;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,cAAwB;AACtB,SAAK,gBAAgB,YAAY,KAAK,MAAM;AAC5C,WAAO,KAAK,iBAAiB,KAAK,aAAa;AAC/C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,eAAyB;AAC3B,QAAI,CAAC,KAAK,eAAe;AACvB,WAAK,YAAY;AAAA,IACnB;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,QAAqB;AACnB,SAAK,UAAU,qBAAqB,KAAK,YAAY;AACrD,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,SAAsB;AACxB,QAAI,CAAC,KAAK,SAAS;AACjB,WAAK,MAAM;AAAA,IACb;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,SAAgC;AACpC,WAAO,MAAM,KAAK,QAAQ,OAAO;AAAA,EACnC;AAAA,EAEA,OAAO,SAAiC;AACtC,WAAO,OAAO,KAAK,QAAQ,OAAO;AAAA,EACpC;AAAA,EAEA,cAA8C;AAC5C,WAAO,YAAY,KAAK,MAAM;AAAA,EAChC;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/lib/denormalise.cjs
CHANGED
|
@@ -33,6 +33,133 @@ __export(denormalise_exports, {
|
|
|
33
33
|
module.exports = __toCommonJS(denormalise_exports);
|
|
34
34
|
var import_cloneDeep = __toESM(require("lodash/cloneDeep"), 1);
|
|
35
35
|
var import_logger = __toESM(require("./util/logger"), 1);
|
|
36
|
+
function adjustLineForBlockBasePoint(entity, block) {
|
|
37
|
+
const line = entity;
|
|
38
|
+
line.start.x -= block.x;
|
|
39
|
+
line.start.y -= block.y;
|
|
40
|
+
line.end.x -= block.x;
|
|
41
|
+
line.end.y -= block.y;
|
|
42
|
+
}
|
|
43
|
+
function adjustPolylineForBlockBasePoint(entity, block) {
|
|
44
|
+
const poly = entity;
|
|
45
|
+
for (const v of poly.vertices) {
|
|
46
|
+
if (v.x !== void 0) v.x -= block.x;
|
|
47
|
+
if (v.y !== void 0) v.y -= block.y;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function adjustCircleForBlockBasePoint(entity, block) {
|
|
51
|
+
const circle = entity;
|
|
52
|
+
circle.x -= block.x;
|
|
53
|
+
circle.y -= block.y;
|
|
54
|
+
}
|
|
55
|
+
function adjustEllipseForBlockBasePoint(entity, block) {
|
|
56
|
+
const ellipse = entity;
|
|
57
|
+
ellipse.x -= block.x;
|
|
58
|
+
ellipse.y -= block.y;
|
|
59
|
+
}
|
|
60
|
+
function adjustArcForBlockBasePoint(entity, block) {
|
|
61
|
+
const arc = entity;
|
|
62
|
+
arc.x -= block.x;
|
|
63
|
+
arc.y -= block.y;
|
|
64
|
+
}
|
|
65
|
+
function adjustSplineForBlockBasePoint(entity, block) {
|
|
66
|
+
const spline = entity;
|
|
67
|
+
for (const cp of spline.controlPoints) {
|
|
68
|
+
cp.x -= block.x;
|
|
69
|
+
cp.y -= block.y;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function adjustTextForBlockBasePoint(entity, block) {
|
|
73
|
+
const text = entity;
|
|
74
|
+
if (text.x !== void 0) text.x -= block.x;
|
|
75
|
+
if (text.y !== void 0) text.y -= block.y;
|
|
76
|
+
if (text.x2 !== void 0) text.x2 -= block.x;
|
|
77
|
+
if (text.y2 !== void 0) text.y2 -= block.y;
|
|
78
|
+
}
|
|
79
|
+
function adjustMTextForBlockBasePoint(entity, block) {
|
|
80
|
+
const mtext = entity;
|
|
81
|
+
if (mtext.x !== void 0) mtext.x -= block.x;
|
|
82
|
+
if (mtext.y !== void 0) mtext.y -= block.y;
|
|
83
|
+
}
|
|
84
|
+
function adjustDimensionForBlockBasePoint(entity, block) {
|
|
85
|
+
const dim = entity;
|
|
86
|
+
dim.start.x -= block.x;
|
|
87
|
+
dim.start.y -= block.y;
|
|
88
|
+
dim.textMidpoint.x -= block.x;
|
|
89
|
+
dim.textMidpoint.y -= block.y;
|
|
90
|
+
dim.measureStart.x -= block.x;
|
|
91
|
+
dim.measureStart.y -= block.y;
|
|
92
|
+
dim.measureEnd.x -= block.x;
|
|
93
|
+
dim.measureEnd.y -= block.y;
|
|
94
|
+
}
|
|
95
|
+
const BLOCK_BASEPOINT_ADJUSTERS = {
|
|
96
|
+
LINE: adjustLineForBlockBasePoint,
|
|
97
|
+
LWPOLYLINE: adjustPolylineForBlockBasePoint,
|
|
98
|
+
POLYLINE: adjustPolylineForBlockBasePoint,
|
|
99
|
+
CIRCLE: adjustCircleForBlockBasePoint,
|
|
100
|
+
ELLIPSE: adjustEllipseForBlockBasePoint,
|
|
101
|
+
ARC: adjustArcForBlockBasePoint,
|
|
102
|
+
SPLINE: adjustSplineForBlockBasePoint,
|
|
103
|
+
TEXT: adjustTextForBlockBasePoint,
|
|
104
|
+
MTEXT: adjustMTextForBlockBasePoint,
|
|
105
|
+
DIMENSION: adjustDimensionForBlockBasePoint
|
|
106
|
+
};
|
|
107
|
+
function applyBlockBasePointAdjustment(entity, block) {
|
|
108
|
+
const adjust = BLOCK_BASEPOINT_ADJUSTERS[entity.type];
|
|
109
|
+
if (adjust) adjust(entity, block);
|
|
110
|
+
}
|
|
111
|
+
function computeRectangularArrayVectors(insert) {
|
|
112
|
+
const rowCount = insert.rowCount ?? 1;
|
|
113
|
+
const columnCount = insert.columnCount ?? 1;
|
|
114
|
+
const rowSpacing = insert.rowSpacing ?? 0;
|
|
115
|
+
const columnSpacing = insert.columnSpacing ?? 0;
|
|
116
|
+
const rotation = insert.rotation ?? 0;
|
|
117
|
+
if (rowCount <= 1 && columnCount <= 1) {
|
|
118
|
+
return { rowVec: { x: 0, y: 0 }, colVec: { x: 0, y: 0 } };
|
|
119
|
+
}
|
|
120
|
+
const cos = Math.cos(rotation * Math.PI / 180);
|
|
121
|
+
const sin = Math.sin(rotation * Math.PI / 180);
|
|
122
|
+
return {
|
|
123
|
+
rowVec: { x: -sin * rowSpacing, y: cos * rowSpacing },
|
|
124
|
+
colVec: { x: cos * columnSpacing, y: sin * columnSpacing }
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function expandInsert(insert, blocksByName, transforms, gatherEntities) {
|
|
128
|
+
const block = blocksByName[insert.block];
|
|
129
|
+
if (!block) {
|
|
130
|
+
import_logger.default.error("no block found for insert. block:", insert.block);
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
const rowCount = insert.rowCount ?? 1;
|
|
134
|
+
const columnCount = insert.columnCount ?? 1;
|
|
135
|
+
const { rowVec, colVec } = computeRectangularArrayVectors(insert);
|
|
136
|
+
const current = [];
|
|
137
|
+
for (let r = 0; r < rowCount; r++) {
|
|
138
|
+
for (let c = 0; c < columnCount; c++) {
|
|
139
|
+
const t = {
|
|
140
|
+
x: insert.x + rowVec.x * r + colVec.x * c,
|
|
141
|
+
y: insert.y + rowVec.y * r + colVec.y * c,
|
|
142
|
+
scaleX: insert.scaleX,
|
|
143
|
+
scaleY: insert.scaleY,
|
|
144
|
+
scaleZ: insert.scaleZ,
|
|
145
|
+
extrusionX: insert.extrusionX,
|
|
146
|
+
extrusionY: insert.extrusionY,
|
|
147
|
+
extrusionZ: insert.extrusionZ,
|
|
148
|
+
rotation: insert.rotation
|
|
149
|
+
};
|
|
150
|
+
const transforms2 = transforms.slice(0);
|
|
151
|
+
transforms2.push(t);
|
|
152
|
+
const blockEntities = block.entities.map((be) => {
|
|
153
|
+
const be2 = (0, import_cloneDeep.default)(be);
|
|
154
|
+
be2.layer = insert.layer;
|
|
155
|
+
applyBlockBasePointAdjustment(be2, block);
|
|
156
|
+
return be2;
|
|
157
|
+
});
|
|
158
|
+
current.push(...gatherEntities(blockEntities, transforms2));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return current;
|
|
162
|
+
}
|
|
36
163
|
function denormalise(parseResult) {
|
|
37
164
|
const blocksByName = parseResult.blocks.reduce(
|
|
38
165
|
(acc, b) => {
|
|
@@ -42,99 +169,12 @@ function denormalise(parseResult) {
|
|
|
42
169
|
{}
|
|
43
170
|
);
|
|
44
171
|
const gatherEntities = (entities, transforms) => {
|
|
45
|
-
|
|
172
|
+
const current = [];
|
|
46
173
|
for (const e of entities) {
|
|
47
174
|
if (e.type === "INSERT") {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
import_logger.default.error("no block found for insert. block:", insert.block);
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
const rowCount = insert.rowCount ?? 1;
|
|
55
|
-
const columnCount = insert.columnCount ?? 1;
|
|
56
|
-
const rowSpacing = insert.rowSpacing ?? 0;
|
|
57
|
-
const columnSpacing = insert.columnSpacing ?? 0;
|
|
58
|
-
const rotation = insert.rotation ?? 0;
|
|
59
|
-
let rowVec;
|
|
60
|
-
let colVec;
|
|
61
|
-
if (rowCount > 1 || columnCount > 1) {
|
|
62
|
-
const cos = Math.cos(rotation * Math.PI / 180);
|
|
63
|
-
const sin = Math.sin(rotation * Math.PI / 180);
|
|
64
|
-
rowVec = { x: -sin * rowSpacing, y: cos * rowSpacing };
|
|
65
|
-
colVec = { x: cos * columnSpacing, y: sin * columnSpacing };
|
|
66
|
-
} else {
|
|
67
|
-
rowVec = { x: 0, y: 0 };
|
|
68
|
-
colVec = { x: 0, y: 0 };
|
|
69
|
-
}
|
|
70
|
-
for (let r = 0; r < rowCount; r++) {
|
|
71
|
-
for (let c = 0; c < columnCount; c++) {
|
|
72
|
-
const t = {
|
|
73
|
-
x: insert.x + rowVec.x * r + colVec.x * c,
|
|
74
|
-
y: insert.y + rowVec.y * r + colVec.y * c,
|
|
75
|
-
scaleX: insert.scaleX,
|
|
76
|
-
scaleY: insert.scaleY,
|
|
77
|
-
scaleZ: insert.scaleZ,
|
|
78
|
-
extrusionX: insert.extrusionX,
|
|
79
|
-
extrusionY: insert.extrusionY,
|
|
80
|
-
extrusionZ: insert.extrusionZ,
|
|
81
|
-
rotation: insert.rotation
|
|
82
|
-
};
|
|
83
|
-
const transforms2 = transforms.slice(0);
|
|
84
|
-
transforms2.push(t);
|
|
85
|
-
const blockEntities = block.entities.map((be) => {
|
|
86
|
-
const be2 = (0, import_cloneDeep.default)(be);
|
|
87
|
-
be2.layer = insert.layer;
|
|
88
|
-
switch (be2.type) {
|
|
89
|
-
case "LINE": {
|
|
90
|
-
const line = be2;
|
|
91
|
-
line.start.x -= block.x;
|
|
92
|
-
line.start.y -= block.y;
|
|
93
|
-
line.end.x -= block.x;
|
|
94
|
-
line.end.y -= block.y;
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
case "LWPOLYLINE":
|
|
98
|
-
case "POLYLINE": {
|
|
99
|
-
const poly = be2;
|
|
100
|
-
for (const v of poly.vertices) {
|
|
101
|
-
if (v.x !== void 0) v.x -= block.x;
|
|
102
|
-
if (v.y !== void 0) v.y -= block.y;
|
|
103
|
-
}
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
106
|
-
case "CIRCLE": {
|
|
107
|
-
const circle = be2;
|
|
108
|
-
circle.x -= block.x;
|
|
109
|
-
circle.y -= block.y;
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
112
|
-
case "ELLIPSE": {
|
|
113
|
-
const ellipse = be2;
|
|
114
|
-
ellipse.x -= block.x;
|
|
115
|
-
ellipse.y -= block.y;
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
case "ARC": {
|
|
119
|
-
const arc = be2;
|
|
120
|
-
arc.x -= block.x;
|
|
121
|
-
arc.y -= block.y;
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
124
|
-
case "SPLINE": {
|
|
125
|
-
const spline = be2;
|
|
126
|
-
for (const cp of spline.controlPoints) {
|
|
127
|
-
cp.x -= block.x;
|
|
128
|
-
cp.y -= block.y;
|
|
129
|
-
}
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
return be2;
|
|
134
|
-
});
|
|
135
|
-
current = current.concat(gatherEntities(blockEntities, transforms2));
|
|
136
|
-
}
|
|
137
|
-
}
|
|
175
|
+
current.push(
|
|
176
|
+
...expandInsert(e, blocksByName, transforms, gatherEntities)
|
|
177
|
+
);
|
|
138
178
|
} else {
|
|
139
179
|
const e2 = (0, import_cloneDeep.default)(e);
|
|
140
180
|
e2.transforms = transforms.slice().reverse();
|
package/lib/denormalise.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/denormalise.ts"],
|
|
4
|
-
"sourcesContent": ["import cloneDeep from 'lodash/cloneDeep'\n\nimport logger from './util/logger'\n\nimport type {\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAsB;AAEtB,oBAAmB;
|
|
4
|
+
"sourcesContent": ["import cloneDeep from 'lodash/cloneDeep'\n\nimport logger from './util/logger'\n\nimport type {\n ArcEntity,\n Block,\n CircleEntity,\n DimensionEntity,\n EllipseEntity,\n Entity,\n InsertEntity,\n LineEntity,\n MTextEntity,\n ParsedDXF,\n PolylineEntity,\n SplineEntity,\n TextEntity,\n Transform,\n} from './types'\n\ntype BlockBasePointAdjuster = (entity: Entity, block: Block) => void\n\nfunction adjustLineForBlockBasePoint(entity: Entity, block: Block): void {\n const line = entity as LineEntity\n line.start.x -= block.x\n line.start.y -= block.y\n line.end.x -= block.x\n line.end.y -= block.y\n}\n\nfunction adjustPolylineForBlockBasePoint(entity: Entity, block: Block): void {\n const poly = entity as PolylineEntity\n for (const v of poly.vertices) {\n if (v.x !== undefined) v.x -= block.x\n if (v.y !== undefined) v.y -= block.y\n }\n}\n\nfunction adjustCircleForBlockBasePoint(entity: Entity, block: Block): void {\n const circle = entity as CircleEntity\n circle.x -= block.x\n circle.y -= block.y\n}\n\nfunction adjustEllipseForBlockBasePoint(entity: Entity, block: Block): void {\n const ellipse = entity as EllipseEntity\n ellipse.x -= block.x\n ellipse.y -= block.y\n}\n\nfunction adjustArcForBlockBasePoint(entity: Entity, block: Block): void {\n const arc = entity as ArcEntity\n arc.x -= block.x\n arc.y -= block.y\n}\n\nfunction adjustSplineForBlockBasePoint(entity: Entity, block: Block): void {\n const spline = entity as SplineEntity\n for (const cp of spline.controlPoints) {\n cp.x -= block.x\n cp.y -= block.y\n }\n}\n\nfunction adjustTextForBlockBasePoint(entity: Entity, block: Block): void {\n const text = entity as TextEntity\n if (text.x !== undefined) text.x -= block.x\n if (text.y !== undefined) text.y -= block.y\n if (text.x2 !== undefined) text.x2 -= block.x\n if (text.y2 !== undefined) text.y2 -= block.y\n}\n\nfunction adjustMTextForBlockBasePoint(entity: Entity, block: Block): void {\n const mtext = entity as MTextEntity\n if (mtext.x !== undefined) mtext.x -= block.x\n if (mtext.y !== undefined) mtext.y -= block.y\n}\n\nfunction adjustDimensionForBlockBasePoint(entity: Entity, block: Block): void {\n const dim = entity as DimensionEntity\n dim.start.x -= block.x\n dim.start.y -= block.y\n dim.textMidpoint.x -= block.x\n dim.textMidpoint.y -= block.y\n dim.measureStart.x -= block.x\n dim.measureStart.y -= block.y\n dim.measureEnd.x -= block.x\n dim.measureEnd.y -= block.y\n}\n\nconst BLOCK_BASEPOINT_ADJUSTERS: Record<string, BlockBasePointAdjuster> = {\n LINE: adjustLineForBlockBasePoint,\n LWPOLYLINE: adjustPolylineForBlockBasePoint,\n POLYLINE: adjustPolylineForBlockBasePoint,\n CIRCLE: adjustCircleForBlockBasePoint,\n ELLIPSE: adjustEllipseForBlockBasePoint,\n ARC: adjustArcForBlockBasePoint,\n SPLINE: adjustSplineForBlockBasePoint,\n TEXT: adjustTextForBlockBasePoint,\n MTEXT: adjustMTextForBlockBasePoint,\n DIMENSION: adjustDimensionForBlockBasePoint,\n}\n\nfunction applyBlockBasePointAdjustment(entity: Entity, block: Block): void {\n // https://github.com/bjnortier/dxf/issues/52\n // See Issue 52. If we don't modify the entity coordinates here it creates an\n // issue with the transformation matrices (which are only applied AFTER block\n // insertion modifications has been applied).\n const adjust = BLOCK_BASEPOINT_ADJUSTERS[entity.type]\n if (adjust) adjust(entity, block)\n}\n\nfunction computeRectangularArrayVectors(insert: InsertEntity): {\n rowVec: { x: number; y: number }\n colVec: { x: number; y: number }\n} {\n const rowCount = insert.rowCount ?? 1\n const columnCount = insert.columnCount ?? 1\n const rowSpacing = insert.rowSpacing ?? 0\n const columnSpacing = insert.columnSpacing ?? 0\n const rotation = insert.rotation ?? 0\n\n // It appears that the rectangular array is affected by rotation, but NOT by scale.\n if (rowCount <= 1 && columnCount <= 1) {\n return { rowVec: { x: 0, y: 0 }, colVec: { x: 0, y: 0 } }\n }\n\n const cos = Math.cos((rotation * Math.PI) / 180)\n const sin = Math.sin((rotation * Math.PI) / 180)\n return {\n rowVec: { x: -sin * rowSpacing, y: cos * rowSpacing },\n colVec: { x: cos * columnSpacing, y: sin * columnSpacing },\n }\n}\n\nfunction expandInsert(\n insert: InsertEntity,\n blocksByName: Record<string, Block>,\n transforms: Transform[],\n gatherEntities: (entities: Entity[], transforms: Transform[]) => Entity[],\n): Entity[] {\n const block = blocksByName[insert.block]\n if (!block) {\n logger.error('no block found for insert. block:', insert.block)\n return []\n }\n\n const rowCount = insert.rowCount ?? 1\n const columnCount = insert.columnCount ?? 1\n const { rowVec, colVec } = computeRectangularArrayVectors(insert)\n\n const current: Entity[] = []\n for (let r = 0; r < rowCount; r++) {\n for (let c = 0; c < columnCount; c++) {\n const t: Transform = {\n x: insert.x + rowVec.x * r + colVec.x * c,\n y: insert.y + rowVec.y * r + colVec.y * c,\n scaleX: insert.scaleX,\n scaleY: insert.scaleY,\n scaleZ: insert.scaleZ,\n extrusionX: insert.extrusionX,\n extrusionY: insert.extrusionY,\n extrusionZ: insert.extrusionZ,\n rotation: insert.rotation,\n }\n\n const transforms2 = transforms.slice(0)\n transforms2.push(t)\n\n // Use the insert layer\n const blockEntities = block.entities.map((be: Entity) => {\n const be2 = cloneDeep(be)\n be2.layer = insert.layer\n applyBlockBasePointAdjustment(be2, block)\n return be2\n })\n\n current.push(...gatherEntities(blockEntities, transforms2))\n }\n }\n\n return current\n}\n\nexport default function denormalise(parseResult: ParsedDXF): Entity[] {\n const blocksByName = parseResult.blocks.reduce(\n (acc: { [name: string]: Block }, b: Block) => {\n acc[b.name] = b\n return acc\n },\n {},\n )\n\n const gatherEntities = (\n entities: Entity[],\n transforms: Transform[],\n ): Entity[] => {\n const current: Entity[] = []\n for (const e of entities) {\n if (e.type === 'INSERT') {\n current.push(\n ...expandInsert(e as InsertEntity, blocksByName, transforms, gatherEntities),\n )\n } else {\n // Top-level entity. Clone and add the transforms\n // The transforms are reversed so they occur in\n // order of application - i.e. the transform of the\n // top-level insert is applied last\n const e2 = cloneDeep(e)\n e2.transforms = transforms.slice().reverse()\n current.push(e2)\n }\n }\n return current\n }\n\n return gatherEntities(parseResult.entities, [])\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["logger", "cloneDeep"]
|
|
7
7
|
}
|