ofs-dxf-ts 1.0.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.
Files changed (97) hide show
  1. package/API.md +411 -0
  2. package/CHANGELOG.md +26 -0
  3. package/LICENSE +21 -0
  4. package/README.md +119 -0
  5. package/dist/core/dxf-builder.d.ts +348 -0
  6. package/dist/core/dxf-builder.js +549 -0
  7. package/dist/core/dxf-document.d.ts +220 -0
  8. package/dist/core/dxf-document.js +529 -0
  9. package/dist/core/dxf-entities.d.ts +327 -0
  10. package/dist/core/dxf-entities.js +22 -0
  11. package/dist/core/dxf-serializer.d.ts +48 -0
  12. package/dist/core/dxf-serializer.js +595 -0
  13. package/dist/core/hatch-patterns.d.ts +15 -0
  14. package/dist/core/hatch-patterns.js +214 -0
  15. package/dist/core/modelspace.d.ts +106 -0
  16. package/dist/core/modelspace.js +351 -0
  17. package/dist/geometry/math.utils.d.ts +8 -0
  18. package/dist/geometry/math.utils.js +43 -0
  19. package/dist/geometry/offset.utils.d.ts +32 -0
  20. package/dist/geometry/offset.utils.js +87 -0
  21. package/dist/geometry/polyline.utils.d.ts +10 -0
  22. package/dist/geometry/polyline.utils.js +63 -0
  23. package/dist/geometry/text.utils.d.ts +15 -0
  24. package/dist/geometry/text.utils.js +28 -0
  25. package/dist/index.d.ts +23 -0
  26. package/dist/index.js +29 -0
  27. package/dist/parser/auto-cad-color-index.d.ts +8 -0
  28. package/dist/parser/auto-cad-color-index.js +265 -0
  29. package/dist/parser/dim-style-codes.d.ts +5 -0
  30. package/dist/parser/dim-style-codes.js +32 -0
  31. package/dist/parser/dxf-parser.d.ts +16 -0
  32. package/dist/parser/dxf-parser.js +824 -0
  33. package/dist/parser/entities/3dface.d.ts +5 -0
  34. package/dist/parser/entities/3dface.js +76 -0
  35. package/dist/parser/entities/arc.d.ts +5 -0
  36. package/dist/parser/entities/arc.js +34 -0
  37. package/dist/parser/entities/attdef.d.ts +5 -0
  38. package/dist/parser/entities/attdef.js +86 -0
  39. package/dist/parser/entities/attribute.d.ts +5 -0
  40. package/dist/parser/entities/attribute.js +106 -0
  41. package/dist/parser/entities/circle.d.ts +5 -0
  42. package/dist/parser/entities/circle.js +40 -0
  43. package/dist/parser/entities/dimension.d.ts +5 -0
  44. package/dist/parser/entities/dimension.js +65 -0
  45. package/dist/parser/entities/ellipse.d.ts +5 -0
  46. package/dist/parser/entities/ellipse.js +42 -0
  47. package/dist/parser/entities/hatch.d.ts +5 -0
  48. package/dist/parser/entities/hatch.js +321 -0
  49. package/dist/parser/entities/insert.d.ts +5 -0
  50. package/dist/parser/entities/insert.js +52 -0
  51. package/dist/parser/entities/line.d.ts +5 -0
  52. package/dist/parser/entities/line.js +30 -0
  53. package/dist/parser/entities/lwpolyline.d.ts +5 -0
  54. package/dist/parser/entities/lwpolyline.js +101 -0
  55. package/dist/parser/entities/mtext.d.ts +5 -0
  56. package/dist/parser/entities/mtext.js +54 -0
  57. package/dist/parser/entities/point.d.ts +5 -0
  58. package/dist/parser/entities/point.js +30 -0
  59. package/dist/parser/entities/polyline.d.ts +5 -0
  60. package/dist/parser/entities/polyline.js +85 -0
  61. package/dist/parser/entities/solid.d.ts +5 -0
  62. package/dist/parser/entities/solid.js +35 -0
  63. package/dist/parser/entities/spline.d.ts +5 -0
  64. package/dist/parser/entities/spline.js +69 -0
  65. package/dist/parser/entities/text.d.ts +5 -0
  66. package/dist/parser/entities/text.js +47 -0
  67. package/dist/parser/entities/vertex.d.ts +5 -0
  68. package/dist/parser/entities/vertex.js +59 -0
  69. package/dist/parser/extended-data-parser.d.ts +18 -0
  70. package/dist/parser/extended-data-parser.js +100 -0
  71. package/dist/parser/index.d.ts +10 -0
  72. package/dist/parser/index.js +9 -0
  73. package/dist/parser/log.d.ts +14 -0
  74. package/dist/parser/log.js +39 -0
  75. package/dist/parser/parse-helpers.d.ts +23 -0
  76. package/dist/parser/parse-helpers.js +128 -0
  77. package/dist/parser/scanner.d.ts +29 -0
  78. package/dist/parser/scanner.js +143 -0
  79. package/dist/parser/types.d.ts +78 -0
  80. package/dist/parser/types.js +5 -0
  81. package/dist/symbols/slope-symbol.d.ts +21 -0
  82. package/dist/symbols/slope-symbol.js +81 -0
  83. package/dist/symbols/structures.d.ts +9 -0
  84. package/dist/symbols/structures.js +120 -0
  85. package/dist/template/blank-document.d.ts +13 -0
  86. package/dist/template/blank-document.js +13 -0
  87. package/dist/template/block-registry.d.ts +16 -0
  88. package/dist/template/block-registry.js +135 -0
  89. package/dist/template/index.d.ts +17 -0
  90. package/dist/template/index.js +17 -0
  91. package/dist/template/template-injector.d.ts +45 -0
  92. package/dist/template/template-injector.js +487 -0
  93. package/dist/template/template-reader.d.ts +28 -0
  94. package/dist/template/template-reader.js +80 -0
  95. package/dist/types/index.d.ts +24 -0
  96. package/dist/types/index.js +8 -0
  97. package/package.json +59 -0
