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.
- package/API.md +411 -0
- package/CHANGELOG.md +26 -0
- package/LICENSE +21 -0
- package/README.md +119 -0
- package/dist/core/dxf-builder.d.ts +348 -0
- package/dist/core/dxf-builder.js +549 -0
- package/dist/core/dxf-document.d.ts +220 -0
- package/dist/core/dxf-document.js +529 -0
- package/dist/core/dxf-entities.d.ts +327 -0
- package/dist/core/dxf-entities.js +22 -0
- package/dist/core/dxf-serializer.d.ts +48 -0
- package/dist/core/dxf-serializer.js +595 -0
- package/dist/core/hatch-patterns.d.ts +15 -0
- package/dist/core/hatch-patterns.js +214 -0
- package/dist/core/modelspace.d.ts +106 -0
- package/dist/core/modelspace.js +351 -0
- package/dist/geometry/math.utils.d.ts +8 -0
- package/dist/geometry/math.utils.js +43 -0
- package/dist/geometry/offset.utils.d.ts +32 -0
- package/dist/geometry/offset.utils.js +87 -0
- package/dist/geometry/polyline.utils.d.ts +10 -0
- package/dist/geometry/polyline.utils.js +63 -0
- package/dist/geometry/text.utils.d.ts +15 -0
- package/dist/geometry/text.utils.js +28 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +29 -0
- package/dist/parser/auto-cad-color-index.d.ts +8 -0
- package/dist/parser/auto-cad-color-index.js +265 -0
- package/dist/parser/dim-style-codes.d.ts +5 -0
- package/dist/parser/dim-style-codes.js +32 -0
- package/dist/parser/dxf-parser.d.ts +16 -0
- package/dist/parser/dxf-parser.js +824 -0
- package/dist/parser/entities/3dface.d.ts +5 -0
- package/dist/parser/entities/3dface.js +76 -0
- package/dist/parser/entities/arc.d.ts +5 -0
- package/dist/parser/entities/arc.js +34 -0
- package/dist/parser/entities/attdef.d.ts +5 -0
- package/dist/parser/entities/attdef.js +86 -0
- package/dist/parser/entities/attribute.d.ts +5 -0
- package/dist/parser/entities/attribute.js +106 -0
- package/dist/parser/entities/circle.d.ts +5 -0
- package/dist/parser/entities/circle.js +40 -0
- package/dist/parser/entities/dimension.d.ts +5 -0
- package/dist/parser/entities/dimension.js +65 -0
- package/dist/parser/entities/ellipse.d.ts +5 -0
- package/dist/parser/entities/ellipse.js +42 -0
- package/dist/parser/entities/hatch.d.ts +5 -0
- package/dist/parser/entities/hatch.js +321 -0
- package/dist/parser/entities/insert.d.ts +5 -0
- package/dist/parser/entities/insert.js +52 -0
- package/dist/parser/entities/line.d.ts +5 -0
- package/dist/parser/entities/line.js +30 -0
- package/dist/parser/entities/lwpolyline.d.ts +5 -0
- package/dist/parser/entities/lwpolyline.js +101 -0
- package/dist/parser/entities/mtext.d.ts +5 -0
- package/dist/parser/entities/mtext.js +54 -0
- package/dist/parser/entities/point.d.ts +5 -0
- package/dist/parser/entities/point.js +30 -0
- package/dist/parser/entities/polyline.d.ts +5 -0
- package/dist/parser/entities/polyline.js +85 -0
- package/dist/parser/entities/solid.d.ts +5 -0
- package/dist/parser/entities/solid.js +35 -0
- package/dist/parser/entities/spline.d.ts +5 -0
- package/dist/parser/entities/spline.js +69 -0
- package/dist/parser/entities/text.d.ts +5 -0
- package/dist/parser/entities/text.js +47 -0
- package/dist/parser/entities/vertex.d.ts +5 -0
- package/dist/parser/entities/vertex.js +59 -0
- package/dist/parser/extended-data-parser.d.ts +18 -0
- package/dist/parser/extended-data-parser.js +100 -0
- package/dist/parser/index.d.ts +10 -0
- package/dist/parser/index.js +9 -0
- package/dist/parser/log.d.ts +14 -0
- package/dist/parser/log.js +39 -0
- package/dist/parser/parse-helpers.d.ts +23 -0
- package/dist/parser/parse-helpers.js +128 -0
- package/dist/parser/scanner.d.ts +29 -0
- package/dist/parser/scanner.js +143 -0
- package/dist/parser/types.d.ts +78 -0
- package/dist/parser/types.js +5 -0
- package/dist/symbols/slope-symbol.d.ts +21 -0
- package/dist/symbols/slope-symbol.js +81 -0
- package/dist/symbols/structures.d.ts +9 -0
- package/dist/symbols/structures.js +120 -0
- package/dist/template/blank-document.d.ts +13 -0
- package/dist/template/blank-document.js +13 -0
- package/dist/template/block-registry.d.ts +16 -0
- package/dist/template/block-registry.js +135 -0
- package/dist/template/index.d.ts +17 -0
- package/dist/template/index.js +17 -0
- package/dist/template/template-injector.d.ts +45 -0
- package/dist/template/template-injector.js +487 -0
- package/dist/template/template-reader.d.ts +28 -0
- package/dist/template/template-reader.js +80 -0
- package/dist/types/index.d.ts +24 -0
- package/dist/types/index.js +8 -0
- package/package.json +59 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as helpers from '../parse-helpers.js';
|
|
2
|
+
export default class Face {
|
|
3
|
+
static ForEntityName = '3DFACE';
|
|
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 70: // 1 = Closed shape, 128 = plinegen?, 0 = default
|
|
12
|
+
entity.shape = ((curr.value & 1) === 1);
|
|
13
|
+
entity.hasContinuousLinetypePattern = ((curr.value & 128) === 128);
|
|
14
|
+
break;
|
|
15
|
+
case 10: // X coordinate of point
|
|
16
|
+
entity.vertices = parse3dFaceVertices(scanner, curr);
|
|
17
|
+
curr = scanner.lastReadGroup;
|
|
18
|
+
break;
|
|
19
|
+
default:
|
|
20
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
curr = scanner.next();
|
|
24
|
+
}
|
|
25
|
+
return entity;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function parse3dFaceVertices(scanner, curr) {
|
|
29
|
+
const vertices = [];
|
|
30
|
+
let vertexIsStarted = false;
|
|
31
|
+
let vertexIsFinished = false;
|
|
32
|
+
const verticesPer3dFace = 4; // there can be up to four vertices per face, although 3 is most used for TIN
|
|
33
|
+
for (let i = 0; i <= verticesPer3dFace; i++) {
|
|
34
|
+
const vertex = {};
|
|
35
|
+
while (true) {
|
|
36
|
+
if (curr.code === 0 || vertexIsFinished)
|
|
37
|
+
break;
|
|
38
|
+
switch (curr.code) {
|
|
39
|
+
case 10: // X0
|
|
40
|
+
case 11: // X1
|
|
41
|
+
case 12: // X2
|
|
42
|
+
case 13: // X3
|
|
43
|
+
if (vertexIsStarted) {
|
|
44
|
+
vertexIsFinished = true;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
vertex.x = curr.value;
|
|
48
|
+
vertexIsStarted = true;
|
|
49
|
+
break;
|
|
50
|
+
case 20: // Y
|
|
51
|
+
case 21:
|
|
52
|
+
case 22:
|
|
53
|
+
case 23:
|
|
54
|
+
vertex.y = curr.value;
|
|
55
|
+
break;
|
|
56
|
+
case 30: // Z
|
|
57
|
+
case 31:
|
|
58
|
+
case 32:
|
|
59
|
+
case 33:
|
|
60
|
+
vertex.z = curr.value;
|
|
61
|
+
break;
|
|
62
|
+
default:
|
|
63
|
+
// it is possible to have entity codes after the vertices.
|
|
64
|
+
// So if code is not accounted for return to entity parser where it might be accounted for
|
|
65
|
+
return vertices;
|
|
66
|
+
}
|
|
67
|
+
curr = scanner.next();
|
|
68
|
+
}
|
|
69
|
+
// See https://groups.google.com/forum/#!topic/comp.cad.autocad/9gn8s5O_w6E
|
|
70
|
+
vertices.push(vertex);
|
|
71
|
+
vertexIsStarted = false;
|
|
72
|
+
vertexIsFinished = false;
|
|
73
|
+
}
|
|
74
|
+
scanner.rewind();
|
|
75
|
+
return vertices;
|
|
76
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as helpers from '../parse-helpers.js';
|
|
2
|
+
export default class Arc {
|
|
3
|
+
static ForEntityName = 'ARC';
|
|
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: // X coordinate of point
|
|
12
|
+
entity.center = helpers.parsePoint(scanner);
|
|
13
|
+
break;
|
|
14
|
+
case 40: // radius
|
|
15
|
+
entity.radius = curr.value;
|
|
16
|
+
break;
|
|
17
|
+
case 50: // start angle
|
|
18
|
+
entity.startAngle = Math.PI / 180 * curr.value;
|
|
19
|
+
break;
|
|
20
|
+
case 51: // end angle
|
|
21
|
+
entity.endAngle = Math.PI / 180 * curr.value;
|
|
22
|
+
break;
|
|
23
|
+
case 210:
|
|
24
|
+
entity.extrusionDirection = helpers.parsePoint(scanner);
|
|
25
|
+
break;
|
|
26
|
+
default: // ignored attribute
|
|
27
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
curr = scanner.next();
|
|
31
|
+
}
|
|
32
|
+
return entity;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as helpers from '../parse-helpers.js';
|
|
2
|
+
export default class AttDef {
|
|
3
|
+
static ForEntityName = 'ATTDEF';
|
|
4
|
+
parseEntity(scanner, curr) {
|
|
5
|
+
const entity = {
|
|
6
|
+
type: curr.value,
|
|
7
|
+
scale: 1,
|
|
8
|
+
textStyle: 'STANDARD',
|
|
9
|
+
};
|
|
10
|
+
curr = scanner.next();
|
|
11
|
+
while (true) {
|
|
12
|
+
if (curr.code === 0) {
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
switch (curr.code) {
|
|
16
|
+
case 1:
|
|
17
|
+
entity.text = curr.value;
|
|
18
|
+
break;
|
|
19
|
+
case 2:
|
|
20
|
+
entity.tag = curr.value;
|
|
21
|
+
break;
|
|
22
|
+
case 3:
|
|
23
|
+
entity.prompt = curr.value;
|
|
24
|
+
break;
|
|
25
|
+
case 7:
|
|
26
|
+
entity.textStyle = curr.value;
|
|
27
|
+
break;
|
|
28
|
+
case 10: // X coordinate of 'first alignment point'
|
|
29
|
+
entity.startPoint = helpers.parsePoint(scanner);
|
|
30
|
+
break;
|
|
31
|
+
case 11: // X coordinate of 'second alignment point'
|
|
32
|
+
entity.endPoint = helpers.parsePoint(scanner);
|
|
33
|
+
break;
|
|
34
|
+
case 39:
|
|
35
|
+
entity.thickness = curr.value;
|
|
36
|
+
break;
|
|
37
|
+
case 40:
|
|
38
|
+
entity.textHeight = curr.value;
|
|
39
|
+
break;
|
|
40
|
+
case 41:
|
|
41
|
+
entity.scale = curr.value;
|
|
42
|
+
break;
|
|
43
|
+
case 50:
|
|
44
|
+
entity.rotation = curr.value;
|
|
45
|
+
break;
|
|
46
|
+
case 51:
|
|
47
|
+
entity.obliqueAngle = curr.value;
|
|
48
|
+
break;
|
|
49
|
+
case 70:
|
|
50
|
+
entity.hidden = !!(curr.value & 0x01);
|
|
51
|
+
entity.constant = !!(curr.value & 0x02);
|
|
52
|
+
entity.verificationRequired = !!(curr.value & 0x04);
|
|
53
|
+
entity.preset = !!(curr.value & 0x08);
|
|
54
|
+
break;
|
|
55
|
+
case 71:
|
|
56
|
+
entity.backwards = !!(curr.value & 0x02);
|
|
57
|
+
entity.mirrored = !!(curr.value & 0x04);
|
|
58
|
+
break;
|
|
59
|
+
case 72:
|
|
60
|
+
// TODO: enum values?
|
|
61
|
+
entity.horizontalJustification = curr.value;
|
|
62
|
+
break;
|
|
63
|
+
case 73:
|
|
64
|
+
entity.fieldLength = curr.value;
|
|
65
|
+
break;
|
|
66
|
+
case 74:
|
|
67
|
+
// TODO: enum values?
|
|
68
|
+
entity.verticalJustification = curr.value;
|
|
69
|
+
break;
|
|
70
|
+
case 100:
|
|
71
|
+
break;
|
|
72
|
+
case 101:
|
|
73
|
+
helpers.skipEmbeddedObject(scanner);
|
|
74
|
+
break;
|
|
75
|
+
case 210:
|
|
76
|
+
entity.extrusionDirection = helpers.parsePoint(scanner);
|
|
77
|
+
break;
|
|
78
|
+
default:
|
|
79
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
curr = scanner.next();
|
|
83
|
+
}
|
|
84
|
+
return entity;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as helpers from '../parse-helpers.js';
|
|
2
|
+
export default class Attribute {
|
|
3
|
+
static ForEntityName = 'ATTRIB';
|
|
4
|
+
parseEntity(scanner, curr) {
|
|
5
|
+
const entity = {
|
|
6
|
+
type: curr.value,
|
|
7
|
+
scale: 1,
|
|
8
|
+
textStyle: 'STANDARD',
|
|
9
|
+
};
|
|
10
|
+
curr = scanner.next();
|
|
11
|
+
while (true) {
|
|
12
|
+
if (curr.code === 0) {
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
switch (curr.code) {
|
|
16
|
+
case 1:
|
|
17
|
+
entity.text = curr.value;
|
|
18
|
+
break;
|
|
19
|
+
case 2:
|
|
20
|
+
entity.tag = curr.value;
|
|
21
|
+
break;
|
|
22
|
+
case 3:
|
|
23
|
+
entity.prompt = curr.value;
|
|
24
|
+
break;
|
|
25
|
+
case 7:
|
|
26
|
+
entity.textStyle = curr.value;
|
|
27
|
+
break;
|
|
28
|
+
case 10: // X coordinate of 'first alignment point'
|
|
29
|
+
entity.startPoint = helpers.parsePoint(scanner);
|
|
30
|
+
break;
|
|
31
|
+
case 11: // X coordinate of 'second alignment point'
|
|
32
|
+
entity.endPoint = helpers.parsePoint(scanner);
|
|
33
|
+
break;
|
|
34
|
+
case 39:
|
|
35
|
+
entity.thickness = curr.value;
|
|
36
|
+
break;
|
|
37
|
+
case 40:
|
|
38
|
+
entity.textHeight = curr.value;
|
|
39
|
+
break;
|
|
40
|
+
case 41:
|
|
41
|
+
entity.scale = curr.value;
|
|
42
|
+
break;
|
|
43
|
+
case 44:
|
|
44
|
+
entity.lineSpacingFactor = curr.value;
|
|
45
|
+
break;
|
|
46
|
+
case 45:
|
|
47
|
+
entity.fillBoxScale = curr.value;
|
|
48
|
+
break;
|
|
49
|
+
case 46:
|
|
50
|
+
entity.annotationHeight = curr.value;
|
|
51
|
+
break;
|
|
52
|
+
case 50:
|
|
53
|
+
entity.rotation = curr.value;
|
|
54
|
+
break;
|
|
55
|
+
case 51:
|
|
56
|
+
entity.obliqueAngle = curr.value;
|
|
57
|
+
break;
|
|
58
|
+
case 63:
|
|
59
|
+
entity.backgroundFillColor = curr.value;
|
|
60
|
+
break;
|
|
61
|
+
case 70:
|
|
62
|
+
entity.hidden = !!(curr.value & 0x01);
|
|
63
|
+
entity.constant = !!(curr.value & 0x02);
|
|
64
|
+
entity.verificationRequired = !!(curr.value & 0x04);
|
|
65
|
+
entity.preset = !!(curr.value & 0x08);
|
|
66
|
+
break;
|
|
67
|
+
case 71:
|
|
68
|
+
entity.attachmentPoint = curr.value;
|
|
69
|
+
break;
|
|
70
|
+
case 72:
|
|
71
|
+
entity.horizontalJustification = curr.value;
|
|
72
|
+
break;
|
|
73
|
+
case 73:
|
|
74
|
+
entity.lineSpacing = curr.value;
|
|
75
|
+
break;
|
|
76
|
+
case 74:
|
|
77
|
+
entity.verticalJustification = curr.value;
|
|
78
|
+
break;
|
|
79
|
+
case 90:
|
|
80
|
+
// TODO:: enum
|
|
81
|
+
// 0 = Background fill off
|
|
82
|
+
// 1 = Use background fill color
|
|
83
|
+
// 2 = Use drawing window color as background fill color
|
|
84
|
+
// and 420 ~ 439 background color check
|
|
85
|
+
entity.backgroundFillSetting = curr.value;
|
|
86
|
+
break;
|
|
87
|
+
case 100:
|
|
88
|
+
break;
|
|
89
|
+
case 210:
|
|
90
|
+
entity.extrusionDirection = helpers.parsePoint(scanner);
|
|
91
|
+
break;
|
|
92
|
+
case 280:
|
|
93
|
+
entity.lockPositionFlag = curr.value;
|
|
94
|
+
break;
|
|
95
|
+
case 340:
|
|
96
|
+
entity.hardPointerId = curr.value;
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
curr = scanner.next();
|
|
103
|
+
}
|
|
104
|
+
return entity;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as helpers from '../parse-helpers.js';
|
|
2
|
+
export default class Circle {
|
|
3
|
+
static ForEntityName = 'CIRCLE';
|
|
4
|
+
parseEntity(scanner, curr) {
|
|
5
|
+
const entity = { type: curr.value };
|
|
6
|
+
let endAngle;
|
|
7
|
+
curr = scanner.next();
|
|
8
|
+
while (true) {
|
|
9
|
+
if (curr.code === 0)
|
|
10
|
+
break;
|
|
11
|
+
switch (curr.code) {
|
|
12
|
+
case 10: // X coordinate of point
|
|
13
|
+
entity.center = helpers.parsePoint(scanner);
|
|
14
|
+
break;
|
|
15
|
+
case 40: // radius
|
|
16
|
+
entity.radius = curr.value;
|
|
17
|
+
break;
|
|
18
|
+
case 50: // start angle
|
|
19
|
+
entity.startAngle = Math.PI / 180 * curr.value;
|
|
20
|
+
break;
|
|
21
|
+
case 51: // end angle
|
|
22
|
+
endAngle = Math.PI / 180 * curr.value;
|
|
23
|
+
if (endAngle < entity.startAngle)
|
|
24
|
+
entity.angleLength = endAngle + 2 * Math.PI - entity.startAngle;
|
|
25
|
+
else
|
|
26
|
+
entity.angleLength = endAngle - entity.startAngle;
|
|
27
|
+
entity.endAngle = endAngle;
|
|
28
|
+
break;
|
|
29
|
+
case 210:
|
|
30
|
+
entity.extrusionDirection = helpers.parsePoint(scanner);
|
|
31
|
+
break;
|
|
32
|
+
default: // ignored attribute
|
|
33
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
curr = scanner.next();
|
|
37
|
+
}
|
|
38
|
+
return entity;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import * as helpers from '../parse-helpers.js';
|
|
2
|
+
export default class Dimension {
|
|
3
|
+
static ForEntityName = 'DIMENSION';
|
|
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: // Referenced block name
|
|
12
|
+
entity.block = curr.value;
|
|
13
|
+
break;
|
|
14
|
+
case 3: // Dimension style name
|
|
15
|
+
entity.styleName = curr.value;
|
|
16
|
+
break;
|
|
17
|
+
case 10: // X coordinate of 'first alignment point'
|
|
18
|
+
entity.anchorPoint = helpers.parsePoint(scanner);
|
|
19
|
+
break;
|
|
20
|
+
case 11:
|
|
21
|
+
entity.middleOfText = helpers.parsePoint(scanner);
|
|
22
|
+
break;
|
|
23
|
+
case 12: // Insertion point for clones of a dimension
|
|
24
|
+
entity.insertionPoint = helpers.parsePoint(scanner);
|
|
25
|
+
break;
|
|
26
|
+
case 13: // Definition point for linear and angular dimensions
|
|
27
|
+
entity.linearOrAngularPoint1 = helpers.parsePoint(scanner);
|
|
28
|
+
break;
|
|
29
|
+
case 14: // Definition point for linear and angular dimensions
|
|
30
|
+
entity.linearOrAngularPoint2 = helpers.parsePoint(scanner);
|
|
31
|
+
break;
|
|
32
|
+
case 15: // Definition point for diameter, radius, and angular dimensions
|
|
33
|
+
entity.diameterOrRadiusPoint = helpers.parsePoint(scanner);
|
|
34
|
+
break;
|
|
35
|
+
case 16: // Point defining dimension arc for angular dimensions
|
|
36
|
+
entity.arcPoint = helpers.parsePoint(scanner);
|
|
37
|
+
break;
|
|
38
|
+
case 70: // Dimension type
|
|
39
|
+
entity.dimensionType = curr.value;
|
|
40
|
+
break;
|
|
41
|
+
case 71: // 5 = Middle center
|
|
42
|
+
entity.attachmentPoint = curr.value;
|
|
43
|
+
break;
|
|
44
|
+
case 42: // Actual measurement
|
|
45
|
+
entity.actualMeasurement = curr.value;
|
|
46
|
+
break;
|
|
47
|
+
case 1: // Text entered by user explicitly
|
|
48
|
+
entity.text = curr.value;
|
|
49
|
+
break;
|
|
50
|
+
case 50: // Angle of rotated, horizontal, or vertical dimensions
|
|
51
|
+
entity.angle = curr.value;
|
|
52
|
+
break;
|
|
53
|
+
case 53: // Rotation angle of the dimension text away from its default orientation (the
|
|
54
|
+
//direction of the dimension line)
|
|
55
|
+
entity.textRotation = curr.value;
|
|
56
|
+
break;
|
|
57
|
+
default: // check common entity attributes
|
|
58
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
curr = scanner.next();
|
|
62
|
+
}
|
|
63
|
+
return entity;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as helpers from '../parse-helpers.js';
|
|
2
|
+
export default class Ellipse {
|
|
3
|
+
static ForEntityName = 'ELLIPSE';
|
|
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.center = helpers.parsePoint(scanner);
|
|
13
|
+
break;
|
|
14
|
+
case 11:
|
|
15
|
+
entity.majorAxisEndPoint = helpers.parsePoint(scanner);
|
|
16
|
+
break;
|
|
17
|
+
case 40:
|
|
18
|
+
entity.axisRatio = curr.value;
|
|
19
|
+
break;
|
|
20
|
+
case 41:
|
|
21
|
+
/* Already in radians. */
|
|
22
|
+
entity.startAngle = curr.value;
|
|
23
|
+
break;
|
|
24
|
+
case 42:
|
|
25
|
+
/* Already in radians. */
|
|
26
|
+
entity.endAngle = curr.value;
|
|
27
|
+
break;
|
|
28
|
+
case 2:
|
|
29
|
+
entity.name = curr.value;
|
|
30
|
+
break;
|
|
31
|
+
case 210:
|
|
32
|
+
entity.extrusionDirection = helpers.parsePoint(scanner);
|
|
33
|
+
break;
|
|
34
|
+
default: // check common entity attributes
|
|
35
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
curr = scanner.next();
|
|
39
|
+
}
|
|
40
|
+
return entity;
|
|
41
|
+
}
|
|
42
|
+
}
|