fl-web-component 2.0.19-beta.3 → 2.1.1-beta.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/dist/fl-web-component.common.js +4417 -687
- package/dist/fl-web-component.common.js.map +1 -1
- package/dist/fl-web-component.css +1 -1
- package/package.json +1 -1
- package/packages/components/com-flcanvas/components/entityFormatting.js +134 -1
- package/packages/components/com-flcanvas/index.vue +335 -239
- package/packages/components/com-graphics/index.vue +333 -24
- package/src/utils/dxf-parser/AutoCadColorIndex.js +265 -0
- package/src/utils/dxf-parser/DimStyleCodes.js +33 -0
- package/src/utils/dxf-parser/DxfArrayScanner.js +151 -0
- package/src/utils/dxf-parser/DxfParser.js +918 -0
- package/src/utils/dxf-parser/ExtendedDataParser.js +117 -0
- package/src/utils/dxf-parser/LICENSE +21 -0
- package/src/utils/dxf-parser/ParseHelpers.js +140 -0
- package/src/utils/dxf-parser/README.md +8 -0
- package/src/utils/dxf-parser/entities/3dface.js +83 -0
- package/src/utils/dxf-parser/entities/arc.js +38 -0
- package/src/utils/dxf-parser/entities/attdef.js +89 -0
- package/src/utils/dxf-parser/entities/attribute.js +109 -0
- package/src/utils/dxf-parser/entities/circle.js +43 -0
- package/src/utils/dxf-parser/entities/dimension.js +71 -0
- package/src/utils/dxf-parser/entities/ellipse.js +48 -0
- package/src/utils/dxf-parser/entities/hatch.js +348 -0
- package/src/utils/dxf-parser/entities/insert.js +57 -0
- package/src/utils/dxf-parser/entities/line.js +34 -0
- package/src/utils/dxf-parser/entities/lwpolyline.js +103 -0
- package/src/utils/dxf-parser/entities/mtext.js +57 -0
- package/src/utils/dxf-parser/entities/point.js +35 -0
- package/src/utils/dxf-parser/entities/polyline.js +92 -0
- package/src/utils/dxf-parser/entities/solid.js +40 -0
- package/src/utils/dxf-parser/entities/spline.js +70 -0
- package/src/utils/dxf-parser/entities/text.js +50 -0
- package/src/utils/dxf-parser/entities/vertex.js +62 -0
- package/src/utils/threejs/measure-clear-distance.js +1 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
|
|
2
|
+
import * as helpers from "../ParseHelpers.js"
|
|
3
|
+
|
|
4
|
+
export default function EntityParser() {}
|
|
5
|
+
|
|
6
|
+
EntityParser.ForEntityName = 'MTEXT';
|
|
7
|
+
|
|
8
|
+
EntityParser.prototype.parseEntity = function(scanner, curr) {
|
|
9
|
+
var entity = { type: curr.value };
|
|
10
|
+
curr = scanner.next();
|
|
11
|
+
while(curr !== 'EOF') {
|
|
12
|
+
if(curr.code === 0) break;
|
|
13
|
+
|
|
14
|
+
switch(curr.code) {
|
|
15
|
+
case 3:
|
|
16
|
+
case 1:
|
|
17
|
+
entity.text ? entity.text += curr.value : entity.text = curr.value;
|
|
18
|
+
break;
|
|
19
|
+
case 10:
|
|
20
|
+
entity.position = helpers.parsePoint(scanner);
|
|
21
|
+
break;
|
|
22
|
+
case 11:
|
|
23
|
+
entity.direction = helpers.parsePoint(scanner);
|
|
24
|
+
break;
|
|
25
|
+
case 40:
|
|
26
|
+
//Note: this is the text height
|
|
27
|
+
entity.height = curr.value;
|
|
28
|
+
break;
|
|
29
|
+
case 41:
|
|
30
|
+
entity.width = curr.value;
|
|
31
|
+
break;
|
|
32
|
+
case 44:
|
|
33
|
+
entity.lineSpacing = curr.value;
|
|
34
|
+
break;
|
|
35
|
+
case 50:
|
|
36
|
+
entity.rotation = curr.value;
|
|
37
|
+
break;
|
|
38
|
+
case 7: // Text style name
|
|
39
|
+
entity.styleName = curr.value;
|
|
40
|
+
break;
|
|
41
|
+
case 71:
|
|
42
|
+
entity.attachmentPoint = curr.value;
|
|
43
|
+
break;
|
|
44
|
+
case 72:
|
|
45
|
+
entity.drawingDirection = curr.value;
|
|
46
|
+
break;
|
|
47
|
+
case 101:
|
|
48
|
+
helpers.skipEmbeddedObject(scanner);
|
|
49
|
+
break;
|
|
50
|
+
default:
|
|
51
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
curr = scanner.next();
|
|
55
|
+
}
|
|
56
|
+
return entity;
|
|
57
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
|
|
2
|
+
import * as helpers from "../ParseHelpers.js"
|
|
3
|
+
|
|
4
|
+
export default function EntityParser() {}
|
|
5
|
+
|
|
6
|
+
EntityParser.ForEntityName = 'POINT';
|
|
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.position = helpers.parsePoint(scanner);
|
|
18
|
+
break;
|
|
19
|
+
case 39:
|
|
20
|
+
entity.thickness = curr.value;
|
|
21
|
+
break;
|
|
22
|
+
case 210:
|
|
23
|
+
entity.extrusionDirection = helpers.parsePoint(scanner);
|
|
24
|
+
break;
|
|
25
|
+
case 100:
|
|
26
|
+
break;
|
|
27
|
+
default: // check common entity attributes
|
|
28
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
curr = scanner.next();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return entity;
|
|
35
|
+
};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
|
|
2
|
+
import * as helpers from "../ParseHelpers.js"
|
|
3
|
+
import VertexParser from "./vertex.js";
|
|
4
|
+
|
|
5
|
+
export default function EntityParser() {}
|
|
6
|
+
|
|
7
|
+
EntityParser.ForEntityName = 'POLYLINE';
|
|
8
|
+
|
|
9
|
+
EntityParser.prototype.parseEntity = function(scanner, curr) {
|
|
10
|
+
var entity = { type: curr.value, vertices: [] };
|
|
11
|
+
curr = scanner.next();
|
|
12
|
+
while(curr !== 'EOF') {
|
|
13
|
+
if(curr.code === 0) break;
|
|
14
|
+
|
|
15
|
+
switch(curr.code) {
|
|
16
|
+
case 10: // always 0
|
|
17
|
+
break;
|
|
18
|
+
case 20: // always 0
|
|
19
|
+
break;
|
|
20
|
+
case 30: // elevation
|
|
21
|
+
break;
|
|
22
|
+
case 39: // thickness
|
|
23
|
+
entity.thickness = curr.value;
|
|
24
|
+
break;
|
|
25
|
+
case 40: // start width
|
|
26
|
+
break;
|
|
27
|
+
case 41: // end width
|
|
28
|
+
break;
|
|
29
|
+
case 70:
|
|
30
|
+
entity.shape = (curr.value & 1) !== 0;
|
|
31
|
+
entity.includesCurveFitVertices = (curr.value & 2) !== 0;
|
|
32
|
+
entity.includesSplineFitVertices = (curr.value & 4) !== 0;
|
|
33
|
+
entity.is3dPolyline = (curr.value & 8) !== 0;
|
|
34
|
+
entity.is3dPolygonMesh = (curr.value & 16) !== 0;
|
|
35
|
+
entity.is3dPolygonMeshClosed = (curr.value & 32) !== 0; // 32 = The polygon mesh is closed in the N direction
|
|
36
|
+
entity.isPolyfaceMesh = (curr.value & 64) !== 0;
|
|
37
|
+
entity.hasContinuousLinetypePattern = (curr.value & 128) !== 0;
|
|
38
|
+
break;
|
|
39
|
+
case 71: // Polygon mesh M vertex count
|
|
40
|
+
break;
|
|
41
|
+
case 72: // Polygon mesh N vertex count
|
|
42
|
+
break;
|
|
43
|
+
case 73: // Smooth surface M density
|
|
44
|
+
break;
|
|
45
|
+
case 74: // Smooth surface N density
|
|
46
|
+
break;
|
|
47
|
+
case 75: // Curves and smooth surface type
|
|
48
|
+
break;
|
|
49
|
+
case 210:
|
|
50
|
+
entity.extrusionDirection = helpers.parsePoint(scanner);
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
curr = scanner.next();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
entity.vertices = parsePolylineVertices(scanner, curr);
|
|
60
|
+
|
|
61
|
+
return entity;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
function parsePolylineVertices(scanner, curr) {
|
|
65
|
+
var vertexParser = new VertexParser();
|
|
66
|
+
|
|
67
|
+
var vertices = [];
|
|
68
|
+
while (!scanner.isEOF()) {
|
|
69
|
+
if (curr.code === 0) {
|
|
70
|
+
if (curr.value === 'VERTEX') {
|
|
71
|
+
vertices.push(vertexParser.parseEntity(scanner, curr));
|
|
72
|
+
curr = scanner.lastReadGroup;
|
|
73
|
+
} else if (curr.value === 'SEQEND') {
|
|
74
|
+
parseSeqEnd(scanner, curr);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return vertices;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
function parseSeqEnd(scanner, curr) {
|
|
83
|
+
var entity = { type: curr.value };
|
|
84
|
+
curr = scanner.next();
|
|
85
|
+
while(curr != 'EOF') {
|
|
86
|
+
if (curr.code == 0) break;
|
|
87
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
88
|
+
curr = scanner.next();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return entity;
|
|
92
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
|
|
2
|
+
import * as helpers from "../ParseHelpers.js"
|
|
3
|
+
|
|
4
|
+
export default function EntityParser() {}
|
|
5
|
+
|
|
6
|
+
EntityParser.ForEntityName = 'SOLID';
|
|
7
|
+
|
|
8
|
+
EntityParser.prototype.parseEntity = function(scanner, currentGroup) {
|
|
9
|
+
var entity;
|
|
10
|
+
entity = { type: currentGroup.value };
|
|
11
|
+
entity.points = [];
|
|
12
|
+
currentGroup = scanner.next();
|
|
13
|
+
while(currentGroup !== 'EOF') {
|
|
14
|
+
if(currentGroup.code === 0) break;
|
|
15
|
+
|
|
16
|
+
switch(currentGroup.code) {
|
|
17
|
+
case 10:
|
|
18
|
+
entity.points[0] = helpers.parsePoint(scanner);
|
|
19
|
+
break;
|
|
20
|
+
case 11:
|
|
21
|
+
entity.points[1] = helpers.parsePoint(scanner);
|
|
22
|
+
break;
|
|
23
|
+
case 12:
|
|
24
|
+
entity.points[2] = helpers.parsePoint(scanner);
|
|
25
|
+
break;
|
|
26
|
+
case 13:
|
|
27
|
+
entity.points[3] = helpers.parsePoint(scanner);
|
|
28
|
+
break;
|
|
29
|
+
case 210:
|
|
30
|
+
entity.extrusionDirection = helpers.parsePoint(scanner);
|
|
31
|
+
break;
|
|
32
|
+
default: // check common entity attributes
|
|
33
|
+
helpers.checkCommonEntityProperties(entity, currentGroup, scanner);
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
currentGroup = scanner.next();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return entity;
|
|
40
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
|
|
2
|
+
import * as helpers from "../ParseHelpers.js"
|
|
3
|
+
|
|
4
|
+
export default function EntityParser() {}
|
|
5
|
+
|
|
6
|
+
EntityParser.ForEntityName = 'SPLINE';
|
|
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
|
+
{
|
|
14
|
+
if(curr.code === 0) break;
|
|
15
|
+
|
|
16
|
+
switch(curr.code) {
|
|
17
|
+
case 10:
|
|
18
|
+
if (!entity.controlPoints) entity.controlPoints = [];
|
|
19
|
+
entity.controlPoints.push(helpers.parsePoint(scanner));
|
|
20
|
+
break;
|
|
21
|
+
case 11:
|
|
22
|
+
if (!entity.fitPoints) entity.fitPoints = [];
|
|
23
|
+
entity.fitPoints.push(helpers.parsePoint(scanner));
|
|
24
|
+
break;
|
|
25
|
+
case 12:
|
|
26
|
+
entity.startTangent = helpers.parsePoint(scanner);
|
|
27
|
+
break;
|
|
28
|
+
case 13:
|
|
29
|
+
entity.endTangent = helpers.parsePoint(scanner);
|
|
30
|
+
break;
|
|
31
|
+
case 40:
|
|
32
|
+
if (!entity.knotValues) entity.knotValues = [];
|
|
33
|
+
entity.knotValues.push(curr.value);
|
|
34
|
+
break;
|
|
35
|
+
case 70:
|
|
36
|
+
if ((curr.value & 1) != 0) entity.closed = true;
|
|
37
|
+
if ((curr.value & 2) != 0) entity.periodic = true;
|
|
38
|
+
if ((curr.value & 4) != 0) entity.rational = true;
|
|
39
|
+
if ((curr.value & 8) != 0) entity.planar = true;
|
|
40
|
+
if ((curr.value & 16) != 0)
|
|
41
|
+
{
|
|
42
|
+
entity.planar = true;
|
|
43
|
+
entity.linear = true;
|
|
44
|
+
}
|
|
45
|
+
break;
|
|
46
|
+
|
|
47
|
+
case 71:
|
|
48
|
+
entity.degreeOfSplineCurve = curr.value;
|
|
49
|
+
break;
|
|
50
|
+
case 72:
|
|
51
|
+
entity.numberOfKnots = curr.value;
|
|
52
|
+
break;
|
|
53
|
+
case 73:
|
|
54
|
+
entity.numberOfControlPoints = curr.value;
|
|
55
|
+
break;
|
|
56
|
+
case 74:
|
|
57
|
+
entity.numberOfFitPoints = curr.value;
|
|
58
|
+
break;
|
|
59
|
+
case 210:
|
|
60
|
+
entity.extrusionDirection = helpers.parsePoint(scanner);
|
|
61
|
+
break;
|
|
62
|
+
default:
|
|
63
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
curr = scanner.next();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return entity;
|
|
70
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
|
|
2
|
+
import * as helpers from "../ParseHelpers.js"
|
|
3
|
+
|
|
4
|
+
export default function EntityParser() {}
|
|
5
|
+
|
|
6
|
+
EntityParser.ForEntityName = 'TEXT';
|
|
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
|
+
switch(curr.code) {
|
|
15
|
+
case 10: // X coordinate of 'first alignment point'
|
|
16
|
+
entity.startPoint = helpers.parsePoint(scanner);
|
|
17
|
+
break;
|
|
18
|
+
case 11: // X coordinate of 'second alignment point'
|
|
19
|
+
entity.endPoint = helpers.parsePoint(scanner);
|
|
20
|
+
break;
|
|
21
|
+
case 40: // Text height
|
|
22
|
+
entity.textHeight = curr.value;
|
|
23
|
+
break;
|
|
24
|
+
case 41:
|
|
25
|
+
entity.xScale = curr.value;
|
|
26
|
+
break;
|
|
27
|
+
case 50: // Rotation in degrees
|
|
28
|
+
entity.rotation = curr.value;
|
|
29
|
+
break;
|
|
30
|
+
case 7: // Text style name
|
|
31
|
+
entity.styleName = curr.value;
|
|
32
|
+
break;
|
|
33
|
+
case 1: // Text
|
|
34
|
+
entity.text = curr.value;
|
|
35
|
+
break;
|
|
36
|
+
// NOTE: 72 and 73 are meaningless without 11 (second alignment point)
|
|
37
|
+
case 72: // Horizontal alignment
|
|
38
|
+
entity.halign = curr.value;
|
|
39
|
+
break;
|
|
40
|
+
case 73: // Vertical alignment
|
|
41
|
+
entity.valign = curr.value;
|
|
42
|
+
break;
|
|
43
|
+
default: // check common entity attributes
|
|
44
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
curr = scanner.next();
|
|
48
|
+
}
|
|
49
|
+
return entity;
|
|
50
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
|
|
2
|
+
import * as helpers from "../ParseHelpers.js"
|
|
3
|
+
|
|
4
|
+
export default function EntityParser() {}
|
|
5
|
+
|
|
6
|
+
EntityParser.ForEntityName = 'VERTEX';
|
|
7
|
+
|
|
8
|
+
EntityParser.prototype.parseEntity = function(scanner, curr) {
|
|
9
|
+
var entity = { type: curr.value };
|
|
10
|
+
curr = scanner.next();
|
|
11
|
+
while(curr !== 'EOF') {
|
|
12
|
+
if(curr.code === 0) break;
|
|
13
|
+
|
|
14
|
+
switch(curr.code) {
|
|
15
|
+
case 10: // X
|
|
16
|
+
entity.x = curr.value;
|
|
17
|
+
break;
|
|
18
|
+
case 20: // Y
|
|
19
|
+
entity.y = curr.value;
|
|
20
|
+
break;
|
|
21
|
+
case 30: // Z
|
|
22
|
+
entity.z = curr.value;
|
|
23
|
+
break;
|
|
24
|
+
case 40: // start width
|
|
25
|
+
break;
|
|
26
|
+
case 41: // end width
|
|
27
|
+
break;
|
|
28
|
+
case 42: // bulge
|
|
29
|
+
if(curr.value != 0) entity.bulge = curr.value;
|
|
30
|
+
break;
|
|
31
|
+
case 70: // flags
|
|
32
|
+
entity.curveFittingVertex = (curr.value & 1) !== 0;
|
|
33
|
+
entity.curveFitTangent = (curr.value & 2) !== 0;
|
|
34
|
+
entity.splineVertex = (curr.value & 8) !== 0;
|
|
35
|
+
entity.splineControlPoint = (curr.value & 16) !== 0;
|
|
36
|
+
entity.threeDPolylineVertex = (curr.value & 32) !== 0;
|
|
37
|
+
entity.threeDPolylineMesh = (curr.value & 64) !== 0;
|
|
38
|
+
entity.polyfaceMeshVertex = (curr.value & 128) !== 0;
|
|
39
|
+
break;
|
|
40
|
+
case 50: // curve fit tangent direction
|
|
41
|
+
break;
|
|
42
|
+
case 71: // polyface mesh vertex index
|
|
43
|
+
entity.faces = [curr.value];
|
|
44
|
+
break;
|
|
45
|
+
case 72: // polyface mesh vertex index
|
|
46
|
+
entity.faces[1] = curr.value;
|
|
47
|
+
break;
|
|
48
|
+
case 73: // polyface mesh vertex index
|
|
49
|
+
entity.faces[2] = curr.value;
|
|
50
|
+
break;
|
|
51
|
+
case 74: // polyface mesh vertex index
|
|
52
|
+
entity.faces[3] = curr.value;
|
|
53
|
+
break;
|
|
54
|
+
default:
|
|
55
|
+
helpers.checkCommonEntityProperties(entity, curr, scanner);
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
curr = scanner.next();
|
|
60
|
+
}
|
|
61
|
+
return entity;
|
|
62
|
+
};
|
|
@@ -135,7 +135,7 @@ MeasureClearDistance.prototype = {
|
|
|
135
135
|
const worldPts2 = localPts2.map(p => p.clone().applyMatrix4(wm2));
|
|
136
136
|
let closestPair = this.findClosestPair(worldPts1, worldPts2);
|
|
137
137
|
// 局部精细搜索
|
|
138
|
-
const radius = closestPair.distance *
|
|
138
|
+
const radius = closestPair.distance * 4;
|
|
139
139
|
const localPts1Fine = this.sampleLocal(obj1.object, obj1.instanceId, closestPair.point1, radius, 1000);
|
|
140
140
|
const localPts2Fine = this.sampleLocal(obj2.object, obj2.instanceId, closestPair.point2, radius, 1000);
|
|
141
141
|
const combined1 = worldPts1.filter(p => p.distanceTo(closestPair.point1) < radius).concat(localPts1Fine);
|