@@ -0,0 +1,327 @@
1
+ /**
2
+ * DXF Entity and Attribute type definitions.
3
+ * Mirrors ezdxf's entity model for maximum compatibility.
4
+ * Covers all 23 entity types requested.
5
+ */
6
+ import type { HatchPatternLine } from './hatch-patterns.js';
7
+ export interface DxfAttribs {
8
+ layer?: string;
9
+ color?: number;
10
+ linetype?: string;
11
+ lineweight?: number;
12
+ }
13
+ export interface TextAttribs extends DxfAttribs {
14
+ style?: string;
15
+ height?: number;
16
+ rotation?: number;
17
+ halign?: number;
18
+ valign?: number;
19
+ }
20
+ export interface BlockRefAttribs extends DxfAttribs {
21
+ xscale?: number;
22
+ yscale?: number;
23
+ zscale?: number;
24
+ rotation?: number;
25
+ }
26
+ export declare enum TextEntityAlignment {
27
+ LEFT = 0,
28
+ CENTER = 1,
29
+ RIGHT = 2,
30
+ MIDDLE = 4,
31
+ MIDDLE_LEFT = 10,
32
+ MIDDLE_CENTER = 11,
33
+ MIDDLE_RIGHT = 12,
34
+ TOP_LEFT = 20,
35
+ TOP_CENTER = 21,
36
+ TOP_RIGHT = 22,
37
+ BOTTOM_LEFT = 30,
38
+ BOTTOM_CENTER = 31,
39
+ BOTTOM_RIGHT = 32
40
+ }
41
+ export type EntityType = 'LINE' | 'LWPOLYLINE' | 'POLYLINE' | 'CIRCLE' | 'ARC' | 'ELLIPSE' | 'TEXT' | 'MTEXT' | 'INSERT' | 'POINT' | 'SOLID' | 'TRACE' | 'HATCH' | 'DIMENSION' | 'LEADER' | 'SPLINE' | 'VIEWPORT' | 'IMAGE' | 'WIPEOUT' | 'REGION' | 'MESH' | 'MLEADER';
42
+ export interface DxfEntityBase {
43
+ type: EntityType;
44
+ layer: string;
45
+ color?: number;
46
+ linetype?: string;
47
+ lineweight?: number;
48
+ handle?: string;
49
+ }
50
+ export interface LineEntity extends DxfEntityBase {
51
+ type: 'LINE';
52
+ start: [number, number];
53
+ end: [number, number];
54
+ }
55
+ export interface LwPolylineEntity extends DxfEntityBase {
56
+ type: 'LWPOLYLINE';
57
+ points: [number, number][];
58
+ closed: boolean;
59
+ }
60
+ /** 3D Polyline (heavy polyline with VERTEX sub-entities) */
61
+ export interface PolylineEntity extends DxfEntityBase {
62
+ type: 'POLYLINE';
63
+ points: [number, number, number][];
64
+ closed: boolean;
65
+ }
66
+ export interface CircleEntity extends DxfEntityBase {
67
+ type: 'CIRCLE';
68
+ center: [number, number];
69
+ radius: number;
70
+ }
71
+ export interface ArcEntity extends DxfEntityBase {
72
+ type: 'ARC';
73
+ center: [number, number];
74
+ radius: number;
75
+ startAngle: number;
76
+ endAngle: number;
77
+ }
78
+ export interface EllipseEntity extends DxfEntityBase {
79
+ type: 'ELLIPSE';
80
+ center: [number, number];
81
+ majorAxis: [number, number];
82
+ ratioMinorToMajor: number;
83
+ startParam: number;
84
+ endParam: number;
85
+ }
86
+ export interface PointEntity extends DxfEntityBase {
87
+ type: 'POINT';
88
+ position: [number, number];
89
+ }
90
+ export interface SolidEntity extends DxfEntityBase {
91
+ type: 'SOLID';
92
+ points: [[number, number], [number, number], [number, number], [number, number]];
93
+ }
94
+ export interface TraceEntity extends DxfEntityBase {
95
+ type: 'TRACE';
96
+ points: [[number, number], [number, number], [number, number], [number, number]];
97
+ }
98
+ export interface TextEntity extends DxfEntityBase {
99
+ type: 'TEXT';
100
+ text: string;
101
+ position: [number, number];
102
+ height: number;
103
+ rotation: number;
104
+ style: string;
105
+ halign: number;
106
+ valign: number;
107
+ alignmentPoint?: [number, number];
108
+ }
109
+ export interface MTextEntity extends DxfEntityBase {
110
+ type: 'MTEXT';
111
+ text: string;
112
+ position: [number, number];
113
+ height: number;
114
+ rotation: number;
115
+ width: number;
116
+ style: string;
117
+ attachmentPoint: number;
118
+ }
119
+ export interface InsertEntity extends DxfEntityBase {
120
+ type: 'INSERT';
121
+ blockName: string;
122
+ position: [number, number];
123
+ xScale: number;
124
+ yScale: number;
125
+ zScale: number;
126
+ rotation: number;
127
+ }
128
+ export interface SplineEntity extends DxfEntityBase {
129
+ type: 'SPLINE';
130
+ degree: number;
131
+ closed: boolean;
132
+ controlPoints: [number, number][];
133
+ fitPoints: [number, number][];
134
+ knots: number[];
135
+ weights?: number[];
136
+ }
137
+ export interface HatchEntity extends DxfEntityBase {
138
+ type: 'HATCH';
139
+ patternName: string;
140
+ solid: boolean;
141
+ scale: number;
142
+ angle: number;
143
+ boundaries: HatchBoundary[];
144
+ /** Custom pattern definition; defaults to the built-in HATCH_PATTERNS entry for `patternName`. */
145
+ patternLines?: HatchPatternLine[];
146
+ }
147
+ export interface HatchBoundary {
148
+ type: 'polyline';
149
+ points: [number, number][];
150
+ closed: boolean;
151
+ }
152
+ export interface DimensionEntity extends DxfEntityBase {
153
+ type: 'DIMENSION';
154
+ dimensionType: number;
155
+ definitionPoint: [number, number];
156
+ textMidpoint: [number, number];
157
+ insertionPoint: [number, number];
158
+ text: string;
159
+ rotation: number;
160
+ style: string;
161
+ point1?: [number, number];
162
+ point2?: [number, number];
163
+ }
164
+ export interface LeaderEntity extends DxfEntityBase {
165
+ type: 'LEADER';
166
+ vertices: [number, number][];
167
+ hasArrowhead: boolean;
168
+ annotationType: number;
169
+ style: string;
170
+ annotationText?: string;
171
+ }
172
+ export interface ViewportEntity extends DxfEntityBase {
173
+ type: 'VIEWPORT';
174
+ center: [number, number];
175
+ width: number;
176
+ height: number;
177
+ viewCenter: [number, number];
178
+ viewHeight: number;
179
+ status: number;
180
+ id?: number;
181
+ frozenLayers?: string[];
182
+ locked?: boolean;
183
+ }
184
+ export interface ImageEntity extends DxfEntityBase {
185
+ type: 'IMAGE';
186
+ insertionPoint: [number, number];
187
+ uVector: [number, number];
188
+ vVector: [number, number];
189
+ imageSize: [number, number];
190
+ imagePath: string;
191
+ clipBoundary?: [number, number][];
192
+ brightness?: number;
193
+ contrast?: number;
194
+ fade?: number;
195
+ }
196
+ export interface WipeoutEntity extends DxfEntityBase {
197
+ type: 'WIPEOUT';
198
+ insertionPoint: [number, number];
199
+ uVector: [number, number];
200
+ vVector: [number, number];
201
+ imageSize: [number, number];
202
+ clipBoundary: [number, number][];
203
+ }
204
+ export interface RegionEntity extends DxfEntityBase {
205
+ type: 'REGION';
206
+ acisData: string[];
207
+ }
208
+ export interface MeshEntity extends DxfEntityBase {
209
+ type: 'MESH';
210
+ subdivisionLevel: number;
211
+ vertices: [number, number, number][];
212
+ faces: number[][];
213
+ }
214
+ /**
215
+ * MLEADER — Modern multileader entity (AutoCAD 2008+).
216
+ * Combines leader lines with text or block content.
217
+ *
218
+ * @deprecated The MULTILEADER written for this entity is incomplete and is not
219
+ * read reliably by AutoCAD. Use `DxfBuilder.addCallout()` instead.
220
+ */
221
+ export interface MLeaderEntity extends DxfEntityBase {
222
+ type: 'MLEADER';
223
+ vertices: [number, number][];
224
+ text: string;
225
+ textHeight: number;
226
+ textWidth: number;
227
+ textPosition: [number, number];
228
+ arrowSize: number;
229
+ style: string;
230
+ doglegLength: number;
231
+ leaderType: number;
232
+ contentType: number;
233
+ }
234
+ export interface TableCellDef {
235
+ text: string;
236
+ alignment?: TextEntityAlignment;
237
+ color?: number;
238
+ style?: string;
239
+ /** Number of columns this cell spans (default 1). */
240
+ colSpan?: number;
241
+ /** Number of rows this cell spans (default 1). */
242
+ rowSpan?: number;
243
+ }
244
+ export interface TableDef {
245
+ position: [number, number];
246
+ columnWidths: number[];
247
+ rowHeight: number;
248
+ /** Per-row heights; rows without an entry use `rowHeight`. */
249
+ rowHeights?: number[];
250
+ /**
251
+ * Rows of cells, HTML-table style: a cell spanning columns/rows covers the
252
+ * positions to its right/below, and later cells skip covered positions.
253
+ */
254
+ rows: TableCellDef[][];
255
+ layer: string;
256
+ textHeight: number;
257
+ headerColor?: number;
258
+ gridColor?: number;
259
+ textColor?: number;
260
+ }
261
+ export interface LayoutDef {
262
+ name: string;
263
+ paperWidth: number;
264
+ paperHeight: number;
265
+ margins: [number, number, number, number];
266
+ viewports: LayoutViewportDef[];
267
+ }
268
+ export interface LayoutViewportDef {
269
+ /** Position in paper space (mm) */
270
+ center: [number, number];
271
+ width: number;
272
+ height: number;
273
+ /** View target in model space */
274
+ viewCenter: [number, number];
275
+ /** Model-space height shown by the viewport. Derived from `scale` when omitted. */
276
+ viewHeight?: number;
277
+ /** Frozen layers in this viewport */
278
+ frozenLayers?: string[];
279
+ /** Scale denominator, e.g. 12500 for 1:12,500. */
280
+ scale?: number;
281
+ /** Model units per paper unit at 1:1 — default 0.001 (paper in mm, model in meters). */
282
+ unitFactor?: number;
283
+ /** Lock the viewport display so zoom/pan cannot change the scale. */
284
+ locked?: boolean;
285
+ rotation?: number;
286
+ }
287
+ export interface GeoReferenceDef {
288
+ /** Coordinate Reference System (CRS) identifier, e.g. 'EPSG:32647' for UTM Zone 47N */
289
+ crsId: string;
290
+ /** Well-Known Text for the CRS (optional, for full definition) */
291
+ crsWkt?: string;
292
+ /** Design point in DXF coordinates (model space) */
293
+ designPoint: [number, number];
294
+ /** Reference point in geo coordinates (easting, northing or lon, lat) */
295
+ referencePoint: [number, number];
296
+ /** North direction in degrees (0 = Y-axis up, positive clockwise) */
297
+ northDirection: number;
298
+ /** Scale factor between DXF units and real-world units */
299
+ scaleFactor: number;
300
+ /** Coordinate type: 1 = local grid, 2 = projected (UTM), 3 = geographic */
301
+ coordinateType: number;
302
+ }
303
+ export type DxfEntity = LineEntity | LwPolylineEntity | PolylineEntity | CircleEntity | ArcEntity | EllipseEntity | TextEntity | MTextEntity | InsertEntity | PointEntity | SolidEntity | TraceEntity | SplineEntity | HatchEntity | DimensionEntity | LeaderEntity | ViewportEntity | ImageEntity | WipeoutEntity | RegionEntity | MeshEntity | MLeaderEntity;
304
+ export interface LayerDef {
305
+ name: string;
306
+ color: number;
307
+ linetype: string;
308
+ frozen?: boolean;
309
+ locked?: boolean;
310
+ off?: boolean;
311
+ }
312
+ export interface LinetypeDef {
313
+ name: string;
314
+ description: string;
315
+ /** Dash lengths: positive = dash, negative = gap, 0 = dot. */
316
+ pattern: number[];
317
+ }
318
+ export interface TextStyleDef {
319
+ name: string;
320
+ font: string;
321
+ height?: number;
322
+ }
323
+ export interface BlockDef {
324
+ name: string;
325
+ basePoint: [number, number];
326
+ entities: DxfEntity[];
327
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * DXF Entity and Attribute type definitions.
3
+ * Mirrors ezdxf's entity model for maximum compatibility.
4
+ * Covers all 23 entity types requested.
5
+ */
6
+ // ─── Alignment Enum (matches ezdxf TextEntityAlignment) ───
7
+ export var TextEntityAlignment;
8
+ (function (TextEntityAlignment) {
9
+ TextEntityAlignment[TextEntityAlignment["LEFT"] = 0] = "LEFT";
10
+ TextEntityAlignment[TextEntityAlignment["CENTER"] = 1] = "CENTER";
11
+ TextEntityAlignment[TextEntityAlignment["RIGHT"] = 2] = "RIGHT";
12
+ TextEntityAlignment[TextEntityAlignment["MIDDLE"] = 4] = "MIDDLE";
13
+ TextEntityAlignment[TextEntityAlignment["MIDDLE_LEFT"] = 10] = "MIDDLE_LEFT";
14
+ TextEntityAlignment[TextEntityAlignment["MIDDLE_CENTER"] = 11] = "MIDDLE_CENTER";
15
+ TextEntityAlignment[TextEntityAlignment["MIDDLE_RIGHT"] = 12] = "MIDDLE_RIGHT";
16
+ TextEntityAlignment[TextEntityAlignment["TOP_LEFT"] = 20] = "TOP_LEFT";
17
+ TextEntityAlignment[TextEntityAlignment["TOP_CENTER"] = 21] = "TOP_CENTER";
18
+ TextEntityAlignment[TextEntityAlignment["TOP_RIGHT"] = 22] = "TOP_RIGHT";
19
+ TextEntityAlignment[TextEntityAlignment["BOTTOM_LEFT"] = 30] = "BOTTOM_LEFT";
20
+ TextEntityAlignment[TextEntityAlignment["BOTTOM_CENTER"] = 31] = "BOTTOM_CENTER";
21
+ TextEntityAlignment[TextEntityAlignment["BOTTOM_RIGHT"] = 32] = "BOTTOM_RIGHT";
22
+ })(TextEntityAlignment || (TextEntityAlignment = {}));
@@ -0,0 +1,48 @@
1
+ /**
2
+ * DXF Format Serializer.
3
+ * Converts internal entity representations and table records to DXF tag text.
4
+ * Section assembly (tables, blocks, objects, handle seeding) lives in
5
+ * template/template-injector, which serves both template and blank documents.
6
+ */
7
+ import { DxfEntity, HatchEntity, ImageEntity, LayerDef, LinetypeDef, TextStyleDef } from './dxf-entities.js';
8
+ import { HatchPatternLine } from './hatch-patterns.js';
9
+ export declare function nextHandle(): string;
10
+ export declare function resetHandleCounter(start?: number): void;
11
+ /** The handle `nextHandle()` will return next — the value to store in $HANDSEED. */
12
+ export declare function peekHandle(): string;
13
+ /** Format a computed number for DXF: no exponent notation, no negative zero. */
14
+ export declare function fmt(n: number): string;
15
+ /** Handles pre-allocated for one IMAGE entity and its IMAGEDEF / reactor objects. */
16
+ export interface ImageHandles {
17
+ handle: string;
18
+ defHandle: string;
19
+ reactorHandle: string;
20
+ }
21
+ /** Where an entity is written and which document objects it references. */
22
+ export interface EmitContext {
23
+ /** Owner BLOCK_RECORD handle (code 330). */
24
+ owner?: string;
25
+ /** Entity lives in a paper space layout (code 67). */
26
+ paperSpace?: boolean;
27
+ /** IMAGE entity → pre-allocated handles. Required to serialize IMAGE. */
28
+ images?: Map<ImageEntity, ImageHandles>;
29
+ /** Upper-cased layer name → LAYER handle, used for viewport-frozen layers. */
30
+ layerHandles?: Map<string, string>;
31
+ }
32
+ declare function serializeEntity(entity: DxfEntity, ctx?: EmitContext): string;
33
+ /** Resolve a hatch's pattern lines (custom or built-in), scaled and rotated for output. */
34
+ export declare function hatchPatternLines(e: HatchEntity): HatchPatternLine[];
35
+ /** LAYER table record. `plotStyle` / `material` are the document's default object handles. */
36
+ export declare function layerRecord(l: LayerDef, handle: string, owner: string, refs?: {
37
+ plotStyle?: string;
38
+ material?: string;
39
+ }): string;
40
+ export declare function linetypeRecord(lt: LinetypeDef, handle: string, owner: string): string;
41
+ export declare function textStyleRecord(s: TextStyleDef, handle: string, owner: string): string;
42
+ export declare function blockRecord(name: string, handle: string, owner: string, layoutHandle?: string): string;
43
+ /**
44
+ * BLOCK … ENDBLK definition. `blockRecordHandle` owns the block and its content.
45
+ * Paper space layout blocks pass `paperSpace` so their content is flagged 67=1.
46
+ */
47
+ export declare function blockDefinition(name: string, blockRecordHandle: string, basePoint: [number, number], entities: DxfEntity[], ctx?: EmitContext): string;
48
+ export { serializeEntity };