rm-graphical-computing-node 1.0.71 → 1.0.72
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/index.mjs +111 -115
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -774,11 +774,11 @@ var require_concaveman = __commonJS({
|
|
|
774
774
|
while (node) {
|
|
775
775
|
for (var i = 0; i < node.children.length; i++) {
|
|
776
776
|
var child = node.children[i];
|
|
777
|
-
var
|
|
778
|
-
if (
|
|
777
|
+
var dist2 = node.leaf ? sqSegDist(child, b, c) : sqSegBoxDist(b, c, child);
|
|
778
|
+
if (dist2 > maxDist) continue;
|
|
779
779
|
queue.push({
|
|
780
780
|
node: child,
|
|
781
|
-
dist:
|
|
781
|
+
dist: dist2
|
|
782
782
|
});
|
|
783
783
|
}
|
|
784
784
|
while (queue.length && !queue.peek().node.children) {
|
|
@@ -3087,8 +3087,8 @@ var removeNoisePoints = (lines, lineReader, lineEditor) => {
|
|
|
3087
3087
|
let ptCenter = line2.checkResults[g].allCenterPoints[h];
|
|
3088
3088
|
ptCenter = new THREE3.Vector3(ptCenter.x, ptCenter.y, ptCenter.z);
|
|
3089
3089
|
let ptClose = line3.closestPointToPoint(ptCenter, true, ptTarget);
|
|
3090
|
-
let
|
|
3091
|
-
if (Math.abs(
|
|
3090
|
+
let dist2 = ptCenter.distanceTo(ptClose);
|
|
3091
|
+
if (Math.abs(dist2 - halfLen) < 0.01) {
|
|
3092
3092
|
tmpNum++;
|
|
3093
3093
|
if (!removePtsIndexMap.has(g)) {
|
|
3094
3094
|
removePtsIndexMap.set(g, {
|
|
@@ -3234,9 +3234,9 @@ var getFarthestPoints = (points) => {
|
|
|
3234
3234
|
let result = [];
|
|
3235
3235
|
for (let i = 0; i < points.length; i++) {
|
|
3236
3236
|
for (let j = i + 1; j < points.length; j++) {
|
|
3237
|
-
const
|
|
3238
|
-
if (
|
|
3239
|
-
maxDist =
|
|
3237
|
+
const dist2 = points[i].distanceTo(points[j]);
|
|
3238
|
+
if (dist2 > maxDist) {
|
|
3239
|
+
maxDist = dist2;
|
|
3240
3240
|
result = [points[i], points[j]];
|
|
3241
3241
|
}
|
|
3242
3242
|
}
|
|
@@ -3482,10 +3482,10 @@ var voxelDownsample2DForContour = (points, cellSize) => {
|
|
|
3482
3482
|
if (y > cell.maxY[1]) cell.maxY = p;
|
|
3483
3483
|
const dx = x - cell.cx;
|
|
3484
3484
|
const dy = y - cell.cy;
|
|
3485
|
-
const
|
|
3486
|
-
if (
|
|
3485
|
+
const dist2 = dx * dx + dy * dy;
|
|
3486
|
+
if (dist2 < cell.centerDist2) {
|
|
3487
3487
|
cell.center = p;
|
|
3488
|
-
cell.centerDist2 =
|
|
3488
|
+
cell.centerDist2 = dist2;
|
|
3489
3489
|
}
|
|
3490
3490
|
}
|
|
3491
3491
|
const seen = /* @__PURE__ */ new Set();
|
|
@@ -3942,13 +3942,13 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
|
|
|
3942
3942
|
let newDoorSt = new THREE5.Vector3(lines[u4].start.x, lines[u4].start.y, 0);
|
|
3943
3943
|
let newDoorEd = new THREE5.Vector3(lines[u4].end.x, lines[u4].end.y, 0);
|
|
3944
3944
|
let dist1 = door.doorStartPt.distanceTo(door.doorEndPt);
|
|
3945
|
-
let
|
|
3945
|
+
let dist2 = newDoorSt.distanceTo(newDoorEd);
|
|
3946
3946
|
let res = getParallelism(door.doorStartPt, door.doorEndPt, newDoorSt, newDoorEd);
|
|
3947
|
-
if (Math.abs(
|
|
3947
|
+
if (Math.abs(dist2 - dist1) < 0.5 && res && res.angleDeg < 10) {
|
|
3948
3948
|
door.doorStartPt = new THREE5.Vector3(lines[u4].start.x, lines[u4].start.y, 0);
|
|
3949
3949
|
door.doorEndPt = new THREE5.Vector3(lines[u4].end.x, lines[u4].end.y, 0);
|
|
3950
3950
|
break;
|
|
3951
|
-
} else if (Math.abs(
|
|
3951
|
+
} else if (Math.abs(dist2 - dist1) > 1.3 && res && res.angleDeg < 10) {
|
|
3952
3952
|
let restmp = classifySegments(door.doorStartPt, door.doorEndPt, newDoorSt, newDoorEd, { parallelAngleMax: THREE5.MathUtils.degToRad(15) });
|
|
3953
3953
|
let dist11 = door.doorStartPt.distanceTo(newDoorSt);
|
|
3954
3954
|
let dist12 = door.doorStartPt.distanceTo(newDoorEd);
|
|
@@ -3963,8 +3963,8 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
|
|
|
3963
3963
|
let resTmp1 = lineTmp33.closestPointToPoint(door.doorStartPt, true, new THREE5.Vector3());
|
|
3964
3964
|
let resTmp2 = lineTmp33.closestPointToPoint(door.doorEndPt, true, new THREE5.Vector3());
|
|
3965
3965
|
let dist15 = resTmp1.distanceTo(door.doorStartPt);
|
|
3966
|
-
let
|
|
3967
|
-
if (dist15 < 0.1 ||
|
|
3966
|
+
let dist22 = resTmp2.distanceTo(door.doorEndPt);
|
|
3967
|
+
if (dist15 < 0.1 || dist22 < 0.1) {
|
|
3968
3968
|
door.inWall = true;
|
|
3969
3969
|
break;
|
|
3970
3970
|
}
|
|
@@ -4392,14 +4392,14 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
|
|
|
4392
4392
|
let line3 = new THREE5.Line3(new THREE5.Vector3(line2.start.x, line2.start.y, 0), new THREE5.Vector3(line2.end.x, line2.end.y, 0));
|
|
4393
4393
|
let targeVec = new THREE5.Vector3();
|
|
4394
4394
|
let ptClose = line3.closestPointToPoint(ptCenter, true, targeVec);
|
|
4395
|
-
let
|
|
4396
|
-
if (
|
|
4395
|
+
let dist2 = ptCenter.distanceTo(ptClose);
|
|
4396
|
+
if (dist2 < 0.15) {
|
|
4397
4397
|
let dist1 = beamSt.distanceTo(doorSt);
|
|
4398
4398
|
let dist22 = beamEd.distanceTo(doorSt);
|
|
4399
4399
|
if (dist1 > 0.25 && dist22 > 0.25) {
|
|
4400
|
-
let
|
|
4400
|
+
let dist3 = beamSt.distanceTo(doorEd);
|
|
4401
4401
|
let dist4 = beamEd.distanceTo(doorEd);
|
|
4402
|
-
if (
|
|
4402
|
+
if (dist3 > 0.2 && dist4 > 0.2) {
|
|
4403
4403
|
continue;
|
|
4404
4404
|
}
|
|
4405
4405
|
}
|
|
@@ -4434,10 +4434,10 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
|
|
|
4434
4434
|
if (Math.abs(distTmp1 - result.overlap) < 0.25 || Math.abs(distTmp2 - result.overlap) < 0.25) {
|
|
4435
4435
|
if (distTmp2 > distTmp1 && Math.abs(distTmp2 - result.overlap) > 1) {
|
|
4436
4436
|
let dist1 = beamSt.distanceTo(doorSt);
|
|
4437
|
-
let
|
|
4437
|
+
let dist2 = beamSt.distanceTo(doorEd);
|
|
4438
4438
|
let dist3 = beamEd.distanceTo(doorSt);
|
|
4439
4439
|
let dist4 = beamEd.distanceTo(doorEd);
|
|
4440
|
-
let dist5 = dist1 <
|
|
4440
|
+
let dist5 = dist1 < dist2 ? dist1 : dist2;
|
|
4441
4441
|
let dist6 = dist3 < dist4 ? dist3 : dist4;
|
|
4442
4442
|
let beamVec = new THREE5.Vector3().subVectors(beamSt, beamEd).normalize();
|
|
4443
4443
|
let addDoorLen = distTmp2 - result.overlap;
|
|
@@ -4783,13 +4783,13 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
|
|
|
4783
4783
|
}
|
|
4784
4784
|
let targetVector = new THREE5.Vector3();
|
|
4785
4785
|
let ptClose = line3.closestPointToPoint(ptCenter, true, targetVector);
|
|
4786
|
-
let
|
|
4786
|
+
let dist2 = ptClose.distanceTo(ptCenter);
|
|
4787
4787
|
let vec2 = new THREE5.Vector3().subVectors(ptCenter, ptClose).normalize();
|
|
4788
4788
|
let vecNegate = vec2.clone().negate();
|
|
4789
|
-
let ptCenterOther = ptCenter.clone().addScaledVector(vecNegate,
|
|
4789
|
+
let ptCenterOther = ptCenter.clone().addScaledVector(vecNegate, dist2 + 0.1);
|
|
4790
4790
|
let isInsert = segmentsIntersect2D(line3.start, line3.end, ptCenter, ptCenterOther);
|
|
4791
4791
|
let isTrue = !isDoor && !tmpDoorBeamData.isDoor && (length1 > length22 * 2.5 || length22 > length1 * 2.5);
|
|
4792
|
-
if (
|
|
4792
|
+
if (dist2 < 0.5 && isInsert != null && !isTrue) {
|
|
4793
4793
|
let isSameLine = false;
|
|
4794
4794
|
for (let v2 = 0; v2 < line2.doorAndBeamData.length; v2++) {
|
|
4795
4795
|
if (line2.doorAndBeamData[v2].id == tmpDoorBeamData.id) {
|
|
@@ -4836,28 +4836,28 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
|
|
|
4836
4836
|
vec2 = vec2.negate();
|
|
4837
4837
|
}
|
|
4838
4838
|
if (length1 > minDoorLength2 && !tmpDoorBeamData.isPullOutDoor) {
|
|
4839
|
-
tmpDoorBeamData.beamStart = beamTmpSt.clone().addScaledVector(vecNegate,
|
|
4840
|
-
tmpDoorBeamData.beamEnd = beamTmpEd.clone().addScaledVector(vecNegate,
|
|
4841
|
-
tmpDoorBeamData.doorStart = doorTmpSt.clone().addScaledVector(vecNegate,
|
|
4842
|
-
tmpDoorBeamData.doorEnd = doorTmpEd.clone().addScaledVector(vecNegate,
|
|
4839
|
+
tmpDoorBeamData.beamStart = beamTmpSt.clone().addScaledVector(vecNegate, dist2);
|
|
4840
|
+
tmpDoorBeamData.beamEnd = beamTmpEd.clone().addScaledVector(vecNegate, dist2);
|
|
4841
|
+
tmpDoorBeamData.doorStart = doorTmpSt.clone().addScaledVector(vecNegate, dist2);
|
|
4842
|
+
tmpDoorBeamData.doorEnd = doorTmpEd.clone().addScaledVector(vecNegate, dist2);
|
|
4843
4843
|
tmpDoorBeamData.doorHeight = doorAndBeamDataObj.doorHeight;
|
|
4844
4844
|
tmpDoorBeamData.beamStart.z = tmpDoorBeamData.beamEnd.z = tmpDoorBeamData.doorStart.z + tmpDoorBeamData.doorHeight;
|
|
4845
4845
|
tmpDoorBeamData.doorOpenEndPoint = doorAndBeamDataObj.doorOpenEndPoint.clone();
|
|
4846
4846
|
tmpDoorBeamData.doorOpenVector = doorAndBeamDataObj.doorOpenVector.clone();
|
|
4847
4847
|
} else if (!isPullOutDoor || isPullOutDoor && tmpDoorBeamData.isPullOutDoor && hasCommon) {
|
|
4848
|
-
doorAndBeamDataObj.beamStart = tmpDoorBeamData.beamStart.clone().addScaledVector(vec2,
|
|
4849
|
-
doorAndBeamDataObj.beamEnd = tmpDoorBeamData.beamEnd.clone().addScaledVector(vec2,
|
|
4850
|
-
doorAndBeamDataObj.doorStart = tmpDoorBeamData.doorStart.clone().addScaledVector(vec2,
|
|
4851
|
-
doorAndBeamDataObj.doorEnd = tmpDoorBeamData.doorEnd.clone().addScaledVector(vec2,
|
|
4848
|
+
doorAndBeamDataObj.beamStart = tmpDoorBeamData.beamStart.clone().addScaledVector(vec2, dist2);
|
|
4849
|
+
doorAndBeamDataObj.beamEnd = tmpDoorBeamData.beamEnd.clone().addScaledVector(vec2, dist2);
|
|
4850
|
+
doorAndBeamDataObj.doorStart = tmpDoorBeamData.doorStart.clone().addScaledVector(vec2, dist2);
|
|
4851
|
+
doorAndBeamDataObj.doorEnd = tmpDoorBeamData.doorEnd.clone().addScaledVector(vec2, dist2);
|
|
4852
4852
|
doorAndBeamDataObj.doorHeight = tmpDoorBeamData.doorHeight;
|
|
4853
4853
|
doorAndBeamDataObj.beamStart.z = doorAndBeamDataObj.beamEnd.z = doorAndBeamDataObj.doorStart.z + doorAndBeamDataObj.doorHeight;
|
|
4854
4854
|
doorAndBeamDataObj.doorOpenEndPoint = tmpDoorBeamData.doorOpenEndPoint.clone();
|
|
4855
4855
|
doorAndBeamDataObj.doorOpenVector = tmpDoorBeamData.doorOpenVector.clone();
|
|
4856
4856
|
} else {
|
|
4857
|
-
tmpDoorBeamData.beamStart = beamTmpSt.clone().addScaledVector(vecNegate,
|
|
4858
|
-
tmpDoorBeamData.beamEnd = beamTmpEd.clone().addScaledVector(vecNegate,
|
|
4859
|
-
tmpDoorBeamData.doorStart = doorTmpSt.clone().addScaledVector(vecNegate,
|
|
4860
|
-
tmpDoorBeamData.doorEnd = doorTmpEd.clone().addScaledVector(vecNegate,
|
|
4857
|
+
tmpDoorBeamData.beamStart = beamTmpSt.clone().addScaledVector(vecNegate, dist2);
|
|
4858
|
+
tmpDoorBeamData.beamEnd = beamTmpEd.clone().addScaledVector(vecNegate, dist2);
|
|
4859
|
+
tmpDoorBeamData.doorStart = doorTmpSt.clone().addScaledVector(vecNegate, dist2);
|
|
4860
|
+
tmpDoorBeamData.doorEnd = doorTmpEd.clone().addScaledVector(vecNegate, dist2);
|
|
4861
4861
|
tmpDoorBeamData.doorHeight = doorAndBeamDataObj.doorHeight;
|
|
4862
4862
|
tmpDoorBeamData.beamStart.z = tmpDoorBeamData.beamEnd.z = tmpDoorBeamData.doorStart.z + tmpDoorBeamData.doorHeight;
|
|
4863
4863
|
tmpDoorBeamData.doorOpenEndPoint = doorAndBeamDataObj.doorOpenEndPoint.clone();
|
|
@@ -4869,28 +4869,28 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
|
|
|
4869
4869
|
vec2 = vec2.negate();
|
|
4870
4870
|
}
|
|
4871
4871
|
if (length22 > minDoorLength2 && !isPullOutDoor) {
|
|
4872
|
-
doorAndBeamDataObj.beamStart = tmpDoorBeamData.beamStart.clone().addScaledVector(vecNegate,
|
|
4873
|
-
doorAndBeamDataObj.beamEnd = tmpDoorBeamData.beamEnd.clone().addScaledVector(vecNegate,
|
|
4874
|
-
doorAndBeamDataObj.doorStart = tmpDoorBeamData.doorStart.clone().addScaledVector(vecNegate,
|
|
4875
|
-
doorAndBeamDataObj.doorEnd = tmpDoorBeamData.doorEnd.clone().addScaledVector(vecNegate,
|
|
4872
|
+
doorAndBeamDataObj.beamStart = tmpDoorBeamData.beamStart.clone().addScaledVector(vecNegate, dist2);
|
|
4873
|
+
doorAndBeamDataObj.beamEnd = tmpDoorBeamData.beamEnd.clone().addScaledVector(vecNegate, dist2);
|
|
4874
|
+
doorAndBeamDataObj.doorStart = tmpDoorBeamData.doorStart.clone().addScaledVector(vecNegate, dist2);
|
|
4875
|
+
doorAndBeamDataObj.doorEnd = tmpDoorBeamData.doorEnd.clone().addScaledVector(vecNegate, dist2);
|
|
4876
4876
|
doorAndBeamDataObj.doorHeight = tmpDoorBeamData.doorHeight;
|
|
4877
4877
|
doorAndBeamDataObj.beamStart.z = doorAndBeamDataObj.beamEnd.z = doorAndBeamDataObj.doorStart.z + doorAndBeamDataObj.doorHeight;
|
|
4878
4878
|
doorAndBeamDataObj.doorOpenEndPoint = tmpDoorBeamData.doorOpenEndPoint.clone();
|
|
4879
4879
|
doorAndBeamDataObj.doorOpenVector = tmpDoorBeamData.doorOpenVector.clone();
|
|
4880
4880
|
} else if (!tmpDoorBeamData.isPullOutDoor || isPullOutDoor && tmpDoorBeamData.isPullOutDoor && hasCommon) {
|
|
4881
|
-
tmpDoorBeamData.beamStart = beamTmpSt.clone().addScaledVector(vec2,
|
|
4882
|
-
tmpDoorBeamData.beamEnd = beamTmpEd.clone().addScaledVector(vec2,
|
|
4883
|
-
tmpDoorBeamData.doorStart = doorTmpSt.clone().addScaledVector(vec2,
|
|
4884
|
-
tmpDoorBeamData.doorEnd = doorTmpEd.clone().addScaledVector(vec2,
|
|
4881
|
+
tmpDoorBeamData.beamStart = beamTmpSt.clone().addScaledVector(vec2, dist2);
|
|
4882
|
+
tmpDoorBeamData.beamEnd = beamTmpEd.clone().addScaledVector(vec2, dist2);
|
|
4883
|
+
tmpDoorBeamData.doorStart = doorTmpSt.clone().addScaledVector(vec2, dist2);
|
|
4884
|
+
tmpDoorBeamData.doorEnd = doorTmpEd.clone().addScaledVector(vec2, dist2);
|
|
4885
4885
|
tmpDoorBeamData.doorHeight = doorAndBeamDataObj.doorHeight;
|
|
4886
4886
|
tmpDoorBeamData.beamStart.z = tmpDoorBeamData.beamEnd.z = tmpDoorBeamData.doorStart.z + tmpDoorBeamData.doorHeight;
|
|
4887
4887
|
tmpDoorBeamData.doorOpenEndPoint = doorAndBeamDataObj.doorOpenEndPoint.clone();
|
|
4888
4888
|
tmpDoorBeamData.doorOpenVector = doorAndBeamDataObj.doorOpenVector.clone();
|
|
4889
4889
|
} else {
|
|
4890
|
-
doorAndBeamDataObj.beamStart = tmpDoorBeamData.beamStart.clone().addScaledVector(vecNegate,
|
|
4891
|
-
doorAndBeamDataObj.beamEnd = tmpDoorBeamData.beamEnd.clone().addScaledVector(vecNegate,
|
|
4892
|
-
doorAndBeamDataObj.doorStart = tmpDoorBeamData.doorStart.clone().addScaledVector(vecNegate,
|
|
4893
|
-
doorAndBeamDataObj.doorEnd = tmpDoorBeamData.doorEnd.clone().addScaledVector(vecNegate,
|
|
4890
|
+
doorAndBeamDataObj.beamStart = tmpDoorBeamData.beamStart.clone().addScaledVector(vecNegate, dist2);
|
|
4891
|
+
doorAndBeamDataObj.beamEnd = tmpDoorBeamData.beamEnd.clone().addScaledVector(vecNegate, dist2);
|
|
4892
|
+
doorAndBeamDataObj.doorStart = tmpDoorBeamData.doorStart.clone().addScaledVector(vecNegate, dist2);
|
|
4893
|
+
doorAndBeamDataObj.doorEnd = tmpDoorBeamData.doorEnd.clone().addScaledVector(vecNegate, dist2);
|
|
4894
4894
|
doorAndBeamDataObj.doorHeight = tmpDoorBeamData.doorHeight;
|
|
4895
4895
|
doorAndBeamDataObj.beamStart.z = doorAndBeamDataObj.beamEnd.z = doorAndBeamDataObj.doorStart.z + doorAndBeamDataObj.doorHeight;
|
|
4896
4896
|
doorAndBeamDataObj.doorOpenEndPoint = tmpDoorBeamData.doorOpenEndPoint.clone();
|
|
@@ -5069,19 +5069,19 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
|
|
|
5069
5069
|
let ptClose1 = line3.closestPointToPoint(beamStOther, true, target);
|
|
5070
5070
|
let ptClose2 = line3.closestPointToPoint(beamEdOther, true, target);
|
|
5071
5071
|
let dist1 = ptClose1.distanceTo(beamStOther);
|
|
5072
|
-
let
|
|
5072
|
+
let dist2 = ptClose2.distanceTo(beamEdOther);
|
|
5073
5073
|
let doorStartPt, doorEndPt;
|
|
5074
|
-
if (dist1 >
|
|
5074
|
+
if (dist1 > dist2 && dist2 > minDoorLength) {
|
|
5075
5075
|
doorStartPt = beamEdOther;
|
|
5076
5076
|
doorEndPt = ptClose2;
|
|
5077
|
-
} else if (dist1 <
|
|
5077
|
+
} else if (dist1 < dist2 && dist1 > minDoorLength) {
|
|
5078
5078
|
doorStartPt = beamStOther;
|
|
5079
5079
|
doorEndPt = ptClose1;
|
|
5080
5080
|
} else
|
|
5081
5081
|
continue;
|
|
5082
5082
|
dist1 = nearDoorPt.distanceTo(beamStOther);
|
|
5083
|
-
|
|
5084
|
-
if (dist1 > maxDoorLength &&
|
|
5083
|
+
dist2 = nearDoorPt.distanceTo(beamEdOther);
|
|
5084
|
+
if (dist1 > maxDoorLength && dist2 > maxDoorLength)
|
|
5085
5085
|
continue;
|
|
5086
5086
|
let isPP2 = getParallelism(doorStartPt, doorEndPt, beamStOther, beamEdOther);
|
|
5087
5087
|
let isPPP = getParallelism(doorStartPt, doorEndPt, doorStExtended, doorEdExtended);
|
|
@@ -5409,7 +5409,6 @@ var findClosedRegionUuidGroups = (inputSegments, options = {}) => {
|
|
|
5409
5409
|
for (const seg of segments) {
|
|
5410
5410
|
const a2 = project(seg.start);
|
|
5411
5411
|
const b2 = project(seg.end);
|
|
5412
|
-
if (dist2(a2, b2) < EPS * EPS) continue;
|
|
5413
5412
|
const va = getVertexId(a2);
|
|
5414
5413
|
const vb = getVertexId(b2);
|
|
5415
5414
|
if (va === vb) continue;
|
|
@@ -5572,9 +5571,6 @@ function splitSegmentsAtIntersections(inputSegments, project, EPS = 1e-6) {
|
|
|
5572
5571
|
for (let k = 0; k < uniquePoints.length - 1; k++) {
|
|
5573
5572
|
const p1 = uniquePoints[k].point;
|
|
5574
5573
|
const p2 = uniquePoints[k + 1].point;
|
|
5575
|
-
const p12 = project(p1);
|
|
5576
|
-
const p22 = project(p2);
|
|
5577
|
-
if (dist2(p12, p22) < EPS * EPS) continue;
|
|
5578
5574
|
result.push({
|
|
5579
5575
|
start: p1,
|
|
5580
5576
|
end: p2,
|
|
@@ -5620,11 +5616,6 @@ function segmentIntersection(p1, p2, q1, q2, EPS = 1e-6) {
|
|
|
5620
5616
|
function cross2(a, b) {
|
|
5621
5617
|
return a.x * b.y - a.y * b.x;
|
|
5622
5618
|
}
|
|
5623
|
-
function dist2(a, b) {
|
|
5624
|
-
const dx = a.x - b.x;
|
|
5625
|
-
const dy = a.y - b.y;
|
|
5626
|
-
return dx * dx + dy * dy;
|
|
5627
|
-
}
|
|
5628
5619
|
function signedArea(points) {
|
|
5629
5620
|
let area2 = 0;
|
|
5630
5621
|
for (let i = 0; i < points.length; i++) {
|
|
@@ -5665,7 +5656,8 @@ var getColLine = async (lines, runDataList, collectDataPath, pointCloudCluster =
|
|
|
5665
5656
|
threeEdgeRect: []
|
|
5666
5657
|
};
|
|
5667
5658
|
let isFindColIndexs = /* @__PURE__ */ new Set();
|
|
5668
|
-
let minColLineLength = 0.
|
|
5659
|
+
let minColLineLength = 0.01;
|
|
5660
|
+
let threeMinColLineLength = 0.15;
|
|
5669
5661
|
let maxColLineLength = 2;
|
|
5670
5662
|
let minArea = 0.1;
|
|
5671
5663
|
let maxArea = 2.5;
|
|
@@ -5814,7 +5806,7 @@ var getColLine = async (lines, runDataList, collectDataPath, pointCloudCluster =
|
|
|
5814
5806
|
let isEq6 = ptIsEqual(startPt4, endPt1);
|
|
5815
5807
|
let isEq7 = ptIsEqual(endPt4, startPt1);
|
|
5816
5808
|
let isEq8 = ptIsEqual(endPt4, endPt1);
|
|
5817
|
-
if (isEq5 || isEq6 || isEq7 || isEq8) {
|
|
5809
|
+
if ((isEq5 || isEq6 || isEq7 || isEq8) && length1 < length2 * 3 && length2 < length1 * 3) {
|
|
5818
5810
|
isRect = true;
|
|
5819
5811
|
} else {
|
|
5820
5812
|
for (let m = l + 1; m < result[i].lineIndexes.length; m++) {
|
|
@@ -5850,8 +5842,10 @@ var getColLine = async (lines, runDataList, collectDataPath, pointCloudCluster =
|
|
|
5850
5842
|
isEq7 = ptIsEqual(endPt4, startPt1);
|
|
5851
5843
|
isEq8 = ptIsEqual(endPt4, endPt1);
|
|
5852
5844
|
if (isEq5 || isEq6 || isEq7 || isEq8) {
|
|
5853
|
-
|
|
5854
|
-
|
|
5845
|
+
if (length1 < length2 * 3 && length2 < length1 * 3) {
|
|
5846
|
+
isRect = true;
|
|
5847
|
+
break;
|
|
5848
|
+
}
|
|
5855
5849
|
}
|
|
5856
5850
|
}
|
|
5857
5851
|
}
|
|
@@ -5872,7 +5866,7 @@ var getColLine = async (lines, runDataList, collectDataPath, pointCloudCluster =
|
|
|
5872
5866
|
}
|
|
5873
5867
|
for (let i = 0; i < lines.length; i++) {
|
|
5874
5868
|
let length1 = lines[i].length;
|
|
5875
|
-
if (isFindColIndexs.has(lines[i].uuid) || length1 <
|
|
5869
|
+
if (isFindColIndexs.has(lines[i].uuid) || length1 < threeMinColLineLength || length1 > maxColLineLength)
|
|
5876
5870
|
continue;
|
|
5877
5871
|
let colIndexs = {
|
|
5878
5872
|
uuids: [],
|
|
@@ -5911,7 +5905,7 @@ var getColLine = async (lines, runDataList, collectDataPath, pointCloudCluster =
|
|
|
5911
5905
|
let vec2 = vec1.clone().negate();
|
|
5912
5906
|
for (let j = 0; j < lines.length; j++) {
|
|
5913
5907
|
let length2 = lines[j].length;
|
|
5914
|
-
if (j == i || isFindColIndexs.has(j) || length2 <
|
|
5908
|
+
if (j == i || isFindColIndexs.has(j) || length2 < threeMinColLineLength || length2 > maxColLineLength)
|
|
5915
5909
|
continue;
|
|
5916
5910
|
let startPt2 = new THREE6.Vector3(lines[j].start.x, lines[j].start.y, lines[j].start.z);
|
|
5917
5911
|
let endPt2 = new THREE6.Vector3(lines[j].end.x, lines[j].end.y, lines[j].end.z);
|
|
@@ -5932,7 +5926,7 @@ var getColLine = async (lines, runDataList, collectDataPath, pointCloudCluster =
|
|
|
5932
5926
|
}
|
|
5933
5927
|
for (let k = 0; k < lines.length; k++) {
|
|
5934
5928
|
let length3 = lines[k].length;
|
|
5935
|
-
if (k == i || k == j || isFindColIndexs.has(k) || length3 <
|
|
5929
|
+
if (k == i || k == j || isFindColIndexs.has(k) || length3 < threeMinColLineLength || length3 > maxColLineLength)
|
|
5936
5930
|
continue;
|
|
5937
5931
|
let startPt3 = new THREE6.Vector3(lines[k].start.x, lines[k].start.y, lines[k].start.z);
|
|
5938
5932
|
let endPt3 = new THREE6.Vector3(lines[k].end.x, lines[k].end.y, lines[k].end.z);
|
|
@@ -8081,8 +8075,8 @@ function calculateRhumbDistance(origin, destination, radius) {
|
|
|
8081
8075
|
const delta = Math.sqrt(
|
|
8082
8076
|
DeltaPhi * DeltaPhi + q * q * DeltaLambda * DeltaLambda
|
|
8083
8077
|
);
|
|
8084
|
-
const
|
|
8085
|
-
return
|
|
8078
|
+
const dist2 = delta * R;
|
|
8079
|
+
return dist2;
|
|
8086
8080
|
}
|
|
8087
8081
|
|
|
8088
8082
|
// node_modules/@turf/rhumb-destination/dist/esm/index.js
|
|
@@ -10113,7 +10107,7 @@ var getStaircase = (allProjectionResults, scene) => {
|
|
|
10113
10107
|
let isP = perpendicularInfo(ptBottom3i, ptBottom1i, ptBottom3j, ptBottom1j);
|
|
10114
10108
|
if (isP && isP.angle > 75) {
|
|
10115
10109
|
let dist1 = ptBottom1j.distanceTo(ptTop1i);
|
|
10116
|
-
let
|
|
10110
|
+
let dist2 = ptBottom1j.distanceTo(ptTop2i);
|
|
10117
10111
|
let dist3 = ptBottom2j.distanceTo(ptTop1i);
|
|
10118
10112
|
let dist4 = ptBottom2j.distanceTo(ptTop2i);
|
|
10119
10113
|
let retcBotton1j = ptTop1i.clone();
|
|
@@ -10125,8 +10119,8 @@ var getStaircase = (allProjectionResults, scene) => {
|
|
|
10125
10119
|
let newTop1j = retcBotton1j.clone().addScaledVector(vecMove, stairDatas[j].stairLength);
|
|
10126
10120
|
let newTop2j = rectBotton2j.clone().addScaledVector(vecMove, stairDatas[j].stairLength);
|
|
10127
10121
|
let nearDist = dist1;
|
|
10128
|
-
if (nearDist >
|
|
10129
|
-
nearDist =
|
|
10122
|
+
if (nearDist > dist2 || nearDist > dist4) {
|
|
10123
|
+
nearDist = dist2;
|
|
10130
10124
|
retcBotton1j = ptTop2i.clone();
|
|
10131
10125
|
rectBotton2j = retcBotton1j.clone().addScaledVector(vecStepWidthi, stairDatas[j].staitWidth);
|
|
10132
10126
|
vecMove = new THREE8.Vector3().subVectors(ptTop1i, ptTop2i).normalize();
|
|
@@ -10354,12 +10348,12 @@ function getStaircaseFloor(stairDatas, finalFloorMap) {
|
|
|
10354
10348
|
for (let f = 0; f < floorPoints.length; f++) {
|
|
10355
10349
|
let tmpFloorPoint = new THREE8.Vector3(floorPoints[f].x, floorPoints[f].y, ptTmpTmpBottom1i.z);
|
|
10356
10350
|
let ptTmpClose = tmpTmpLine.closestPointToPoint(tmpFloorPoint, false, new THREE8.Vector3());
|
|
10357
|
-
let
|
|
10351
|
+
let dist2 = ptTmpClose.distanceTo(tmpFloorPoint);
|
|
10358
10352
|
let ptTmpClose2 = tmpTmpLine2.closestPointToPoint(tmpFloorPoint, false, new THREE8.Vector3());
|
|
10359
10353
|
let tmpVec = new THREE8.Vector3().subVectors(tmpFloorPoint, ptTmpClose2).normalize();
|
|
10360
10354
|
const isP = isParallel(tmpVec, stairDatas[i].vecStepWidth.clone().negate(), 0.1);
|
|
10361
|
-
if (
|
|
10362
|
-
maxDist =
|
|
10355
|
+
if (dist2 < maxDist && isP.sameDirection) {
|
|
10356
|
+
maxDist = dist2;
|
|
10363
10357
|
moveDist = tmpFloorPoint.distanceTo(ptTmpClose2);
|
|
10364
10358
|
nearPt = tmpFloorPoint.clone();
|
|
10365
10359
|
nearPtZ = floorPoints[f].z;
|
|
@@ -10383,10 +10377,10 @@ function getStaircaseFloor(stairDatas, finalFloorMap) {
|
|
|
10383
10377
|
let ptTmpClose = tmpTmpLine.closestPointToPoint(tmpFloorPoint, false, new THREE8.Vector3());
|
|
10384
10378
|
let ptTmpClose2 = tmpTmpLine2.closestPointToPoint(tmpFloorPoint, false, new THREE8.Vector3());
|
|
10385
10379
|
let tmpVec = new THREE8.Vector3().subVectors(tmpFloorPoint, ptTmpClose2).normalize();
|
|
10386
|
-
let
|
|
10380
|
+
let dist2 = ptTmpClose.distanceTo(tmpFloorPoint);
|
|
10387
10381
|
const isP = isParallel(tmpVec, stairDatas[i].vecStepWidth);
|
|
10388
|
-
if (
|
|
10389
|
-
maxDist =
|
|
10382
|
+
if (dist2 < maxDist && isP.sameDirection) {
|
|
10383
|
+
maxDist = dist2;
|
|
10390
10384
|
moveDist = tmpFloorPoint.distanceTo(ptTmpClose2);
|
|
10391
10385
|
nearPt = tmpFloorPoint;
|
|
10392
10386
|
nearPtZ = floorPoints[f].z;
|
|
@@ -11150,6 +11144,8 @@ var getFlatFloorData = (lines, runDataList, pointCloudCluster = null) => {
|
|
|
11150
11144
|
avaregPzs.push(1e4);
|
|
11151
11145
|
}
|
|
11152
11146
|
}
|
|
11147
|
+
if (maxContourIndex == -1)
|
|
11148
|
+
return null;
|
|
11153
11149
|
return {
|
|
11154
11150
|
contour: floorDatas[maxContourIndex].contour,
|
|
11155
11151
|
averagePz: avaregPzs[maxContourIndex]
|
|
@@ -11658,14 +11654,14 @@ var getWindowData = (lines, pcdData, lineReader) => {
|
|
|
11658
11654
|
let line3 = new THREE10.Line3(new THREE10.Vector3(line2.start.x, line2.start.y, 0), new THREE10.Vector3(line2.end.x, line2.end.y, 0));
|
|
11659
11655
|
let targeVec = new THREE10.Vector3();
|
|
11660
11656
|
let ptClose = line3.closestPointToPoint(ptCenter, true, targeVec);
|
|
11661
|
-
let
|
|
11662
|
-
if (
|
|
11657
|
+
let dist2 = ptCenter.distanceTo(ptClose);
|
|
11658
|
+
if (dist2 < 0.15) {
|
|
11663
11659
|
let dist1 = beamSt.distanceTo(doorSt);
|
|
11664
11660
|
let dist22 = beamEd.distanceTo(doorSt);
|
|
11665
11661
|
if (dist1 > 0.25 && dist22 > 0.25) {
|
|
11666
|
-
let
|
|
11662
|
+
let dist3 = beamSt.distanceTo(doorEd);
|
|
11667
11663
|
let dist4 = beamEd.distanceTo(doorEd);
|
|
11668
|
-
if (
|
|
11664
|
+
if (dist3 > 0.2 && dist4 > 0.2) {
|
|
11669
11665
|
continue;
|
|
11670
11666
|
}
|
|
11671
11667
|
}
|
|
@@ -12147,8 +12143,8 @@ function pointToSegmentDist(cx, cy, ax, ay, bx, by) {
|
|
|
12147
12143
|
const t = (wx * vx + wy * vy) / len2;
|
|
12148
12144
|
const projX = ax + t * vx;
|
|
12149
12145
|
const projY = ay + t * vy;
|
|
12150
|
-
const
|
|
12151
|
-
return { dist:
|
|
12146
|
+
const dist2 = Math.sqrt((cx - projX) ** 2 + (cy - projY) ** 2);
|
|
12147
|
+
return { dist: dist2, t };
|
|
12152
12148
|
}
|
|
12153
12149
|
function pointInQuad(px, py, quad) {
|
|
12154
12150
|
let sign = 0;
|
|
@@ -12293,8 +12289,8 @@ function scoreDistanceVariance(wall, checkPoints) {
|
|
|
12293
12289
|
const ds = [];
|
|
12294
12290
|
const { start, end } = wall;
|
|
12295
12291
|
for (const pt of checkPoints) {
|
|
12296
|
-
const { dist:
|
|
12297
|
-
ds.push(
|
|
12292
|
+
const { dist: dist2 } = pointToSegmentDist(pt.x, pt.y, start.x, start.y, end.x, end.y);
|
|
12293
|
+
ds.push(dist2);
|
|
12298
12294
|
}
|
|
12299
12295
|
const mean = ds.reduce((s, v2) => s + v2, 0) / ds.length;
|
|
12300
12296
|
const variance = ds.reduce((s, v2) => s + (v2 - mean) ** 2, 0) / ds.length;
|
|
@@ -12407,8 +12403,8 @@ function mergeIntervals(group, gref, dirX, dirY, gapTol) {
|
|
|
12407
12403
|
const last = merged[merged.length - 1];
|
|
12408
12404
|
if (l <= last.r + gapTol) {
|
|
12409
12405
|
const overlapLen = Math.min(last.r, r) - Math.max(last.l, l);
|
|
12410
|
-
const
|
|
12411
|
-
if (overlapLen >= overlapForceMergeLen ||
|
|
12406
|
+
const dist2 = Math.hypot(last.endPt.x - startPt.x, last.endPt.y - startPt.y);
|
|
12407
|
+
if (overlapLen >= overlapForceMergeLen || dist2 <= endPointDistTol) {
|
|
12412
12408
|
if (l < last.l) {
|
|
12413
12409
|
last.l = l;
|
|
12414
12410
|
last.startPt = startPt;
|
|
@@ -12624,10 +12620,10 @@ function collectCandidates(candidateSegments, winLong, winDirX, winDirY, checkPo
|
|
|
12624
12620
|
let validPoint = false;
|
|
12625
12621
|
let minDist = Infinity;
|
|
12626
12622
|
for (const pt of checkPoints) {
|
|
12627
|
-
const { dist:
|
|
12628
|
-
if (t >= -attempt.margin && t <= 1 + attempt.margin &&
|
|
12623
|
+
const { dist: dist2, t } = pointToSegmentDist(pt.x, pt.y, start.x, start.y, end.x, end.y);
|
|
12624
|
+
if (t >= -attempt.margin && t <= 1 + attempt.margin && dist2 <= attempt.maxDist) {
|
|
12629
12625
|
validPoint = true;
|
|
12630
|
-
minDist = Math.min(minDist,
|
|
12626
|
+
minDist = Math.min(minDist, dist2);
|
|
12631
12627
|
}
|
|
12632
12628
|
}
|
|
12633
12629
|
if (!validPoint) {
|
|
@@ -13264,8 +13260,8 @@ function pointToSegmentDist2(cx, cy, ax, ay, bx, by) {
|
|
|
13264
13260
|
const t = (wx * vx + wy * vy) / len2;
|
|
13265
13261
|
const projX = ax + t * vx;
|
|
13266
13262
|
const projY = ay + t * vy;
|
|
13267
|
-
const
|
|
13268
|
-
return { dist:
|
|
13263
|
+
const dist2 = Math.sqrt((cx - projX) ** 2 + (cy - projY) ** 2);
|
|
13264
|
+
return { dist: dist2, t };
|
|
13269
13265
|
}
|
|
13270
13266
|
function pointInQuad2(px, py, quad) {
|
|
13271
13267
|
let sign = 0;
|
|
@@ -13333,9 +13329,9 @@ function extractVerticalEdges(corners) {
|
|
|
13333
13329
|
if (usedTop.has(i)) continue;
|
|
13334
13330
|
const dx = topPts[i].x - bp.x;
|
|
13335
13331
|
const dy = topPts[i].y - bp.y;
|
|
13336
|
-
const
|
|
13337
|
-
if (
|
|
13338
|
-
bestDist =
|
|
13332
|
+
const dist2 = Math.sqrt(dx * dx + dy * dy);
|
|
13333
|
+
if (dist2 < bestDist) {
|
|
13334
|
+
bestDist = dist2;
|
|
13339
13335
|
bestIdx = i;
|
|
13340
13336
|
}
|
|
13341
13337
|
}
|
|
@@ -13723,8 +13719,8 @@ function scoreDistanceVariance2(wall, checkPoints) {
|
|
|
13723
13719
|
const ds = [];
|
|
13724
13720
|
const { start, end } = wall;
|
|
13725
13721
|
for (const pt of checkPoints) {
|
|
13726
|
-
const { dist:
|
|
13727
|
-
ds.push(
|
|
13722
|
+
const { dist: dist2 } = pointToSegmentDist2(pt.x, pt.y, start.x, start.y, end.x, end.y);
|
|
13723
|
+
ds.push(dist2);
|
|
13728
13724
|
}
|
|
13729
13725
|
const mean = ds.reduce((s, v2) => s + v2, 0) / ds.length;
|
|
13730
13726
|
const variance = ds.reduce((s, v2) => s + (v2 - mean) ** 2, 0) / ds.length;
|
|
@@ -13837,8 +13833,8 @@ function mergeIntervals2(group, gref, dirX, dirY, gapTol) {
|
|
|
13837
13833
|
const last = merged[merged.length - 1];
|
|
13838
13834
|
if (l <= last.r + gapTol) {
|
|
13839
13835
|
const overlapLen = Math.min(last.r, r) - Math.max(last.l, l);
|
|
13840
|
-
const
|
|
13841
|
-
if (overlapLen >= overlapForceMergeLen ||
|
|
13836
|
+
const dist2 = Math.hypot(last.endPt.x - startPt.x, last.endPt.y - startPt.y);
|
|
13837
|
+
if (overlapLen >= overlapForceMergeLen || dist2 <= endPointDistTol) {
|
|
13842
13838
|
if (l < last.l) {
|
|
13843
13839
|
last.l = l;
|
|
13844
13840
|
last.startPt = startPt;
|
|
@@ -14064,10 +14060,10 @@ function collectCandidates2(candidateSegments, doorLong, doorDirX, doorDirY, che
|
|
|
14064
14060
|
let validPoint = false;
|
|
14065
14061
|
let minDist = Infinity;
|
|
14066
14062
|
for (const pt of checkPoints) {
|
|
14067
|
-
const { dist:
|
|
14068
|
-
if (t >= -attempt.margin && t <= 1 + attempt.margin &&
|
|
14063
|
+
const { dist: dist2, t } = pointToSegmentDist2(pt.x, pt.y, start.x, start.y, end.x, end.y);
|
|
14064
|
+
if (t >= -attempt.margin && t <= 1 + attempt.margin && dist2 <= attempt.maxDist) {
|
|
14069
14065
|
validPoint = true;
|
|
14070
|
-
if (
|
|
14066
|
+
if (dist2 < minDist) minDist = dist2;
|
|
14071
14067
|
}
|
|
14072
14068
|
}
|
|
14073
14069
|
if (!validPoint) {
|
|
@@ -14409,8 +14405,8 @@ function findDoorWalls(doorObjs, wallSegments, options, preMerged) {
|
|
|
14409
14405
|
for (const seg of candidateSegments) {
|
|
14410
14406
|
const dx = seg.start.x + (seg.end.x - seg.start.x) / 2 - centerX;
|
|
14411
14407
|
const dy = seg.start.y + (seg.end.y - seg.start.y) / 2 - centerY;
|
|
14412
|
-
const
|
|
14413
|
-
if (
|
|
14408
|
+
const dist2 = Math.sqrt(dx * dx + dy * dy);
|
|
14409
|
+
if (dist2 > 2) continue;
|
|
14414
14410
|
const segDx = seg.end.x - seg.start.x;
|
|
14415
14411
|
const segDy = seg.end.y - seg.start.y;
|
|
14416
14412
|
const segLen = Math.sqrt(segDx * segDx + segDy * segDy);
|
|
@@ -16024,8 +16020,8 @@ function fitCircle(pts) {
|
|
|
16024
16020
|
const r = Math.sqrt(Math.abs((sx2 + sz2 - 2 * cx * sx - 2 * cz * sz) / n + cx * cx + cz * cz));
|
|
16025
16021
|
let sumSq = 0;
|
|
16026
16022
|
for (const p of pts) {
|
|
16027
|
-
const
|
|
16028
|
-
const diff =
|
|
16023
|
+
const dist2 = Math.hypot(p.x - cx, p.z - cz);
|
|
16024
|
+
const diff = dist2 - r;
|
|
16029
16025
|
sumSq += diff * diff;
|
|
16030
16026
|
}
|
|
16031
16027
|
const rmsResidual = Math.sqrt(sumSq / n);
|
|
@@ -16456,8 +16452,8 @@ function findWallCorners(lineSegs) {
|
|
|
16456
16452
|
for (const e1 of endpoints1) {
|
|
16457
16453
|
for (const e2 of endpoints2) {
|
|
16458
16454
|
const dx = e1.x - e2.x, dz = e1.z - e2.z;
|
|
16459
|
-
const
|
|
16460
|
-
if (
|
|
16455
|
+
const dist2 = Math.sqrt(dx * dx + dz * dz);
|
|
16456
|
+
if (dist2 < CORNER_DIST) {
|
|
16461
16457
|
corners.push({ x: (e1.x + e2.x) / 2, z: (e1.z + e2.z) / 2 });
|
|
16462
16458
|
}
|
|
16463
16459
|
}
|
|
@@ -16985,9 +16981,9 @@ function processFromPointCloud(points3D, rawLines, pcConfig) {
|
|
|
16985
16981
|
let bestDist = Infinity, bestJ = -1;
|
|
16986
16982
|
for (let k = 0; k < pts.length; k++) {
|
|
16987
16983
|
const dx = pts[k].x - corner.x, dz = pts[k].z - corner.z;
|
|
16988
|
-
const
|
|
16989
|
-
if (
|
|
16990
|
-
bestDist =
|
|
16984
|
+
const dist2 = dx * dx + dz * dz;
|
|
16985
|
+
if (dist2 < bestDist) {
|
|
16986
|
+
bestDist = dist2;
|
|
16991
16987
|
bestJ = k;
|
|
16992
16988
|
}
|
|
16993
16989
|
}
|