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,321 @@
1
+ import * as helpers from '../parse-helpers.js';
2
+ export default class Hatch {
3
+ static ForEntityName = 'HATCH';
4
+ parseEntity(scanner, curr) {
5
+ const entity = { type: curr.value };
6
+ let numBoundaryLoops = 0;
7
+ let numDefinitionLines = 0;
8
+ let numSeedPoints = 0;
9
+ curr = scanner.next();
10
+ while (true) {
11
+ if (curr.code === 0)
12
+ break;
13
+ while (numBoundaryLoops > 0) {
14
+ const loop = ParseBoundaryLoop(curr, scanner);
15
+ if (loop) {
16
+ entity.boundaryLoops.push(loop);
17
+ numBoundaryLoops--;
18
+ curr = scanner.next();
19
+ }
20
+ else {
21
+ numBoundaryLoops = 0;
22
+ }
23
+ }
24
+ while (numDefinitionLines > 0) {
25
+ const line = ParseDefinitionLine(curr, scanner);
26
+ if (line) {
27
+ entity.definitionLines.push(line);
28
+ numDefinitionLines--;
29
+ curr = scanner.next();
30
+ }
31
+ else {
32
+ numDefinitionLines = 0;
33
+ }
34
+ }
35
+ while (numSeedPoints > 0) {
36
+ const pt = ParseSeedPoint(curr, scanner);
37
+ if (pt) {
38
+ entity.seedPoints.push(pt);
39
+ numSeedPoints--;
40
+ curr = scanner.next();
41
+ }
42
+ else {
43
+ numSeedPoints = 0;
44
+ }
45
+ }
46
+ if (curr.code === 0)
47
+ break;
48
+ switch (curr.code) {
49
+ case 2: // Hatch pattern name
50
+ entity.patternName = curr.value;
51
+ break;
52
+ case 70: //Solid fill flag (solid fill = 1; pattern fill = 0)
53
+ entity.isSolid = curr.value != 0;
54
+ break;
55
+ case 91: // Number of boundary paths (loops)
56
+ numBoundaryLoops = curr.value;
57
+ if (numBoundaryLoops > 0) {
58
+ entity.boundaryLoops = [];
59
+ }
60
+ break;
61
+ // Hatch style:
62
+ // 0 = Hatch "odd parity" area (Normal style)
63
+ // 1 = Hatch outermost area only (Outer style)
64
+ // 2 = Hatch through entire area (Ignore style)
65
+ case 75:
66
+ entity.hatchStyle = curr.value;
67
+ break;
68
+ //Hatch pattern type:
69
+ // 0 = User-defined; 1 = Predefined; 2 = Custom
70
+ case 76:
71
+ entity.patternType = curr.value;
72
+ break;
73
+ case 52: // Hatch pattern angle (pattern fill only)
74
+ entity.patternAngle = curr.value * Math.PI / 180;
75
+ break;
76
+ case 41: // Hatch pattern scale or spacing (pattern fill only)
77
+ entity.patternScale = curr.value;
78
+ break;
79
+ case 78: // Number of pattern definition lines
80
+ numDefinitionLines = curr.value;
81
+ if (numDefinitionLines > 0) {
82
+ entity.definitionLines = [];
83
+ }
84
+ break;
85
+ case 98: // Number of seed points
86
+ numSeedPoints = curr.value;
87
+ if (numSeedPoints > 0) {
88
+ entity.seedPoints = [];
89
+ }
90
+ break;
91
+ default: // check common entity attributes
92
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
93
+ break;
94
+ }
95
+ curr = scanner.next();
96
+ }
97
+ return entity;
98
+ }
99
+ }
100
+ function ParseBoundaryLoop(curr, scanner) {
101
+ let entity = null;
102
+ const ParsePolyline = () => {
103
+ const pl = { vertices: [], isClosed: false };
104
+ let hasBulge = false;
105
+ let numVertices = 0;
106
+ while (true) {
107
+ if (numVertices > 0) {
108
+ for (let i = 0; i < numVertices; i++) {
109
+ if (curr.code != 10) {
110
+ break;
111
+ }
112
+ const p = helpers.parsePoint(scanner);
113
+ curr = scanner.next();
114
+ if (curr.code == 42) {
115
+ p.bulge = curr.value;
116
+ curr = scanner.next();
117
+ }
118
+ pl.vertices.push(p);
119
+ }
120
+ return pl;
121
+ }
122
+ switch (curr.code) {
123
+ case 72:
124
+ hasBulge = curr.value;
125
+ break;
126
+ case 73:
127
+ pl.isClosed = curr.value;
128
+ break;
129
+ case 93:
130
+ numVertices = curr.value;
131
+ break;
132
+ default:
133
+ return pl;
134
+ }
135
+ curr = scanner.next();
136
+ }
137
+ };
138
+ const ParseEdge = () => {
139
+ if (curr.code != 72) {
140
+ return null;
141
+ }
142
+ const e = { type: curr.value };
143
+ curr = scanner.next();
144
+ const isSpline = e.type == 4;
145
+ while (true) {
146
+ switch (curr.code) {
147
+ case 10:
148
+ if (isSpline) {
149
+ if (!e.controlPoints) {
150
+ e.controlPoints = [];
151
+ }
152
+ e.controlPoints.push(helpers.parsePoint(scanner));
153
+ }
154
+ else {
155
+ e.start = helpers.parsePoint(scanner);
156
+ }
157
+ break;
158
+ case 11:
159
+ if (isSpline) {
160
+ if (!e.fitPoints) {
161
+ e.fitPoints = [];
162
+ }
163
+ e.fitPoints.push(helpers.parsePoint(scanner));
164
+ }
165
+ else {
166
+ e.end = helpers.parsePoint(scanner);
167
+ }
168
+ break;
169
+ case 40:
170
+ if (isSpline) {
171
+ if (!e.knotValues) {
172
+ e.knotValues = [];
173
+ }
174
+ e.knotValues.push(curr.value);
175
+ }
176
+ else {
177
+ e.radius = curr.value;
178
+ }
179
+ break;
180
+ case 50:
181
+ e.startAngle = curr.value * Math.PI / 180;
182
+ break;
183
+ case 51:
184
+ e.endAngle = curr.value * Math.PI / 180;
185
+ break;
186
+ case 73:
187
+ if (isSpline) {
188
+ e.rational = curr.value;
189
+ }
190
+ else {
191
+ e.isCcw = curr.value;
192
+ }
193
+ break;
194
+ case 74:
195
+ e.periodic = curr.value;
196
+ break;
197
+ case 94:
198
+ e.degreeOfSplineCurve = curr.value;
199
+ break;
200
+ //XXX ignore some groups for now, mostly spline
201
+ case 95:
202
+ case 96:
203
+ case 42:
204
+ case 97:
205
+ break;
206
+ default:
207
+ return e;
208
+ }
209
+ curr = scanner.next();
210
+ }
211
+ };
212
+ let polylineParsed = false;
213
+ let numEdges = 0;
214
+ let numSourceRefs = 0;
215
+ while (true) {
216
+ if (!entity) {
217
+ if (curr.code != 92) {
218
+ return null;
219
+ }
220
+ entity = {
221
+ type: curr.value,
222
+ isExternal: (curr.value & 1) != 0,
223
+ isOutermost: (curr.value & 16) != 0,
224
+ };
225
+ curr = scanner.next();
226
+ }
227
+ if ((entity.type & 2) && !polylineParsed) {
228
+ entity.polyline = ParsePolyline();
229
+ polylineParsed = true;
230
+ }
231
+ while (numEdges) {
232
+ const edge = ParseEdge();
233
+ if (edge) {
234
+ entity.edges.push(edge);
235
+ numEdges--;
236
+ }
237
+ else {
238
+ numEdges = 0;
239
+ }
240
+ }
241
+ while (numSourceRefs) {
242
+ if (curr.code == 330) {
243
+ entity.sourceRefs.push(curr.value);
244
+ numSourceRefs--;
245
+ curr = scanner.next();
246
+ }
247
+ else {
248
+ numSourceRefs = 0;
249
+ }
250
+ }
251
+ switch (curr.code) {
252
+ case 93:
253
+ numEdges = curr.value;
254
+ if (numEdges > 0) {
255
+ entity.edges = [];
256
+ }
257
+ break;
258
+ case 97:
259
+ numSourceRefs = curr.value;
260
+ if (numSourceRefs > 0) {
261
+ entity.sourceRefs = [];
262
+ }
263
+ break;
264
+ default:
265
+ scanner.rewind();
266
+ return entity;
267
+ }
268
+ curr = scanner.next();
269
+ }
270
+ }
271
+ function ParseDefinitionLine(curr, scanner) {
272
+ /* Assuming always starts from group 53. */
273
+ if (curr.code != 53) {
274
+ return null;
275
+ }
276
+ const entity = {
277
+ angle: curr.value * Math.PI / 180,
278
+ base: { x: 0, y: 0 },
279
+ offset: { x: 0, y: 0 },
280
+ };
281
+ curr = scanner.next();
282
+ let numDashes = 0;
283
+ while (true) {
284
+ switch (curr.code) {
285
+ case 43:
286
+ entity.base.x = curr.value;
287
+ break;
288
+ case 44:
289
+ entity.base.y = curr.value;
290
+ break;
291
+ case 45:
292
+ entity.offset.x = curr.value;
293
+ break;
294
+ case 46:
295
+ entity.offset.y = curr.value;
296
+ break;
297
+ case 49:
298
+ if (numDashes > 0) {
299
+ entity.dashes.push(curr.value);
300
+ numDashes--;
301
+ }
302
+ break;
303
+ case 79:
304
+ numDashes = curr.value;
305
+ if (curr.value) {
306
+ entity.dashes = [];
307
+ }
308
+ break;
309
+ default:
310
+ scanner.rewind();
311
+ return entity;
312
+ }
313
+ curr = scanner.next();
314
+ }
315
+ }
316
+ function ParseSeedPoint(curr, scanner) {
317
+ if (curr.code != 10) {
318
+ return null;
319
+ }
320
+ return helpers.parsePoint(scanner);
321
+ }
@@ -0,0 +1,5 @@
1
+ import { DxfEntity, DxfGroup, IEntityParser, IScanner } from '../types.js';
2
+ export default class Insert implements IEntityParser {
3
+ static ForEntityName: string;
4
+ parseEntity(scanner: IScanner, curr: DxfGroup): DxfEntity;
5
+ }
@@ -0,0 +1,52 @@
1
+ import * as helpers from '../parse-helpers.js';
2
+ export default class Insert {
3
+ static ForEntityName = 'INSERT';
4
+ parseEntity(scanner, curr) {
5
+ const entity = { type: curr.value };
6
+ curr = scanner.next();
7
+ while (true) {
8
+ if (curr.code === 0)
9
+ break;
10
+ switch (curr.code) {
11
+ case 2:
12
+ entity.name = curr.value;
13
+ break;
14
+ case 41:
15
+ entity.xScale = curr.value;
16
+ break;
17
+ case 42:
18
+ entity.yScale = curr.value;
19
+ break;
20
+ case 43:
21
+ entity.zScale = curr.value;
22
+ break;
23
+ case 10:
24
+ entity.position = helpers.parsePoint(scanner);
25
+ break;
26
+ case 50:
27
+ entity.rotation = curr.value;
28
+ break;
29
+ case 70:
30
+ entity.columnCount = curr.value;
31
+ break;
32
+ case 71:
33
+ entity.rowCount = curr.value;
34
+ break;
35
+ case 44:
36
+ entity.columnSpacing = curr.value;
37
+ break;
38
+ case 45:
39
+ entity.rowSpacing = curr.value;
40
+ break;
41
+ case 210:
42
+ entity.extrusionDirection = helpers.parsePoint(scanner);
43
+ break;
44
+ default: // check common entity attributes
45
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
46
+ break;
47
+ }
48
+ curr = scanner.next();
49
+ }
50
+ return entity;
51
+ }
52
+ }
@@ -0,0 +1,5 @@
1
+ import { DxfEntity, DxfGroup, IEntityParser, IScanner } from '../types.js';
2
+ export default class Line implements IEntityParser {
3
+ static ForEntityName: string;
4
+ parseEntity(scanner: IScanner, curr: DxfGroup): DxfEntity;
5
+ }
@@ -0,0 +1,30 @@
1
+ import * as helpers from '../parse-helpers.js';
2
+ export default class Line {
3
+ static ForEntityName = 'LINE';
4
+ parseEntity(scanner, curr) {
5
+ const entity = { type: curr.value, vertices: [] };
6
+ curr = scanner.next();
7
+ while (true) {
8
+ if (curr.code === 0)
9
+ break;
10
+ switch (curr.code) {
11
+ case 10: // X coordinate of point
12
+ entity.vertices.unshift(helpers.parsePoint(scanner));
13
+ break;
14
+ case 11:
15
+ entity.vertices.push(helpers.parsePoint(scanner));
16
+ break;
17
+ case 210:
18
+ entity.extrusionDirection = helpers.parsePoint(scanner);
19
+ break;
20
+ case 100:
21
+ break;
22
+ default:
23
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
24
+ break;
25
+ }
26
+ curr = scanner.next();
27
+ }
28
+ return entity;
29
+ }
30
+ }
@@ -0,0 +1,5 @@
1
+ import { DxfEntity, DxfGroup, IEntityParser, IScanner } from '../types.js';
2
+ export default class LWPolyline implements IEntityParser {
3
+ static ForEntityName: string;
4
+ parseEntity(scanner: IScanner, curr: DxfGroup): DxfEntity;
5
+ }
@@ -0,0 +1,101 @@
1
+ import * as helpers from '../parse-helpers.js';
2
+ export default class LWPolyline {
3
+ static ForEntityName = 'LWPOLYLINE';
4
+ parseEntity(scanner, curr) {
5
+ const entity = { type: curr.value, vertices: [] };
6
+ let numberOfVertices = 0;
7
+ curr = scanner.next();
8
+ while (true) {
9
+ if (curr.code === 0)
10
+ break;
11
+ switch (curr.code) {
12
+ case 38:
13
+ entity.elevation = curr.value;
14
+ break;
15
+ case 39:
16
+ entity.depth = curr.value;
17
+ break;
18
+ case 70: // 1 = Closed shape, 128 = plinegen?, 0 = default
19
+ entity.shape = ((curr.value & 1) === 1);
20
+ entity.hasContinuousLinetypePattern = ((curr.value & 128) === 128);
21
+ break;
22
+ case 90:
23
+ numberOfVertices = curr.value;
24
+ break;
25
+ case 10: // X coordinate of point
26
+ entity.vertices = parseLWPolylineVertices(numberOfVertices, scanner);
27
+ break;
28
+ case 43:
29
+ if (curr.value !== 0)
30
+ entity.width = curr.value;
31
+ break;
32
+ case 210:
33
+ entity.extrusionDirection = helpers.parsePoint(scanner);
34
+ break;
35
+ default:
36
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
37
+ break;
38
+ }
39
+ curr = scanner.next();
40
+ }
41
+ return entity;
42
+ }
43
+ }
44
+ function parseLWPolylineVertices(n, scanner) {
45
+ if (!n || n <= 0)
46
+ throw Error('n must be greater than 0 vertices');
47
+ const vertices = [];
48
+ let vertexIsStarted = false;
49
+ let vertexIsFinished = false;
50
+ let curr = scanner.lastReadGroup;
51
+ for (let i = 0; i < n; i++) {
52
+ const vertex = {};
53
+ while (true) {
54
+ if (curr.code === 0 || vertexIsFinished)
55
+ break;
56
+ switch (curr.code) {
57
+ case 10: // X
58
+ if (vertexIsStarted) {
59
+ vertexIsFinished = true;
60
+ continue;
61
+ }
62
+ vertex.x = curr.value;
63
+ vertexIsStarted = true;
64
+ break;
65
+ case 20: // Y
66
+ vertex.y = curr.value;
67
+ break;
68
+ case 30: // Z
69
+ vertex.z = curr.value;
70
+ break;
71
+ case 40: // start width
72
+ vertex.startWidth = curr.value;
73
+ break;
74
+ case 41: // end width
75
+ vertex.endWidth = curr.value;
76
+ break;
77
+ case 42: // bulge
78
+ if (curr.value != 0)
79
+ vertex.bulge = curr.value;
80
+ break;
81
+ case 91: // vertex identifier
82
+ vertex.id = curr.value;
83
+ break;
84
+ default:
85
+ // if we do not hit known code return vertices. Code might belong to entity
86
+ if (vertexIsStarted) {
87
+ vertices.push(vertex);
88
+ }
89
+ scanner.rewind();
90
+ return vertices;
91
+ }
92
+ curr = scanner.next();
93
+ }
94
+ // See https://groups.google.com/forum/#!topic/comp.cad.autocad/9gn8s5O_w6E
95
+ vertices.push(vertex);
96
+ vertexIsStarted = false;
97
+ vertexIsFinished = false;
98
+ }
99
+ scanner.rewind();
100
+ return vertices;
101
+ }
@@ -0,0 +1,5 @@
1
+ import { DxfEntity, DxfGroup, IEntityParser, IScanner } from '../types.js';
2
+ export default class MText implements IEntityParser {
3
+ static ForEntityName: string;
4
+ parseEntity(scanner: IScanner, curr: DxfGroup): DxfEntity;
5
+ }
@@ -0,0 +1,54 @@
1
+ import * as helpers from '../parse-helpers.js';
2
+ export default class MText {
3
+ static ForEntityName = 'MTEXT';
4
+ parseEntity(scanner, curr) {
5
+ const entity = { type: curr.value };
6
+ curr = scanner.next();
7
+ while (true) {
8
+ if (curr.code === 0)
9
+ break;
10
+ switch (curr.code) {
11
+ case 3:
12
+ case 1:
13
+ entity.text ? entity.text += curr.value : entity.text = curr.value;
14
+ break;
15
+ case 10:
16
+ entity.position = helpers.parsePoint(scanner);
17
+ break;
18
+ case 11:
19
+ entity.direction = helpers.parsePoint(scanner);
20
+ break;
21
+ case 40:
22
+ //Note: this is the text height
23
+ entity.height = curr.value;
24
+ break;
25
+ case 41:
26
+ entity.width = curr.value;
27
+ break;
28
+ case 44:
29
+ entity.lineSpacing = curr.value;
30
+ break;
31
+ case 50:
32
+ entity.rotation = curr.value;
33
+ break;
34
+ case 7: // Text style name
35
+ entity.styleName = curr.value;
36
+ break;
37
+ case 71:
38
+ entity.attachmentPoint = curr.value;
39
+ break;
40
+ case 72:
41
+ entity.drawingDirection = curr.value;
42
+ break;
43
+ case 101:
44
+ helpers.skipEmbeddedObject(scanner);
45
+ break;
46
+ default:
47
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
48
+ break;
49
+ }
50
+ curr = scanner.next();
51
+ }
52
+ return entity;
53
+ }
54
+ }
@@ -0,0 +1,5 @@
1
+ import { DxfEntity, DxfGroup, IEntityParser, IScanner } from '../types.js';
2
+ export default class Point implements IEntityParser {
3
+ static ForEntityName: string;
4
+ parseEntity(scanner: IScanner, curr: DxfGroup): DxfEntity;
5
+ }
@@ -0,0 +1,30 @@
1
+ import * as helpers from '../parse-helpers.js';
2
+ export default class Point {
3
+ static ForEntityName = 'POINT';
4
+ parseEntity(scanner, curr) {
5
+ const entity = { type: curr.value };
6
+ curr = scanner.next();
7
+ while (true) {
8
+ if (curr.code === 0)
9
+ break;
10
+ switch (curr.code) {
11
+ case 10:
12
+ entity.position = helpers.parsePoint(scanner);
13
+ break;
14
+ case 39:
15
+ entity.thickness = curr.value;
16
+ break;
17
+ case 210:
18
+ entity.extrusionDirection = helpers.parsePoint(scanner);
19
+ break;
20
+ case 100:
21
+ break;
22
+ default: // check common entity attributes
23
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
24
+ break;
25
+ }
26
+ curr = scanner.next();
27
+ }
28
+ return entity;
29
+ }
30
+ }
@@ -0,0 +1,5 @@
1
+ import { DxfEntity, DxfGroup, IEntityParser, IScanner } from '../types.js';
2
+ export default class Polyline implements IEntityParser {
3
+ static ForEntityName: string;
4
+ parseEntity(scanner: IScanner, curr: DxfGroup): DxfEntity;
5
+ }