@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,165 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
from dataclasses import asdict, dataclass
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@dataclass
|
|
14
|
+
class FixtureResult:
|
|
15
|
+
file: str
|
|
16
|
+
acadver: str | None
|
|
17
|
+
entities_total: int
|
|
18
|
+
entity_types: dict[str, int]
|
|
19
|
+
audit_errors: int
|
|
20
|
+
audit_fixes: int
|
|
21
|
+
audit_warnings: int
|
|
22
|
+
audit_has_fatal_error: bool
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def _get_acadver(doc: Any) -> str | None:
|
|
26
|
+
try:
|
|
27
|
+
return str(doc.header.get("$ACADVER"))
|
|
28
|
+
except Exception:
|
|
29
|
+
return None
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def _count_entity_types(doc: Any) -> tuple[int, dict[str, int]]:
|
|
33
|
+
counts: dict[str, int] = {}
|
|
34
|
+
total = 0
|
|
35
|
+
|
|
36
|
+
try:
|
|
37
|
+
msp = doc.modelspace()
|
|
38
|
+
except Exception:
|
|
39
|
+
return 0, {}
|
|
40
|
+
|
|
41
|
+
for e in msp:
|
|
42
|
+
total += 1
|
|
43
|
+
t = getattr(e, "dxftype", None)
|
|
44
|
+
if callable(t):
|
|
45
|
+
t = t()
|
|
46
|
+
t = str(t) if t is not None else "UNKNOWN"
|
|
47
|
+
counts[t] = counts.get(t, 0) + 1
|
|
48
|
+
|
|
49
|
+
return total, dict(sorted(counts.items(), key=lambda kv: kv[0]))
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _audit(doc: Any) -> tuple[int, int, int, bool]:
|
|
53
|
+
# ezdxf audit returns an auditor object with attributes.
|
|
54
|
+
auditor = doc.audit()
|
|
55
|
+
|
|
56
|
+
errors = len(getattr(auditor, "errors", []) or [])
|
|
57
|
+
fixes = len(getattr(auditor, "fixes", []) or [])
|
|
58
|
+
warnings = len(getattr(auditor, "warnings", []) or [])
|
|
59
|
+
|
|
60
|
+
has_fatal = False
|
|
61
|
+
# Some ezdxf versions expose fatal_error as bool/str.
|
|
62
|
+
fatal_error = getattr(auditor, "fatal_error", None)
|
|
63
|
+
if fatal_error:
|
|
64
|
+
has_fatal = True
|
|
65
|
+
|
|
66
|
+
return errors, fixes, warnings, has_fatal
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def validate_fixture(path: Path) -> FixtureResult:
|
|
70
|
+
import ezdxf # type: ignore
|
|
71
|
+
|
|
72
|
+
doc = ezdxf.readfile(str(path))
|
|
73
|
+
|
|
74
|
+
acadver = _get_acadver(doc)
|
|
75
|
+
entities_total, entity_types = _count_entity_types(doc)
|
|
76
|
+
audit_errors, audit_fixes, audit_warnings, audit_has_fatal_error = _audit(doc)
|
|
77
|
+
|
|
78
|
+
return FixtureResult(
|
|
79
|
+
file=str(path),
|
|
80
|
+
acadver=acadver,
|
|
81
|
+
entities_total=entities_total,
|
|
82
|
+
entity_types=entity_types,
|
|
83
|
+
audit_errors=audit_errors,
|
|
84
|
+
audit_fixes=audit_fixes,
|
|
85
|
+
audit_warnings=audit_warnings,
|
|
86
|
+
audit_has_fatal_error=audit_has_fatal_error,
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def main() -> int:
|
|
91
|
+
parser = argparse.ArgumentParser(
|
|
92
|
+
description="Validate DXF fixtures in test/resources using ezdxf"
|
|
93
|
+
)
|
|
94
|
+
parser.add_argument(
|
|
95
|
+
"--resources",
|
|
96
|
+
default=str(Path(__file__).resolve().parents[1] / "test" / "resources"),
|
|
97
|
+
help="Path to test/resources directory",
|
|
98
|
+
)
|
|
99
|
+
parser.add_argument(
|
|
100
|
+
"--json",
|
|
101
|
+
action="store_true",
|
|
102
|
+
help="Output machine-readable JSON",
|
|
103
|
+
)
|
|
104
|
+
parser.add_argument(
|
|
105
|
+
"--fail-on-audit-errors",
|
|
106
|
+
action="store_true",
|
|
107
|
+
help="Exit non-zero if ezdxf audit reports errors or fatal errors",
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
args = parser.parse_args()
|
|
111
|
+
|
|
112
|
+
resources_dir = Path(args.resources)
|
|
113
|
+
if not resources_dir.exists() or not resources_dir.is_dir():
|
|
114
|
+
raise SystemExit(f"resources dir not found: {resources_dir}")
|
|
115
|
+
|
|
116
|
+
dxf_files = sorted(resources_dir.glob("*.dxf"))
|
|
117
|
+
|
|
118
|
+
results: list[FixtureResult] = []
|
|
119
|
+
failures: list[str] = []
|
|
120
|
+
|
|
121
|
+
for f in dxf_files:
|
|
122
|
+
try:
|
|
123
|
+
results.append(validate_fixture(f))
|
|
124
|
+
except Exception as e:
|
|
125
|
+
failures.append(f"{f.name}: {e}")
|
|
126
|
+
|
|
127
|
+
if args.json:
|
|
128
|
+
payload = {
|
|
129
|
+
"resources": str(resources_dir),
|
|
130
|
+
"count": len(results),
|
|
131
|
+
"results": [asdict(r) for r in results],
|
|
132
|
+
"read_failures": failures,
|
|
133
|
+
}
|
|
134
|
+
print(json.dumps(payload, indent=2, sort_keys=True))
|
|
135
|
+
else:
|
|
136
|
+
print(f"Validated {len(results)} fixture(s) from {resources_dir}")
|
|
137
|
+
if failures:
|
|
138
|
+
print("\nRead failures:")
|
|
139
|
+
for msg in failures:
|
|
140
|
+
print(f"- {msg}")
|
|
141
|
+
|
|
142
|
+
# Print a compact per-file summary, sorted by filename.
|
|
143
|
+
for r in sorted(results, key=lambda x: os.path.basename(x.file)):
|
|
144
|
+
base = os.path.basename(r.file)
|
|
145
|
+
print(
|
|
146
|
+
f"{base}: acadver={r.acadver} entities={r.entities_total} "
|
|
147
|
+
f"audit(errors={r.audit_errors}, fixes={r.audit_fixes}, warnings={r.audit_warnings}, fatal={r.audit_has_fatal_error})"
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
# Failure policy:
|
|
151
|
+
# - Always fail if any file cannot be read by ezdxf.
|
|
152
|
+
# - Optionally fail on audit errors/fatal errors.
|
|
153
|
+
if failures:
|
|
154
|
+
return 2
|
|
155
|
+
|
|
156
|
+
if args.fail_on_audit_errors:
|
|
157
|
+
for r in results:
|
|
158
|
+
if r.audit_has_fatal_error or r.audit_errors > 0:
|
|
159
|
+
return 3
|
|
160
|
+
|
|
161
|
+
return 0
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
if __name__ == "__main__":
|
|
165
|
+
raise SystemExit(main())
|
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
# DIMENSION Implementation Summary
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
The `DIMENSION` entity has been fully implemented with complete support for the `DIMSTYLE` system, including parsing, storage, and SVG rendering of all 6 DXF dimension types.
|
|
6
|
-
|
|
7
|
-
## Implementation Status
|
|
8
|
-
|
|
9
|
-
### ✅ Phase 1: DIMSTYLE Parsing and Storage (100%)
|
|
10
|
-
|
|
11
|
-
* **DIMSTYLE Handler**: `src/handlers/tables.ts`
|
|
12
|
-
* 68+ properties parsed via group codes
|
|
13
|
-
* Main properties: DIMASZ (41), DIMTXT (140), DIMEXO (176), DIMEXE (177)
|
|
14
|
-
* Colors: DIMCLRD (176), DIMCLRE (177), DIMCLRT (178)
|
|
15
|
-
* Line weights: DIMLWD (371), DIMLWE (372)
|
|
16
|
-
* Arrow blocks: DIMBLK (342), DIMBLK1 (343), DIMBLK2 (344)
|
|
17
|
-
* Tolerances: DIMTOL (71), DIMTOLJ (283)
|
|
18
|
-
* Alternate units: DIMALT (170), DIMALTF (143), DIMALTD (171)
|
|
19
|
-
|
|
20
|
-
* **TypeScript Interfaces**:
|
|
21
|
-
* `DimStyleInternal` in `src/types/tables.ts` (internal storage)
|
|
22
|
-
* `DimStyleTable` in `src/types/dxf.ts` (public API)
|
|
23
|
-
|
|
24
|
-
* **Integration**:
|
|
25
|
-
* DIMSTYLE stored in `parsed.tables.dimStyles`
|
|
26
|
-
* DIMENSION entity linked to style via `styleName`
|
|
27
|
-
|
|
28
|
-
### ✅ Phase 2: Modular Architecture (100%)
|
|
29
|
-
|
|
30
|
-
* **Dedicated Module**: `src/dimensionToSVG.ts` (428 lines)
|
|
31
|
-
* Dispatcher based on `entity.dimensionType`
|
|
32
|
-
* 6 specialized rendering functions
|
|
33
|
-
* SVG marker system for arrows
|
|
34
|
-
* Helper functions for colors and geometry
|
|
35
|
-
|
|
36
|
-
* **Main Functions**:
|
|
37
|
-
* `dimensionToSVG()`: Main dispatcher
|
|
38
|
-
* `createArrowMarker()`: SVG marker creation with unique IDs
|
|
39
|
-
* `colorNumberToSVG()`: DXF color conversion (0-255) to RGB
|
|
40
|
-
* `getDimensionColors()`: Color extraction from DIMSTYLE
|
|
41
|
-
|
|
42
|
-
* **Integration with toSVG.ts**:
|
|
43
|
-
* `dimension()` calls `dimensionToSVG()` with correct DIMSTYLE
|
|
44
|
-
* Apply transforms to dimensions
|
|
45
|
-
|
|
46
|
-
### ✅ Phase 3: Advanced Rendering (100%)
|
|
47
|
-
|
|
48
|
-
All 6 dimension types implemented with precise geometry:
|
|
49
|
-
|
|
50
|
-
#### 1. Linear Dimension (types 0 and 1)
|
|
51
|
-
|
|
52
|
-
* Extension lines with offset (DIMEXO) and extension (DIMEXE)
|
|
53
|
-
* Perpendicular geometry calculation (angle + π/2)
|
|
54
|
-
* Dimension line with arrows at ends
|
|
55
|
-
* Rotated text aligned to dimension
|
|
56
|
-
* File: `renderLinearDimension()`
|
|
57
|
-
|
|
58
|
-
#### 2. Angular Dimension (type 2)
|
|
59
|
-
|
|
60
|
-
* Radial extension lines from center
|
|
61
|
-
* Dimension line as SVG arc
|
|
62
|
-
* Large-arc flag calculation for arcs > 180°
|
|
63
|
-
* Arrows at arc ends
|
|
64
|
-
* Text rotated at mid-angle
|
|
65
|
-
* File: `renderAngularDimension()`
|
|
66
|
-
|
|
67
|
-
#### 3. Diameter Dimension (type 3)
|
|
68
|
-
|
|
69
|
-
* Line through circle
|
|
70
|
-
* Symbol ⌀ (Unicode U+2300) in text
|
|
71
|
-
* Single arrow at end
|
|
72
|
-
* File: `renderDiameterDimension()`
|
|
73
|
-
|
|
74
|
-
#### 4. Radius Dimension (type 4)
|
|
75
|
-
|
|
76
|
-
* Line from center to circumference
|
|
77
|
-
* Prefix "R" in text
|
|
78
|
-
* Single arrow at end
|
|
79
|
-
* File: `renderRadialDimension()`
|
|
80
|
-
|
|
81
|
-
#### 5. Ordinate Dimension (type 6)
|
|
82
|
-
|
|
83
|
-
* Simple leader line
|
|
84
|
-
* No arrows (per DXF specification)
|
|
85
|
-
* Text with X or Y coordinate
|
|
86
|
-
* File: `renderOrdinateDimension()`
|
|
87
|
-
|
|
88
|
-
#### 6. Fallback
|
|
89
|
-
|
|
90
|
-
* Minimal rendering for unsupported types
|
|
91
|
-
* Text only at textMidpoint position
|
|
92
|
-
* File: `renderFallbackDimension()`
|
|
93
|
-
|
|
94
|
-
### ✅ Phase 4: Colors and Refinements (100%)
|
|
95
|
-
|
|
96
|
-
#### DIMSTYLE Colors (100%)
|
|
97
|
-
|
|
98
|
-
* **DIMCLRD**: Dimension line color
|
|
99
|
-
* **DIMCLRE**: Extension line color
|
|
100
|
-
* **DIMCLRT**: Text color
|
|
101
|
-
* **DIMLWD**: Dimension line weight
|
|
102
|
-
* **DIMLWE**: Extension line weight
|
|
103
|
-
|
|
104
|
-
Implementation:
|
|
105
|
-
|
|
106
|
-
* DXF color table: `src/util/colors.ts` (267 colors)
|
|
107
|
-
* DXF → RGB conversion: `colorNumberToSVG()`
|
|
108
|
-
* Special cases: 0 (ByBlock), 256 (ByLayer), 7 (white/black) → currentColor
|
|
109
|
-
* Applied in all rendering functions
|
|
110
|
-
* Arrow markers inherit dimension line color
|
|
111
|
-
|
|
112
|
-
#### Optional Features (Not Implemented)
|
|
113
|
-
|
|
114
|
-
**Custom Arrow Blocks (⏸️ Low Priority)**
|
|
115
|
-
|
|
116
|
-
* DIMBLK, DIMBLK1, DIMBLK2 parsed and available
|
|
117
|
-
* Requires complex integration with INSERT renderer
|
|
118
|
-
* Fallback to standard triangular arrows works in most cases
|
|
119
|
-
|
|
120
|
-
**Tolerances and Alternate Units (⏸️ Low Priority)**
|
|
121
|
-
|
|
122
|
-
* DIMTOL, DIMALT and related properties parsed
|
|
123
|
-
* Requires complex multi-line text formatting
|
|
124
|
-
* Simple text sufficient for most cases
|
|
125
|
-
|
|
126
|
-
**XDATA Overrides (⏸️ Rare Edge Case)**
|
|
127
|
-
|
|
128
|
-
* Per-entity DIMSTYLE property overrides via XDATA
|
|
129
|
-
* Not implemented
|
|
130
|
-
* Default DIMSTYLE works in most cases
|
|
131
|
-
|
|
132
|
-
## Modified Files
|
|
133
|
-
|
|
134
|
-
### Created
|
|
135
|
-
|
|
136
|
-
* `src/dimensionToSVG.ts`: Complete rendering module (428 lines)
|
|
137
|
-
* `docs/DIMENSION_IMPLEMENTATION_PLAN.md`: Detailed implementation plan
|
|
138
|
-
* `docs/DIMENSION_SUMMARY.md`: This file
|
|
139
|
-
|
|
140
|
-
### Modified
|
|
141
|
-
|
|
142
|
-
* `src/handlers/entity/dimension.ts`: Added text (1) and styleName (3) parsing
|
|
143
|
-
* `src/types/dimension-entity.ts`: Added text and styleName properties
|
|
144
|
-
* `src/handlers/tables.ts`: Complete DIMSTYLE handler (68 properties)
|
|
145
|
-
* `src/types/tables.ts`: DimStyleInternal interface
|
|
146
|
-
* `src/types/dxf.ts`: DimStyleTable interface (public API)
|
|
147
|
-
* `src/toSVG.ts`: Integration with dimensionToSVG, pass dimStyles
|
|
148
|
-
* `docs/IMPLEMENTED-2D-ENTITIES.md`: Updated DIMENSION entry
|
|
149
|
-
|
|
150
|
-
## Commits
|
|
151
|
-
|
|
152
|
-
### Commit 1: Phases 1 and 2
|
|
153
|
-
|
|
154
|
-
```text
|
|
155
|
-
feat: add complete DIMSTYLE parsing and modular architecture for DIMENSION
|
|
156
|
-
|
|
157
|
-
Phase 1: DIMSTYLE Parsing and Storage
|
|
158
|
-
- Create complete DIMSTYLE handler with 68+ properties
|
|
159
|
-
- Process group codes: DIMASZ (41), DIMTXT (140), DIMEXO (176), DIMEXE (177), etc.
|
|
160
|
-
- Add DimStyleInternal and DimStyleTable interfaces
|
|
161
|
-
- Integrate dimStyles into parsed.tables
|
|
162
|
-
- Link DIMENSION entities to their DIMSTYLE via styleName
|
|
163
|
-
|
|
164
|
-
Phase 2: Modular Rendering Architecture
|
|
165
|
-
- Create dedicated module src/dimensionToSVG.ts
|
|
166
|
-
- Implement dispatcher based on dimensionType
|
|
167
|
-
- Create 6 specialized rendering functions
|
|
168
|
-
- Add createArrowMarker for SVG markers
|
|
169
|
-
- Integrate dimensionToSVG with toSVG.ts
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
9 files modified, 874 insertions(+), 10 deletions(-)
|
|
173
|
-
|
|
174
|
-
### Commit 2: Phase 3
|
|
175
|
-
|
|
176
|
-
```text
|
|
177
|
-
feat: implement advanced dimension rendering with extension lines and arrows
|
|
178
|
-
|
|
179
|
-
Phase 3: Advanced Rendering
|
|
180
|
-
- Implement extension lines with DIMEXO (offset) and DIMEXE (extension)
|
|
181
|
-
- Add perpendicular geometry calculation for extension lines
|
|
182
|
-
- Create SVG markers for arrows with unique IDs (timestamp-based)
|
|
183
|
-
- Implement text rotation aligned to dimension
|
|
184
|
-
- Add angular dimensions with SVG arcs
|
|
185
|
-
- Implement ⌀ and R symbols for diameter/radius
|
|
186
|
-
- Support ordinate dimensions without arrows
|
|
187
|
-
- Apply configurable line weights
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
2 files modified, 145 insertions(+), 30 deletions(-)
|
|
191
|
-
|
|
192
|
-
### Commit 3: Phase 4 (This Commit)
|
|
193
|
-
|
|
194
|
-
```text
|
|
195
|
-
feat: add complete DIMSTYLE color support and documentation
|
|
196
|
-
|
|
197
|
-
Phase 4: Colors and Refinements
|
|
198
|
-
- Add colorNumberToSVG function for DXF → RGB conversion
|
|
199
|
-
- Implement getDimensionColors to extract colors from DIMSTYLE
|
|
200
|
-
- Apply DIMCLRD (dimension line color) in all renderings
|
|
201
|
-
- Apply DIMCLRE (extension line color) in all renderings
|
|
202
|
-
- Apply DIMCLRT (text color) in all renderings
|
|
203
|
-
- Apply DIMLWD and DIMLWE (line weights) to lines
|
|
204
|
-
- Add dimBlk, dimBlk1, dimBlk2 properties to DimStyleTable
|
|
205
|
-
- Update implementation plan with complete status
|
|
206
|
-
- Update entity documentation with detailed implementation
|
|
207
|
-
- Create complete implementation summary
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
## Testing and Validation
|
|
211
|
-
|
|
212
|
-
### Build
|
|
213
|
-
|
|
214
|
-
* ✅ ESM Build: 21-24ms
|
|
215
|
-
* ✅ CJS Build: 18-19ms
|
|
216
|
-
* ✅ 0 TypeScript errors
|
|
217
|
-
* ⚠️ 1 warning (import.meta in es2015 - unrelated)
|
|
218
|
-
|
|
219
|
-
### Generated Files
|
|
220
|
-
|
|
221
|
-
* `lib/dimensionToSVG.js`: 14.6kb (ESM)
|
|
222
|
-
* `lib/dimensionToSVG.cjs`: 16.4kb (CJS)
|
|
223
|
-
* `lib/handlers/tables.js`: 15.3kb (ESM)
|
|
224
|
-
* `lib/handlers/tables.cjs`: 16.8kb (CJS)
|
|
225
|
-
|
|
226
|
-
### Feature Coverage
|
|
227
|
-
|
|
228
|
-
* ✅ Parsing: 100% (68 DIMSTYLE properties)
|
|
229
|
-
* ✅ Basic rendering: 100% (6 dimension types)
|
|
230
|
-
* ✅ Advanced rendering: 100% (extension lines, arrows, rotation)
|
|
231
|
-
* ✅ Colors: 100% (DIMCLRD, DIMCLRE, DIMCLRT)
|
|
232
|
-
* ⏸️ Custom arrows: 0% (optional, low priority)
|
|
233
|
-
* ⏸️ Tolerances: 0% (optional, low priority)
|
|
234
|
-
* ⏸️ XDATA overrides: 0% (optional, edge case)
|
|
235
|
-
|
|
236
|
-
## Next Steps (Optional)
|
|
237
|
-
|
|
238
|
-
1. **Unit tests**: Create tests for each dimension type
|
|
239
|
-
2. **Integration tests**: Validate with real DXF files
|
|
240
|
-
3. **Custom arrow blocks**: Implement if there is demand
|
|
241
|
-
4. **Tolerances**: Implement if there is demand
|
|
242
|
-
5. **Performance**: Profiling and optimization if necessary
|
|
243
|
-
|
|
244
|
-
## Conclusion
|
|
245
|
-
|
|
246
|
-
The `DIMENSION` implementation is complete for common use cases (estimate: 95% of DXF files). The optional features not implemented are rare edge cases or too complex for the limited benefit they would provide.
|
|
247
|
-
|
|
248
|
-
The modular architecture allows for easy future extension if needed.
|
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
# Resumo da Implementação de DIMENSION
|
|
2
|
-
|
|
3
|
-
## Visão Geral
|
|
4
|
-
|
|
5
|
-
A entidade `DIMENSION` foi completamente implementada com suporte total ao sistema de estilos `DIMSTYLE`, incluindo parsing, armazenamento e renderização SVG de todos os 6 tipos de dimensão do DXF.
|
|
6
|
-
|
|
7
|
-
## Status de Implementação
|
|
8
|
-
|
|
9
|
-
### ✅ Fase 1: Parsing e Armazenamento de DIMSTYLE (100%)
|
|
10
|
-
|
|
11
|
-
* **Handler de DIMSTYLE**: `src/handlers/tables.ts`
|
|
12
|
-
* 68+ propriedades parseadas via group codes
|
|
13
|
-
* Propriedades principais: DIMASZ (41), DIMTXT (140), DIMEXO (176), DIMEXE (177)
|
|
14
|
-
* Cores: DIMCLRD (176), DIMCLRE (177), DIMCLRT (178)
|
|
15
|
-
* Espessuras: DIMLWD (371), DIMLWE (372)
|
|
16
|
-
* Blocos de seta: DIMBLK (342), DIMBLK1 (343), DIMBLK2 (344)
|
|
17
|
-
* Tolerâncias: DIMTOL (71), DIMTOLJ (283)
|
|
18
|
-
* Unidades alternativas: DIMALT (170), DIMALTF (143), DIMALTD (171)
|
|
19
|
-
|
|
20
|
-
* **Interfaces TypeScript**:
|
|
21
|
-
* `DimStyleInternal` em `src/types/tables.ts` (armazenamento interno)
|
|
22
|
-
* `DimStyleTable` em `src/types/dxf.ts` (API pública)
|
|
23
|
-
|
|
24
|
-
* **Integração**:
|
|
25
|
-
* DIMSTYLE armazenado em `parsed.tables.dimStyles`
|
|
26
|
-
* Entidade DIMENSION vinculada ao estilo via `styleName`
|
|
27
|
-
|
|
28
|
-
### ✅ Fase 2: Arquitetura Modular (100%)
|
|
29
|
-
|
|
30
|
-
* **Módulo dedicado**: `src/dimensionToSVG.ts` (428 linhas)
|
|
31
|
-
* Dispatcher baseado em `entity.dimensionType`
|
|
32
|
-
* 6 funções especializadas de renderização
|
|
33
|
-
* Sistema de markers SVG para setas
|
|
34
|
-
* Funções helper para cores e geometria
|
|
35
|
-
|
|
36
|
-
* **Funções principais**:
|
|
37
|
-
* `dimensionToSVG()`: Dispatcher principal
|
|
38
|
-
* `createArrowMarker()`: Criação de markers SVG com IDs únicos
|
|
39
|
-
* `colorNumberToSVG()`: Conversão de cores DXF (0-255) para RGB
|
|
40
|
-
* `getDimensionColors()`: Extração de cores do DIMSTYLE
|
|
41
|
-
|
|
42
|
-
* **Integração com toSVG.ts**:
|
|
43
|
-
* `dimension()` chama `dimensionToSVG()` com DIMSTYLE correto
|
|
44
|
-
* Aplicação de transforms às dimensões
|
|
45
|
-
|
|
46
|
-
### ✅ Fase 3: Renderização Avançada (100%)
|
|
47
|
-
|
|
48
|
-
Todos os 6 tipos de dimensão implementados com geometria precisa:
|
|
49
|
-
|
|
50
|
-
#### 1. Dimensão Linear (tipos 0 e 1)
|
|
51
|
-
|
|
52
|
-
* Extension lines com offset (DIMEXO) e extensão (DIMEXE)
|
|
53
|
-
* Cálculo de geometria perpendicular (angle + π/2)
|
|
54
|
-
* Dimension line com setas nas extremidades
|
|
55
|
-
* Texto rotacionado alinhado à dimensão
|
|
56
|
-
* Arquivo: `renderLinearDimension()`
|
|
57
|
-
|
|
58
|
-
#### 2. Dimensão Angular (tipo 2)
|
|
59
|
-
|
|
60
|
-
* Extension lines radiais a partir do centro
|
|
61
|
-
* Dimension line como arco SVG
|
|
62
|
-
* Cálculo de large-arc flag para arcos > 180°
|
|
63
|
-
* Setas nas extremidades do arco
|
|
64
|
-
* Texto rotacionado no ângulo médio
|
|
65
|
-
* Arquivo: `renderAngularDimension()`
|
|
66
|
-
|
|
67
|
-
#### 3. Dimensão de Diâmetro (tipo 3)
|
|
68
|
-
|
|
69
|
-
* Linha através do círculo
|
|
70
|
-
* Símbolo ⌀ (Unicode U+2300) no texto
|
|
71
|
-
* Seta única na extremidade
|
|
72
|
-
* Arquivo: `renderDiameterDimension()`
|
|
73
|
-
|
|
74
|
-
#### 4. Dimensão de Raio (tipo 4)
|
|
75
|
-
|
|
76
|
-
* Linha do centro até a circunferência
|
|
77
|
-
* Prefixo "R" no texto
|
|
78
|
-
* Seta única na extremidade
|
|
79
|
-
* Arquivo: `renderRadialDimension()`
|
|
80
|
-
|
|
81
|
-
#### 5. Dimensão Ordenada (tipo 6)
|
|
82
|
-
|
|
83
|
-
* Linha de chamada simples
|
|
84
|
-
* Sem setas (conforme especificação DXF)
|
|
85
|
-
* Texto com coordenada X ou Y
|
|
86
|
-
* Arquivo: `renderOrdinateDimension()`
|
|
87
|
-
|
|
88
|
-
#### 6. Fallback
|
|
89
|
-
|
|
90
|
-
* Renderização mínima para tipos não suportados
|
|
91
|
-
* Apenas texto na posição textMidpoint
|
|
92
|
-
* Arquivo: `renderFallbackDimension()`
|
|
93
|
-
|
|
94
|
-
### ✅ Fase 4: Cores e Refinamentos (100%)
|
|
95
|
-
|
|
96
|
-
#### Cores DIMSTYLE (100%)
|
|
97
|
-
|
|
98
|
-
* **DIMCLRD**: Cor das dimension lines
|
|
99
|
-
* **DIMCLRE**: Cor das extension lines
|
|
100
|
-
* **DIMCLRT**: Cor do texto
|
|
101
|
-
* **DIMLWD**: Espessura das dimension lines
|
|
102
|
-
* **DIMLWE**: Espessura das extension lines
|
|
103
|
-
|
|
104
|
-
Implementação:
|
|
105
|
-
|
|
106
|
-
* Tabela de cores DXF: `src/util/colors.ts` (267 cores)
|
|
107
|
-
* Conversão DXF → RGB: `colorNumberToSVG()`
|
|
108
|
-
* Casos especiais: 0 (ByBlock), 256 (ByLayer), 7 (white/black) → currentColor
|
|
109
|
-
* Aplicado em todas as funções de renderização
|
|
110
|
-
* Markers de seta herdam cor da dimension line
|
|
111
|
-
|
|
112
|
-
#### Funcionalidades Opcionais (Não Implementadas)
|
|
113
|
-
|
|
114
|
-
**Custom Arrow Blocks (⏸️ Baixa Prioridade)**
|
|
115
|
-
|
|
116
|
-
* DIMBLK, DIMBLK1, DIMBLK2 parseados e disponíveis
|
|
117
|
-
* Requer integração complexa com renderizador de INSERT
|
|
118
|
-
* Fallback para setas triangulares padrão funciona na maioria dos casos
|
|
119
|
-
|
|
120
|
-
**Tolerâncias e Unidades Alternativas (⏸️ Baixa Prioridade)**
|
|
121
|
-
|
|
122
|
-
* DIMTOL, DIMALT e propriedades relacionadas parseadas
|
|
123
|
-
* Requer formatação complexa de texto com múltiplas linhas
|
|
124
|
-
* Texto simples suficiente para maioria dos casos
|
|
125
|
-
|
|
126
|
-
**XDATA Overrides (⏸️ Edge Case Raro)**
|
|
127
|
-
|
|
128
|
-
* Overrides de propriedades DIMSTYLE por entidade via XDATA
|
|
129
|
-
* Não implementado
|
|
130
|
-
* DIMSTYLE padrão funciona na maioria dos casos
|
|
131
|
-
|
|
132
|
-
## Arquivos Modificados
|
|
133
|
-
|
|
134
|
-
### Criados
|
|
135
|
-
|
|
136
|
-
* `src/dimensionToSVG.ts`: Módulo completo de renderização (428 linhas)
|
|
137
|
-
* `docs/DIMENSION_IMPLEMENTATION_PLAN.md`: Plano detalhado de implementação
|
|
138
|
-
* `docs/DIMENSION_SUMMARY.md`: Este arquivo
|
|
139
|
-
|
|
140
|
-
### Modificados
|
|
141
|
-
|
|
142
|
-
* `src/handlers/entity/dimension.ts`: Adicionado parsing de text (1) e styleName (3)
|
|
143
|
-
* `src/types/dimension-entity.ts`: Adicionadas propriedades text e styleName
|
|
144
|
-
* `src/handlers/tables.ts`: Handler completo de DIMSTYLE (68 propriedades)
|
|
145
|
-
* `src/types/tables.ts`: Interface DimStyleInternal
|
|
146
|
-
* `src/types/dxf.ts`: Interface DimStyleTable (API pública)
|
|
147
|
-
* `src/toSVG.ts`: Integração com dimensionToSVG, passa dimStyles
|
|
148
|
-
* `docs/ENTIDADES-2D-IMPLEMENTADAS.md`: Atualizada entrada de DIMENSION
|
|
149
|
-
|
|
150
|
-
## Commits
|
|
151
|
-
|
|
152
|
-
### Commit 1: Phases 1 & 2
|
|
153
|
-
|
|
154
|
-
```text
|
|
155
|
-
feat: adicionar parsing completo de DIMSTYLE e arquitetura modular para DIMENSION
|
|
156
|
-
|
|
157
|
-
Fase 1: Parsing e Armazenamento de DIMSTYLE
|
|
158
|
-
- Criar handler completo de DIMSTYLE com 68+ propriedades
|
|
159
|
-
- Processar group codes: DIMASZ (41), DIMTXT (140), DIMEXO (176), DIMEXE (177), etc.
|
|
160
|
-
- Adicionar interfaces DimStyleInternal e DimStyleTable
|
|
161
|
-
- Integrar dimStyles no parsed.tables
|
|
162
|
-
- Vincular DIMENSION entities ao seu DIMSTYLE via styleName
|
|
163
|
-
|
|
164
|
-
Fase 2: Arquitetura Modular de Renderização
|
|
165
|
-
- Criar módulo dedicado src/dimensionToSVG.ts
|
|
166
|
-
- Implementar dispatcher baseado em dimensionType
|
|
167
|
-
- Criar 6 funções especializadas de renderização
|
|
168
|
-
- Adicionar createArrowMarker para SVG markers
|
|
169
|
-
- Integrar dimensionToSVG com toSVG.ts
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
9 arquivos modificados, 874 inserções(+), 10 deleções(-)
|
|
173
|
-
|
|
174
|
-
### Commit 2: Phase 3
|
|
175
|
-
|
|
176
|
-
```text
|
|
177
|
-
feat: implementar renderização avançada de dimensões com extension lines e setas
|
|
178
|
-
|
|
179
|
-
Fase 3: Renderização Avançada
|
|
180
|
-
- Implementar extension lines com DIMEXO (offset) e DIMEXE (extension)
|
|
181
|
-
- Adicionar cálculo de geometria perpendicular para extension lines
|
|
182
|
-
- Criar markers SVG para setas com IDs únicos (timestamp-based)
|
|
183
|
-
- Implementar rotação de texto alinhada à dimensão
|
|
184
|
-
- Adicionar dimensões angulares com arcos SVG
|
|
185
|
-
- Implementar símbolos ⌀ e R para diâmetro/raio
|
|
186
|
-
- Suportar dimensões de ordenada sem setas
|
|
187
|
-
- Aplicar espessuras de linha configuráveis
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
2 arquivos modificados, 145 inserções(+), 30 deleções(-)
|
|
191
|
-
|
|
192
|
-
### Commit 3: Phase 4 (Este Commit)
|
|
193
|
-
|
|
194
|
-
```text
|
|
195
|
-
feat: adicionar suporte completo a cores DIMSTYLE e documentação
|
|
196
|
-
|
|
197
|
-
Fase 4: Cores e Refinamentos
|
|
198
|
-
- Adicionar função colorNumberToSVG para conversão DXF → RGB
|
|
199
|
-
- Implementar getDimensionColors para extrair cores do DIMSTYLE
|
|
200
|
-
- Aplicar DIMCLRD (cor dimension lines) em todas as renderizações
|
|
201
|
-
- Aplicar DIMCLRE (cor extension lines) em todas as renderizações
|
|
202
|
-
- Aplicar DIMCLRT (cor texto) em todas as renderizações
|
|
203
|
-
- Aplicar DIMLWD e DIMLWE (espessuras) em linhas
|
|
204
|
-
- Adicionar propriedades dimBlk, dimBlk1, dimBlk2 no DimStyleTable
|
|
205
|
-
- Atualizar plano de implementação com status completo
|
|
206
|
-
- Atualizar documentação de entidades com implementação detalhada
|
|
207
|
-
- Criar resumo completo da implementação
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
## Testes e Validação
|
|
211
|
-
|
|
212
|
-
### Compilação
|
|
213
|
-
|
|
214
|
-
* ✅ Build ESM: 21-24ms
|
|
215
|
-
* ✅ Build CJS: 18-19ms
|
|
216
|
-
* ✅ 0 erros TypeScript
|
|
217
|
-
* ⚠️ 1 warning (import.meta em es2015 - não relacionado)
|
|
218
|
-
|
|
219
|
-
### Arquivos Gerados
|
|
220
|
-
|
|
221
|
-
* `lib/dimensionToSVG.js`: 14.6kb (ESM)
|
|
222
|
-
* `lib/dimensionToSVG.cjs`: 16.4kb (CJS)
|
|
223
|
-
* `lib/handlers/tables.js`: 15.3kb (ESM)
|
|
224
|
-
* `lib/handlers/tables.cjs`: 16.8kb (CJS)
|
|
225
|
-
|
|
226
|
-
### Cobertura de Funcionalidades
|
|
227
|
-
|
|
228
|
-
* ✅ Parsing: 100% (68 propriedades DIMSTYLE)
|
|
229
|
-
* ✅ Renderização básica: 100% (6 tipos de dimensão)
|
|
230
|
-
* ✅ Renderização avançada: 100% (extension lines, setas, rotação)
|
|
231
|
-
* ✅ Cores: 100% (DIMCLRD, DIMCLRE, DIMCLRT)
|
|
232
|
-
* ⏸️ Custom arrows: 0% (opcional, baixa prioridade)
|
|
233
|
-
* ⏸️ Tolerâncias: 0% (opcional, baixa prioridade)
|
|
234
|
-
* ⏸️ XDATA overrides: 0% (opcional, edge case)
|
|
235
|
-
|
|
236
|
-
## Próximos Passos (Opcionais)
|
|
237
|
-
|
|
238
|
-
1. **Testes unitários**: Criar testes para cada tipo de dimensão
|
|
239
|
-
2. **Testes de integração**: Validar com arquivos DXF reais
|
|
240
|
-
3. **Custom arrow blocks**: Implementar se houver demanda
|
|
241
|
-
4. **Tolerâncias**: Implementar se houver demanda
|
|
242
|
-
5. **Performance**: Profiling e otimização se necessário
|
|
243
|
-
|
|
244
|
-
## Conclusão
|
|
245
|
-
|
|
246
|
-
A implementação de `DIMENSION` está completa para casos de uso comuns (estimativa: 95% dos arquivos DXF). As funcionalidades opcionais não implementadas são edge cases raros ou complexos demais para o benefício limitado que trariam.
|
|
247
|
-
|
|
248
|
-
A arquitetura modular permite fácil extensão futura se necessário.
|