@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.
- package/css/std/controls/checkbox/checkbox.css +4 -0
- package/css/std/controls/checkbox/img/checkbox-indeterminate.svg +4 -0
- package/css/std/controls/date-picker/date-picker.css +1 -25
- package/css/std/controls/dxf-viewer/annotation.css +85 -0
- package/css/std/controls/dxf-viewer/common.css +24 -0
- package/css/std/controls/dxf-viewer/dxf-viewer-index.css +14081 -0
- package/css/std/controls/dxf-viewer/dxf-viewer.css +194 -0
- package/css/std/controls/dxf-viewer/img/cancel-dark-grey.svg +5 -0
- package/css/std/controls/dxf-viewer/img/collapse-bottom.svg +5 -0
- package/css/std/controls/dxf-viewer/img/collapse-up-blue.svg +5 -0
- package/css/std/controls/dxf-viewer/img/delete-active.svg +11 -0
- package/css/std/controls/dxf-viewer/img/delete.svg +11 -0
- package/css/std/controls/dxf-viewer/img/draw-annotation.svg +3 -0
- package/css/std/controls/dxf-viewer/img/invisible-eye.svg +4 -0
- package/css/std/controls/dxf-viewer/img/show-annotation.svg +3 -0
- package/css/std/controls/dxf-viewer/img/sidebar-layers-toggle.svg +6 -0
- package/css/std/controls/dxf-viewer/img/sidebar-notes-toggle.svg +5 -0
- package/css/std/controls/dxf-viewer/img/sidebar-resizer.svg +6 -0
- package/css/std/controls/dxf-viewer/img/sidebar-toggle.svg +7 -0
- package/css/std/controls/dxf-viewer/img/visible-eye.svg +4 -0
- package/css/std/controls/dxf-viewer/img/zoom-in.svg +6 -0
- package/css/std/controls/dxf-viewer/img/zoom-out.svg +5 -0
- package/css/std/controls/dxf-viewer/layer-list.css +104 -0
- package/css/std/controls/dxf-viewer/panel.css +34 -0
- package/css/std/controls/dxf-viewer/prop-inspector.css +102 -0
- package/css/std/controls/dxf-viewer/select.css +111 -0
- package/css/std/controls/dxf-viewer/sidebar.css +190 -0
- package/css/std/controls/dxf-viewer/thumbnail-list.css +65 -0
- package/css/std/controls/dxf-viewer/toolbar.css +117 -0
- package/css/std/controls/dxf-viewer/treeview.css +3 -0
- package/css/std/controls/dxf-viewer/treeview.panel.css +108 -0
- package/css/std/controls/error-message/error-message.css +22 -0
- package/css/std/controls/image-picker/image-picker.css +0 -26
- package/css/std/controls/input/input.css +1 -24
- package/css/std/controls/issue-tile/issue-tile-header.css +1 -0
- package/css/std/controls/login/ntlm-authentication-form.css +9 -12
- package/css/std/controls/lookup-picker/lookup-picker-value-list.css +38 -2
- package/css/std/controls/lookup-picker/lookup-picker.css +1 -25
- package/css/std/controls/table-view/treegrid-context-menu.css +44 -18
- package/css/std/controls/table-view/treegrid-message.css +4 -4
- package/css/std/controls/time-picker/time-picker.css +1 -25
- package/dist/index.css +81 -143
- package/dist/index.js +15137 -489
- package/dist/index.js.map +1 -1
- package/dist/src/controls/Checkbox/Checkbox.d.ts +1 -0
- package/dist/src/controls/DxfViewer/DxfViewer.d.ts +6 -0
- package/dist/src/controls/DxfViewer/DxfViewerContext.d.ts +31 -0
- package/dist/src/controls/DxfViewer/Layer.d.ts +9 -0
- package/dist/src/controls/DxfViewer/LayerList.d.ts +11 -0
- package/dist/src/controls/DxfViewer/Thumbnail.d.ts +7 -0
- package/dist/src/controls/DxfViewer/ThumbnailList.d.ts +6 -0
- package/dist/src/controls/DxfViewer/Viewer.d.ts +6 -0
- package/dist/src/controls/ErrorMessage/ErrorMessage.d.ts +6 -0
- package/dist/src/controls/Login/FormRef.d.ts +3 -0
- package/dist/src/controls/Login/LoginConstants.d.ts +2 -1
- package/dist/src/controls/Login/LoginFormRef.d.ts +2 -2
- package/dist/src/controls/Login/NTLMAuthenticationForm.d.ts +5 -2
- package/dist/src/controls/LookupPicker/LookupPicker.d.ts +2 -0
- package/dist/src/controls/LookupPicker/ValueList.d.ts +2 -0
- package/dist/src/controls/TableView/TableViewConstants.d.ts +11 -0
- package/dist/src/controls/TableView/TreeGridTableViewContextImpl.d.ts +1 -0
- package/dist/src/controls/TreeView/TreeView.d.ts +4 -0
- package/dist/src/controls/TreeView/TreeViewConfig.d.ts +3 -0
- package/dist/src/controls/TreeView/TreeViewConstants.d.ts +2 -1
- package/dist/src/index.d.ts +7 -1
- package/lib/dxf-viewer/BatchingKey.js +91 -0
- package/lib/dxf-viewer/DxfFetcher.js +39 -0
- package/lib/dxf-viewer/DxfScene.js +2695 -0
- package/lib/dxf-viewer/DxfViewer.js +1056 -0
- package/lib/dxf-viewer/DxfWorker.js +229 -0
- package/lib/dxf-viewer/DynamicBuffer.js +100 -0
- package/lib/dxf-viewer/HatchCalculator.js +345 -0
- package/lib/dxf-viewer/LinearDimension.js +323 -0
- package/lib/dxf-viewer/MTextFormatParser.js +211 -0
- package/lib/dxf-viewer/MaterialKey.js +37 -0
- package/lib/dxf-viewer/OrbitControls.js +1253 -0
- package/lib/dxf-viewer/Pattern.js +94 -0
- package/lib/dxf-viewer/RBTree.js +471 -0
- package/lib/dxf-viewer/TextRenderer.js +1038 -0
- package/lib/dxf-viewer/index.js +42 -0
- package/lib/dxf-viewer/math/Matrix2.js +77 -0
- package/lib/dxf-viewer/math/utils.js +59 -0
- package/lib/dxf-viewer/parser/AutoCadColorIndex.js +265 -0
- package/lib/dxf-viewer/parser/DimStyleCodes.js +33 -0
- package/lib/dxf-viewer/parser/DxfArrayScanner.js +143 -0
- package/lib/dxf-viewer/parser/DxfParser.js +980 -0
- package/lib/dxf-viewer/parser/ExtendedDataParse-My.js +91 -0
- package/lib/dxf-viewer/parser/ExtendedDataParser.js +123 -0
- package/lib/dxf-viewer/parser/ParseHelpers.js +142 -0
- package/lib/dxf-viewer/parser/entities/3dface.js +83 -0
- package/lib/dxf-viewer/parser/entities/arc.js +38 -0
- package/lib/dxf-viewer/parser/entities/attdef.js +89 -0
- package/lib/dxf-viewer/parser/entities/attrib.js +34 -0
- package/lib/dxf-viewer/parser/entities/attribute.js +109 -0
- package/lib/dxf-viewer/parser/entities/circle.js +43 -0
- package/lib/dxf-viewer/parser/entities/dimension.js +72 -0
- package/lib/dxf-viewer/parser/entities/ellipse.js +46 -0
- package/lib/dxf-viewer/parser/entities/hatch.js +343 -0
- package/lib/dxf-viewer/parser/entities/insert.js +62 -0
- package/lib/dxf-viewer/parser/entities/leader.js +84 -0
- package/lib/dxf-viewer/parser/entities/line.js +34 -0
- package/lib/dxf-viewer/parser/entities/lwpolyline.js +100 -0
- package/lib/dxf-viewer/parser/entities/mtext.js +54 -0
- package/lib/dxf-viewer/parser/entities/point.js +35 -0
- package/lib/dxf-viewer/parser/entities/polyline.js +92 -0
- package/lib/dxf-viewer/parser/entities/solid.js +40 -0
- package/lib/dxf-viewer/parser/entities/spline.js +70 -0
- package/lib/dxf-viewer/parser/entities/text.js +47 -0
- package/lib/dxf-viewer/parser/entities/vertex.js +62 -0
- package/lib/dxf-viewer/parser/entities/viewport.js +56 -0
- package/lib/dxf-viewer/parser/objects/dictionary.js +29 -0
- package/lib/dxf-viewer/parser/objects/layout.js +35 -0
- package/lib/dxf-viewer/parser/objects/xrecord.js +29 -0
- package/lib/opentype/opentype.module.js +14571 -0
- package/lib/three/CSS2DRenderer.js +235 -0
- package/lib/three/three.module.js +49912 -0
- package/package.json +12 -10
- package/src/controls/BimViewer/js/bim-viewer.js +2 -2
- package/src/controls/DxfViewer/js/dxf-viewer.js +3580 -0
- package/src/controls/PdfViewer/js/pdf-viewer.js +1 -1
- package/css/std/controls/input/img/error-message.svg +0 -6
- package/css/std/controls/lookup-picker/img/error-message.svg +0 -6
- package/css/std/controls/time-picker/img/error-message.svg +0 -6
- /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
|
+
|