@vitrosoftware/common-ui-ts 1.1.122 → 1.1.124

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 (124) hide show
  1. package/css/std/controls/checkbox/checkbox.css +4 -0
  2. package/css/std/controls/checkbox/img/checkbox-indeterminate.svg +4 -0
  3. package/css/std/controls/date-picker/date-picker.css +1 -25
  4. package/css/std/controls/dxf-viewer/annotation.css +85 -0
  5. package/css/std/controls/dxf-viewer/common.css +24 -0
  6. package/css/std/controls/dxf-viewer/dxf-viewer-index.css +14081 -0
  7. package/css/std/controls/dxf-viewer/dxf-viewer.css +194 -0
  8. package/css/std/controls/dxf-viewer/img/cancel-dark-grey.svg +5 -0
  9. package/css/std/controls/dxf-viewer/img/collapse-bottom.svg +5 -0
  10. package/css/std/controls/dxf-viewer/img/collapse-up-blue.svg +5 -0
  11. package/css/std/controls/dxf-viewer/img/delete-active.svg +11 -0
  12. package/css/std/controls/dxf-viewer/img/delete.svg +11 -0
  13. package/css/std/controls/dxf-viewer/img/draw-annotation.svg +3 -0
  14. package/css/std/controls/dxf-viewer/img/invisible-eye.svg +4 -0
  15. package/css/std/controls/dxf-viewer/img/show-annotation.svg +3 -0
  16. package/css/std/controls/dxf-viewer/img/sidebar-layers-toggle.svg +6 -0
  17. package/css/std/controls/dxf-viewer/img/sidebar-notes-toggle.svg +5 -0
  18. package/css/std/controls/dxf-viewer/img/sidebar-resizer.svg +6 -0
  19. package/css/std/controls/dxf-viewer/img/sidebar-toggle.svg +7 -0
  20. package/css/std/controls/dxf-viewer/img/visible-eye.svg +4 -0
  21. package/css/std/controls/dxf-viewer/img/zoom-in.svg +6 -0
  22. package/css/std/controls/dxf-viewer/img/zoom-out.svg +5 -0
  23. package/css/std/controls/dxf-viewer/layer-list.css +104 -0
  24. package/css/std/controls/dxf-viewer/panel.css +34 -0
  25. package/css/std/controls/dxf-viewer/prop-inspector.css +102 -0
  26. package/css/std/controls/dxf-viewer/select.css +111 -0
  27. package/css/std/controls/dxf-viewer/sidebar.css +190 -0
  28. package/css/std/controls/dxf-viewer/thumbnail-list.css +65 -0
  29. package/css/std/controls/dxf-viewer/toolbar.css +117 -0
  30. package/css/std/controls/dxf-viewer/treeview.css +3 -0
  31. package/css/std/controls/dxf-viewer/treeview.panel.css +108 -0
  32. package/css/std/controls/error-message/error-message.css +22 -0
  33. package/css/std/controls/image-picker/image-picker.css +0 -26
  34. package/css/std/controls/input/input.css +1 -24
  35. package/css/std/controls/issue-tile/issue-tile-header.css +1 -0
  36. package/css/std/controls/login/ntlm-authentication-form.css +9 -12
  37. package/css/std/controls/lookup-picker/lookup-picker-value-list.css +38 -2
  38. package/css/std/controls/lookup-picker/lookup-picker.css +1 -25
  39. package/css/std/controls/table-view/treegrid-context-menu.css +44 -18
  40. package/css/std/controls/table-view/treegrid-message.css +4 -4
  41. package/css/std/controls/time-picker/time-picker.css +1 -25
  42. package/dist/index.css +81 -143
  43. package/dist/index.js +15137 -489
  44. package/dist/index.js.map +1 -1
  45. package/dist/src/controls/Checkbox/Checkbox.d.ts +1 -0
  46. package/dist/src/controls/DxfViewer/DxfViewer.d.ts +6 -0
  47. package/dist/src/controls/DxfViewer/DxfViewerContext.d.ts +31 -0
  48. package/dist/src/controls/DxfViewer/Layer.d.ts +9 -0
  49. package/dist/src/controls/DxfViewer/LayerList.d.ts +11 -0
  50. package/dist/src/controls/DxfViewer/Thumbnail.d.ts +7 -0
  51. package/dist/src/controls/DxfViewer/ThumbnailList.d.ts +6 -0
  52. package/dist/src/controls/DxfViewer/Viewer.d.ts +6 -0
  53. package/dist/src/controls/ErrorMessage/ErrorMessage.d.ts +6 -0
  54. package/dist/src/controls/Login/FormRef.d.ts +3 -0
  55. package/dist/src/controls/Login/LoginConstants.d.ts +2 -1
  56. package/dist/src/controls/Login/LoginFormRef.d.ts +2 -2
  57. package/dist/src/controls/Login/NTLMAuthenticationForm.d.ts +5 -2
  58. package/dist/src/controls/LookupPicker/LookupPicker.d.ts +2 -0
  59. package/dist/src/controls/LookupPicker/ValueList.d.ts +2 -0
  60. package/dist/src/controls/TableView/TableViewConstants.d.ts +11 -0
  61. package/dist/src/controls/TableView/TreeGridTableViewContextImpl.d.ts +1 -0
  62. package/dist/src/controls/TreeView/TreeView.d.ts +4 -0
  63. package/dist/src/controls/TreeView/TreeViewConfig.d.ts +3 -0
  64. package/dist/src/controls/TreeView/TreeViewConstants.d.ts +2 -1
  65. package/dist/src/index.d.ts +7 -1
  66. package/lib/dxf-viewer/BatchingKey.js +91 -0
  67. package/lib/dxf-viewer/DxfFetcher.js +39 -0
  68. package/lib/dxf-viewer/DxfScene.js +2695 -0
  69. package/lib/dxf-viewer/DxfViewer.js +1056 -0
  70. package/lib/dxf-viewer/DxfWorker.js +229 -0
  71. package/lib/dxf-viewer/DynamicBuffer.js +100 -0
  72. package/lib/dxf-viewer/HatchCalculator.js +345 -0
  73. package/lib/dxf-viewer/LinearDimension.js +323 -0
  74. package/lib/dxf-viewer/MTextFormatParser.js +211 -0
  75. package/lib/dxf-viewer/MaterialKey.js +37 -0
  76. package/lib/dxf-viewer/OrbitControls.js +1253 -0
  77. package/lib/dxf-viewer/Pattern.js +94 -0
  78. package/lib/dxf-viewer/RBTree.js +471 -0
  79. package/lib/dxf-viewer/TextRenderer.js +1038 -0
  80. package/lib/dxf-viewer/index.js +42 -0
  81. package/lib/dxf-viewer/math/Matrix2.js +77 -0
  82. package/lib/dxf-viewer/math/utils.js +59 -0
  83. package/lib/dxf-viewer/parser/AutoCadColorIndex.js +265 -0
  84. package/lib/dxf-viewer/parser/DimStyleCodes.js +33 -0
  85. package/lib/dxf-viewer/parser/DxfArrayScanner.js +143 -0
  86. package/lib/dxf-viewer/parser/DxfParser.js +980 -0
  87. package/lib/dxf-viewer/parser/ExtendedDataParse-My.js +91 -0
  88. package/lib/dxf-viewer/parser/ExtendedDataParser.js +123 -0
  89. package/lib/dxf-viewer/parser/ParseHelpers.js +142 -0
  90. package/lib/dxf-viewer/parser/entities/3dface.js +83 -0
  91. package/lib/dxf-viewer/parser/entities/arc.js +38 -0
  92. package/lib/dxf-viewer/parser/entities/attdef.js +89 -0
  93. package/lib/dxf-viewer/parser/entities/attrib.js +34 -0
  94. package/lib/dxf-viewer/parser/entities/attribute.js +109 -0
  95. package/lib/dxf-viewer/parser/entities/circle.js +43 -0
  96. package/lib/dxf-viewer/parser/entities/dimension.js +72 -0
  97. package/lib/dxf-viewer/parser/entities/ellipse.js +46 -0
  98. package/lib/dxf-viewer/parser/entities/hatch.js +343 -0
  99. package/lib/dxf-viewer/parser/entities/insert.js +62 -0
  100. package/lib/dxf-viewer/parser/entities/leader.js +84 -0
  101. package/lib/dxf-viewer/parser/entities/line.js +34 -0
  102. package/lib/dxf-viewer/parser/entities/lwpolyline.js +100 -0
  103. package/lib/dxf-viewer/parser/entities/mtext.js +54 -0
  104. package/lib/dxf-viewer/parser/entities/point.js +35 -0
  105. package/lib/dxf-viewer/parser/entities/polyline.js +92 -0
  106. package/lib/dxf-viewer/parser/entities/solid.js +40 -0
  107. package/lib/dxf-viewer/parser/entities/spline.js +70 -0
  108. package/lib/dxf-viewer/parser/entities/text.js +47 -0
  109. package/lib/dxf-viewer/parser/entities/vertex.js +62 -0
  110. package/lib/dxf-viewer/parser/entities/viewport.js +56 -0
  111. package/lib/dxf-viewer/parser/objects/dictionary.js +29 -0
  112. package/lib/dxf-viewer/parser/objects/layout.js +35 -0
  113. package/lib/dxf-viewer/parser/objects/xrecord.js +29 -0
  114. package/lib/opentype/opentype.module.js +14571 -0
  115. package/lib/three/CSS2DRenderer.js +235 -0
  116. package/lib/three/three.module.js +49912 -0
  117. package/package.json +12 -10
  118. package/src/controls/BimViewer/js/bim-viewer.js +2 -2
  119. package/src/controls/DxfViewer/js/dxf-viewer.js +3580 -0
  120. package/src/controls/PdfViewer/js/pdf-viewer.js +1 -1
  121. package/css/std/controls/input/img/error-message.svg +0 -6
  122. package/css/std/controls/lookup-picker/img/error-message.svg +0 -6
  123. package/css/std/controls/time-picker/img/error-message.svg +0 -6
  124. /package/css/std/controls/{date-picker → error-message}/img/error-message.svg +0 -0
@@ -0,0 +1,109 @@
1
+ import * as helpers from '../ParseHelpers.js';
2
+
3
+ export default function EntityParser() {}
4
+
5
+ EntityParser.ForEntityName = 'ATTRIB';
6
+
7
+ EntityParser.prototype.parseEntity = function (scanner, curr) {
8
+ var entity = {
9
+ type: curr.value,
10
+ scale: 1,
11
+ textStyle: 'STANDARD',
12
+ };
13
+ curr = scanner.next();
14
+ while (curr !== 'EOF') {
15
+ if (curr.code === 0) {
16
+ break;
17
+ }
18
+ switch (curr.code) {
19
+ case 1:
20
+ entity.text = curr.value;
21
+ break;
22
+ case 2:
23
+ entity.tag = curr.value;
24
+ break;
25
+ case 3:
26
+ entity.prompt = curr.value;
27
+ break;
28
+ case 7:
29
+ entity.textStyle = curr.value;
30
+ break;
31
+ case 10: // X coordinate of 'first alignment point'
32
+ entity.startPoint = helpers.parsePoint(scanner);
33
+ break;
34
+ case 11: // X coordinate of 'second alignment point'
35
+ entity.endPoint = helpers.parsePoint(scanner);
36
+ break;
37
+ case 39:
38
+ entity.thickness = curr.value;
39
+ break;
40
+ case 40:
41
+ entity.textHeight = curr.value;
42
+ break;
43
+ case 41:
44
+ entity.scale = curr.value;
45
+ break;
46
+ case 44:
47
+ entity.lineSpacingFactor = curr.value;
48
+ break;
49
+ case 45:
50
+ entity.fillBoxScale = curr.value;
51
+ break;
52
+ case 46:
53
+ entity.annotationHeight = curr.value;
54
+ break;
55
+ case 50:
56
+ entity.rotation = curr.value;
57
+ break;
58
+ case 51:
59
+ entity.obliqueAngle = curr.value;
60
+ break;
61
+ case 63:
62
+ entity.backgroundFillColor = curr.value;
63
+ break;
64
+ case 70:
65
+ entity.invisible = !!(curr.value & 0x01);
66
+ entity.constant = !!(curr.value & 0x02);
67
+ entity.verificationRequired = !!(curr.value & 0x04);
68
+ entity.preset = !!(curr.value & 0x08);
69
+ break;
70
+ case 71:
71
+ entity.attachmentPoint = curr.value;
72
+ break;
73
+ case 72:
74
+ entity.horizontalJustification = curr.value;
75
+ break;
76
+ case 73:
77
+ entity.lineSpacing = curr.value;
78
+ break;
79
+ case 74:
80
+ entity.verticalJustification = curr.value;
81
+ break;
82
+ case 90:
83
+ // TODO:: enum
84
+ // 0 = Background fill off
85
+ // 1 = Use background fill color
86
+ // 2 = Use drawing window color as background fill color
87
+ // and 420 ~ 439 background color check
88
+ entity.backgroundFillSetting = curr.value;
89
+ break;
90
+ case 100:
91
+ break;
92
+ case 210:
93
+ entity.extrusionDirection = helpers.parsePoint(scanner);
94
+ break;
95
+ case 280:
96
+ entity.lockPositionFlag = curr.value;
97
+ break;
98
+ case 340:
99
+ entity.hardPointerId = curr.value;
100
+ break;
101
+ default:
102
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
103
+ break;
104
+ }
105
+ curr = scanner.next();
106
+ }
107
+
108
+ return entity;
109
+ };
@@ -0,0 +1,43 @@
1
+
2
+ import * as helpers from '../ParseHelpers.js'
3
+
4
+ export default function EntityParser() {}
5
+
6
+ EntityParser.ForEntityName = 'CIRCLE';
7
+
8
+ EntityParser.prototype.parseEntity = function(scanner, curr) {
9
+ var entity, endAngle;
10
+ entity = { type: curr.value };
11
+ curr = scanner.next();
12
+ while(curr !== 'EOF') {
13
+ if(curr.code === 0) break;
14
+
15
+ switch(curr.code) {
16
+ case 10: // X coordinate of point
17
+ entity.center = helpers.parsePoint(scanner);
18
+ break;
19
+ case 40: // radius
20
+ entity.radius = curr.value;
21
+ break;
22
+ case 50: // start angle
23
+ entity.startAngle = Math.PI / 180 * curr.value;
24
+ break;
25
+ case 51: // end angle
26
+ endAngle = Math.PI / 180 * curr.value;
27
+ if(endAngle < entity.startAngle)
28
+ entity.angleLength = endAngle + 2 * Math.PI - entity.startAngle;
29
+ else
30
+ entity.angleLength = endAngle - entity.startAngle;
31
+ entity.endAngle = endAngle;
32
+ break;
33
+ case 210:
34
+ entity.extrusionDirection = helpers.parsePoint(scanner);
35
+ break;
36
+ default: // ignored attribute
37
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
38
+ break;
39
+ }
40
+ curr = scanner.next();
41
+ }
42
+ return entity;
43
+ };
@@ -0,0 +1,72 @@
1
+
2
+ import * as helpers from '../ParseHelpers.js'
3
+
4
+ export default function EntityParser() {}
5
+
6
+ EntityParser.ForEntityName = 'DIMENSION';
7
+
8
+ EntityParser.prototype.parseEntity = function(scanner, curr) {
9
+ var entity;
10
+ entity = { type: curr.value };
11
+ curr = scanner.next();
12
+ while(curr !== 'EOF') {
13
+ if(curr.code === 0) break;
14
+
15
+ switch(curr.code) {
16
+ case 2: // Referenced block name
17
+ entity.block = curr.value;
18
+ break;
19
+ case 3: // Dimension style name
20
+ entity.styleName = curr.value;
21
+ break;
22
+ case 10: // X coordinate of 'first alignment point'
23
+ entity.anchorPoint = helpers.parsePoint(scanner);
24
+ break;
25
+ case 11:
26
+ entity.middleOfText = helpers.parsePoint(scanner);
27
+ break;
28
+ case 12: // Insertion point for clones of a dimension
29
+ entity.insertionPoint = helpers.parsePoint(scanner);
30
+ break;
31
+ case 13: // Definition point for linear and angular dimensions
32
+ entity.linearOrAngularPoint1 = helpers.parsePoint(scanner);
33
+ break;
34
+ case 14: // Definition point for linear and angular dimensions
35
+ entity.linearOrAngularPoint2 = helpers.parsePoint(scanner);
36
+ break;
37
+ case 15: // Definition point for diameter, radius, and angular dimensions
38
+ entity.diameterOrRadiusPoint = helpers.parsePoint(scanner);
39
+ break;
40
+ case 16: // Point defining dimension arc for angular dimensions
41
+ entity.arcPoint = helpers.parsePoint(scanner);
42
+ break;
43
+ case 70: // Dimension type
44
+ entity.dimensionType = curr.value;
45
+ break;
46
+ case 71: // 5 = Middle center
47
+ entity.attachmentPoint = curr.value;
48
+ break;
49
+ case 42: // Actual measurement
50
+ entity.actualMeasurement = curr.value;
51
+ break;
52
+ case 1: // Text entered by user explicitly
53
+ entity.text = curr.value;
54
+ break;
55
+ case 50: // Angle of rotated, horizontal, or vertical dimensions
56
+ entity.angle = curr.value;
57
+ break;
58
+ case 53: // Rotation angle of the dimension text away from its default orientation (the
59
+ //direction of the dimension line)
60
+ entity.textRotation = curr.value;
61
+ break;
62
+ default: // check common entity attributes
63
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
64
+ break;
65
+ }
66
+ curr = scanner.next();
67
+ }
68
+
69
+ return entity;
70
+ };
71
+
72
+
@@ -0,0 +1,46 @@
1
+
2
+ import * as helpers from '../ParseHelpers.js'
3
+
4
+ export default function EntityParser() {}
5
+
6
+ EntityParser.ForEntityName = 'ELLIPSE';
7
+
8
+ EntityParser.prototype.parseEntity = function(scanner, curr) {
9
+ var entity;
10
+ entity = { type: curr.value };
11
+ curr = scanner.next();
12
+ while(curr !== 'EOF') {
13
+ if(curr.code === 0) break;
14
+
15
+ switch(curr.code) {
16
+ case 10:
17
+ entity.center = helpers.parsePoint(scanner);
18
+ break;
19
+ case 11:
20
+ entity.majorAxisEndPoint = helpers.parsePoint(scanner);
21
+ break;
22
+ case 40:
23
+ entity.axisRatio = curr.value;
24
+ break;
25
+ case 41:
26
+ entity.startAngle = curr.value;
27
+ break;
28
+ case 42:
29
+ entity.endAngle = curr.value;
30
+ break;
31
+ case 2:
32
+ entity.name = curr.value;
33
+ break;
34
+ case 210:
35
+ entity.extrusionDirection = helpers.parsePoint(scanner);
36
+ break;
37
+ default: // check common entity attributes
38
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
39
+ break;
40
+ }
41
+
42
+ curr = scanner.next();
43
+ }
44
+
45
+ return entity;
46
+ };
@@ -0,0 +1,343 @@
1
+ import * as helpers from '../ParseHelpers.js'
2
+
3
+ export default function EntityParser() {}
4
+
5
+ EntityParser.ForEntityName = 'HATCH';
6
+
7
+ EntityParser.prototype.parseEntity = function(scanner, curr) {
8
+ var entity;
9
+ entity = { type: curr.value };
10
+
11
+ let numBoundaryLoops = 0;
12
+ let numDefinitionLines = 0;
13
+ let numSeedPoints = 0;
14
+
15
+ curr = scanner.next();
16
+ while(curr !== 'EOF') {
17
+ if (curr.code === 0) break;
18
+
19
+ while (numBoundaryLoops > 0) {
20
+ const loop = ParseBoundaryLoop(curr, scanner)
21
+ if (loop) {
22
+ entity.boundaryLoops.push(loop);
23
+ numBoundaryLoops--;
24
+ curr = scanner.next();
25
+ } else {
26
+ numBoundaryLoops = 0
27
+ }
28
+ }
29
+
30
+ while (numDefinitionLines > 0) {
31
+ const line = ParseDefinitionLine(curr, scanner)
32
+ if (line) {
33
+ entity.definitionLines.push(line);
34
+ numDefinitionLines--;
35
+ curr = scanner.next();
36
+ } else {
37
+ numDefinitionLines = 0
38
+ }
39
+ }
40
+
41
+ while (numSeedPoints > 0) {
42
+ const pt = ParseSeedPoint(curr, scanner);
43
+ if (pt) {
44
+ entity.seedPoints.push(pt);
45
+ numSeedPoints--;
46
+ curr = scanner.next();
47
+ } else {
48
+ numSeedPoints = 0
49
+ }
50
+ }
51
+
52
+ if (curr.code === 0) break;
53
+
54
+ switch(curr.code) {
55
+
56
+ case 2: // Hatch pattern name
57
+ entity.patternName = curr.value;
58
+ break;
59
+
60
+ case 70: //Solid fill flag (solid fill = 1; pattern fill = 0)
61
+ entity.isSolid = curr.value != 0;
62
+ break;
63
+
64
+ case 91: // Number of boundary paths (loops)
65
+ numBoundaryLoops = curr.value;
66
+ if (numBoundaryLoops > 0) {
67
+ entity.boundaryLoops = []
68
+ }
69
+ break;
70
+
71
+ // Hatch style:
72
+ // 0 = Hatch “odd parity” area (Normal style)
73
+ // 1 = Hatch outermost area only (Outer style)
74
+ // 2 = Hatch through entire area (Ignore style)
75
+ case 75:
76
+ entity.hatchStyle = curr.value;
77
+ break;
78
+
79
+ //Hatch pattern type:
80
+ // 0 = User-defined; 1 = Predefined; 2 = Custom
81
+ case 76:
82
+ entity.patternType = curr.value;
83
+ break;
84
+
85
+ case 52: // Hatch pattern angle (pattern fill only)
86
+ entity.patternAngle = curr.value * Math.PI / 180;
87
+ break;
88
+
89
+ case 41: // Hatch pattern scale or spacing (pattern fill only)
90
+ entity.patternScale = curr.value;
91
+ break;
92
+
93
+ case 78: // Number of pattern definition lines
94
+ numDefinitionLines = curr.value;
95
+ if (numDefinitionLines > 0) {
96
+ entity.definitionLines = []
97
+ }
98
+ break;
99
+
100
+ case 98: // Number of seed points
101
+ numSeedPoints = curr.value;
102
+ if (numSeedPoints > 0) {
103
+ entity.seedPoints = []
104
+ }
105
+ break;
106
+
107
+ default: // check common entity attributes
108
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
109
+ break;
110
+ }
111
+ curr = scanner.next();
112
+ }
113
+
114
+ return entity;
115
+ };
116
+
117
+ function ParseBoundaryLoop(curr, scanner) {
118
+ let entity = null
119
+
120
+ const ParsePolyline = () => {
121
+ const pl = {vertices: [], isClosed: false};
122
+ let hasBulge = false;
123
+ let numVertices = 0;
124
+ while (true) {
125
+ if (numVertices > 0) {
126
+ for (let i = 0; i < numVertices; i++) {
127
+ if (curr.code != 10) {
128
+ break
129
+ }
130
+ const p = helpers.parsePoint(scanner)
131
+ curr = scanner.next();
132
+ if (curr.code == 42) {
133
+ p.bulge = curr.value
134
+ curr = scanner.next();
135
+ }
136
+ pl.vertices.push(p)
137
+ }
138
+ return pl
139
+ }
140
+
141
+ switch (curr.code) {
142
+ case 72:
143
+ hasBulge = curr.value;
144
+ break;
145
+ case 73:
146
+ pl.isClosed = curr.value;
147
+ break;
148
+ case 93:
149
+ numVertices = curr.value;
150
+ break;
151
+ default:
152
+ return pl;
153
+ }
154
+ curr = scanner.next();
155
+ }
156
+ }
157
+
158
+ const ParseEdge = () => {
159
+ if (curr.code != 72) {
160
+ return null
161
+ }
162
+ const e = {type: curr.value}
163
+ curr = scanner.next();
164
+ const isSpline = e.type == 4
165
+
166
+ while (true) {
167
+ switch (curr.code) {
168
+ case 10:
169
+ if (isSpline) {
170
+ if (!e.controlPoints) {
171
+ e.controlPoints = [];
172
+ }
173
+ e.controlPoints.push(helpers.parsePoint(scanner));
174
+ } else {
175
+ e.start = helpers.parsePoint(scanner);
176
+ }
177
+ break;
178
+ case 11:
179
+ if (isSpline) {
180
+ if (!e.fitPoints) {
181
+ e.fitPoints = [];
182
+ }
183
+ e.fitPoints.push(helpers.parsePoint(scanner));
184
+ } else {
185
+ e.end = helpers.parsePoint(scanner);
186
+ }
187
+ break;
188
+ case 40:
189
+ if (isSpline) {
190
+ if (!e.knotValues) {
191
+ e.knotValues = [];
192
+ }
193
+ e.knotValues.push(curr.value);
194
+ } else {
195
+ e.radius = curr.value;
196
+ }
197
+ break;
198
+ case 50:
199
+ e.startAngle = curr.value * Math.PI / 180;
200
+ break;
201
+ case 51:
202
+ e.endAngle = curr.value * Math.PI / 180;
203
+ break;
204
+ case 73:
205
+ if (isSpline) {
206
+ e.rational = curr.value;
207
+ } else {
208
+ e.isCcw = curr.value;
209
+ }
210
+ break;
211
+ case 74:
212
+ e.periodic = curr.value;
213
+ break;
214
+ case 94:
215
+ e.degreeOfSplineCurve = curr.value;
216
+ break;
217
+
218
+ //XXX ignore some groups for now, mostly spline
219
+ case 95:
220
+ case 96:
221
+ case 40:
222
+ case 42:
223
+ case 97:
224
+ break;
225
+ default:
226
+ return e
227
+ }
228
+ curr = scanner.next();
229
+ }
230
+ }
231
+
232
+ let polylineParsed = false;
233
+ let numEdges = 0;
234
+ let numSourceRefs = 0;
235
+
236
+ while (true) {
237
+
238
+ if (!entity) {
239
+ if (curr.code != 92) {
240
+ return null;
241
+ }
242
+ entity = {type: curr.value};
243
+ curr = scanner.next();
244
+ }
245
+
246
+ if ((entity.type & 2) && !polylineParsed) {
247
+ entity.polyline = ParsePolyline()
248
+ polylineParsed = true
249
+ }
250
+
251
+ while (numEdges) {
252
+ const edge = ParseEdge();
253
+ if (edge) {
254
+ entity.edges.push(edge);
255
+ numEdges--;
256
+ } else {
257
+ numEdges = 0;
258
+ }
259
+ }
260
+
261
+ while (numSourceRefs) {
262
+ if (curr.code == 330) {
263
+ entity.sourceRefs.push(curr.value);
264
+ numSourceRefs--;
265
+ curr = scanner.next();
266
+ } else {
267
+ numSourceRefs = 0
268
+ }
269
+ }
270
+
271
+ switch (curr.code) {
272
+ case 93:
273
+ numEdges = curr.value;
274
+ if (numEdges > 0) {
275
+ entity.edges = []
276
+ }
277
+ break;
278
+ case 97:
279
+ numSourceRefs = curr.value;
280
+ if (numSourceRefs > 0) {
281
+ entity.sourceRefs = []
282
+ }
283
+ break;
284
+ default:
285
+ scanner.rewind();
286
+ return entity;
287
+ }
288
+ curr = scanner.next();
289
+ }
290
+ }
291
+
292
+ function ParseDefinitionLine(curr, scanner) {
293
+ /* Assuming always starts from group 53. */
294
+ if (curr.code != 53) {
295
+ return null
296
+ }
297
+ const entity = {
298
+ angle: curr.value * Math.PI / 180,
299
+ base: {x: 0, y: 0},
300
+ offset: {x: 0, y: 0}
301
+ };
302
+ curr = scanner.next();
303
+
304
+ let numDashes = 0;
305
+ while (true) {
306
+ switch (curr.code) {
307
+ case 43:
308
+ entity.base.x = curr.value;
309
+ break;
310
+ case 44:
311
+ entity.base.y = curr.value;
312
+ break;
313
+ case 45:
314
+ entity.offset.x = curr.value;
315
+ break;
316
+ case 46:
317
+ entity.offset.y = curr.value;
318
+ break;
319
+ case 49:
320
+ if (numDashes > 0) {
321
+ entity.dashes.push(curr.value);
322
+ numDashes--;
323
+ }
324
+ break;
325
+ case 79:
326
+ numDashes = curr.value;
327
+ if (curr.value) {
328
+ entity.dashes = []
329
+ }
330
+ default:
331
+ scanner.rewind();
332
+ return entity;
333
+ }
334
+ curr = scanner.next();
335
+ }
336
+ }
337
+
338
+ function ParseSeedPoint(curr, scanner) {
339
+ if (curr.code != 10) {
340
+ return null
341
+ }
342
+ return helpers.parsePoint(scanner);
343
+ }
@@ -0,0 +1,62 @@
1
+
2
+ import * as helpers from '../ParseHelpers.js'
3
+
4
+ export default function EntityParser() {}
5
+
6
+ EntityParser.ForEntityName = 'INSERT';
7
+
8
+ EntityParser.prototype.parseEntity = function(scanner, curr) {
9
+ var entity;
10
+ entity = { type: curr.value };
11
+ curr = scanner.next();
12
+ while(curr !== 'EOF') {
13
+ if(curr.code === 0) break;
14
+
15
+ switch(curr.code) {
16
+ case 1:
17
+ entity.path = curr.value;
18
+ break;
19
+ case 2:
20
+ entity.name = curr.value;
21
+ break;
22
+ case 41:
23
+ entity.xScale = curr.value;
24
+ break;
25
+ case 42:
26
+ entity.yScale = curr.value;
27
+ break;
28
+ case 43:
29
+ entity.zScale = curr.value;
30
+ break;
31
+ case 10:
32
+ entity.position = helpers.parsePoint(scanner);
33
+ break;
34
+ case 50:
35
+ entity.rotation = curr.value;
36
+ break;
37
+ case 70:
38
+ entity.columnCount = curr.value;
39
+ break;
40
+ case 71:
41
+ entity.rowCount = curr.value;
42
+ break;
43
+ case 44:
44
+ entity.columnSpacing = curr.value;
45
+ break;
46
+ case 45:
47
+ entity.rowSpacing = curr.value;
48
+ break;
49
+ case 210:
50
+ entity.extrusionDirection = helpers.parsePoint(scanner);
51
+ break;
52
+ default: // check common entity attributes
53
+ helpers.checkCommonEntityProperties(entity, curr, scanner);
54
+ break;
55
+ }
56
+ curr = scanner.next();
57
+ }
58
+
59
+ return entity;
60
+ };
61
+
62
+