rm-graphical-computing-node 1.0.38 → 1.0.40

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 (2) hide show
  1. package/dist/index.mjs +157 -171
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -3150,12 +3150,8 @@ var removeNoisePoints = (lines, lineReader, lineEditor) => {
3150
3150
  continue;
3151
3151
  let gridWidth = -1;
3152
3152
  let gridHeight = -1;
3153
- let tempLineI = lineReader.readLineById(line2.id);
3154
- tempLineI.checkResults = lineReader.getLineCheckReultsById(line2.id);
3155
- tempLineI.originalPoints = lineReader.getOriginalPointsById(line2.id);
3156
- line2.originalPoints = tempLineI.originalPoints;
3157
- line2.checkResults = tempLineI.checkResults;
3158
- tempLineI = null;
3153
+ line2.originalPoints = lineReader.getOriginalPointsById(line2.id);
3154
+ line2.checkResults = lineReader.getLineCheckReultsById(line2.id);
3159
3155
  if (!line2.checkResults || line2.checkResults.length <= 0)
3160
3156
  continue;
3161
3157
  for (let a = 0; a < line2.checkResults.length; a++) {
@@ -3728,16 +3724,14 @@ function getTrendLineEndpoints(points, options = {}) {
3728
3724
 
3729
3725
  // src/geometry/beamLine.mjs
3730
3726
  import { Line as Line2 } from "three";
3731
- var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, regionId = "") => {
3727
+ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, onProgress = null) => {
3732
3728
  removeNoisePoints(lines, lineReader, lineEditor);
3733
3729
  if (lines.length <= 0 || runDataList.length <= 0)
3734
3730
  return lines;
3735
3731
  if (!pcdData) pcdData = [];
3736
3732
  for (let line2 of lines) {
3737
3733
  let allRegion = [];
3738
- let tempLineI = lineReader.readLineById(line2.id);
3739
- tempLineI.checkResults = lineReader.getLineCheckReultsById(line2.id);
3740
- line2.checkResults = tempLineI.checkResults;
3734
+ line2.checkResults = lineReader.getLineCheckReultsById(line2.id);
3741
3735
  if (!line2.checkResults || line2.checkResults.length <= 0)
3742
3736
  continue;
3743
3737
  for (let r = 0; r < line2.checkResults.length; r++) {
@@ -3922,14 +3916,12 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
3922
3916
  const beamGroup = [];
3923
3917
  let nearDist = 0.15;
3924
3918
  for (let index = 0; index < lines.length; index++) {
3919
+ if (onProgress != null)
3920
+ onProgress((index + 1) / lines.length * 60);
3925
3921
  let line2 = lines[index];
3926
3922
  if (line2.noDetection) continue;
3927
- let tempLineIndex = lineReader.readLineById(line2.id);
3928
- tempLineIndex.originalPoints = lineReader.getOriginalPointsById(line2.id);
3929
- tempLineIndex.checkResults = lineReader.getLineCheckReultsById(line2.id);
3930
- line2.originalPoints = tempLineIndex.originalPoints;
3931
- line2.checkResults = tempLineIndex.checkResults;
3932
- tempLineIndex = null;
3923
+ line2.originalPoints = lineReader.getOriginalPointsById(line2.id);
3924
+ line2.checkResults = lineReader.getLineCheckReultsById(line2.id);
3933
3925
  line2.doorAndBeamData = [];
3934
3926
  line2.doorAndBeamIdToCheckResults = [];
3935
3927
  if (!line2.mergeCheckRegion || line2.mergeCheckRegion.length == 0)
@@ -4117,7 +4109,7 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
4117
4109
  const ptInsertTmp = segmentsIntersect2D(tmpLineStart, tmpLineEnd, tmpOtherLineStart, tmpOtherLineEnd, 0.1);
4118
4110
  let isPerpendicularInfo = perpendicularInfo(tmpLineStart, tmpLineEnd, tmpOtherLineStart, tmpOtherLineEnd);
4119
4111
  if (ptInsertTmp != null) {
4120
- if (isPerpendicularInfo && isPerpendicularInfo.angle > 85) {
4112
+ if (isPerpendicularInfo && isPerpendicularInfo.angle > 79) {
4121
4113
  let dist00 = ptInsertTmp.point.distanceTo(tmpLineStart);
4122
4114
  let dist01 = ptInsertTmp.point.distanceTo(tmpLineEnd);
4123
4115
  if (dist00 < 0.3) {
@@ -4129,7 +4121,7 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
4129
4121
  }
4130
4122
  continue;
4131
4123
  }
4132
- if (isPerpendicularInfo && isPerpendicularInfo.angle > 85) {
4124
+ if (isPerpendicularInfo && isPerpendicularInfo.angle > 79) {
4133
4125
  let tmpLine3 = new THREE5.Line3(tmpOtherLineStart, tmpOtherLineEnd);
4134
4126
  const ptClose = tmpLine3.closestPointToPoint(tmpLineStart, true, ptTarget);
4135
4127
  let isParallelism = getParallelism(tmpLineStart, tmpLineEnd, ptClose, tmpLineStart);
@@ -4155,10 +4147,7 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
4155
4147
  let tmpDist8 = getZZeroPointToPointDistance(tmpDoorEnd, tmpOtherLineEnd);
4156
4148
  let isPPPP = getParallelism(tmpLineStart, tmpLineEnd, tmpOtherLineStart, tmpDoorStart);
4157
4149
  let nearCheckResult = false;
4158
- let tempLineF = lineReader.readLineById(lines[f].id);
4159
- tempLineF.checkResults = lineReader.getLineCheckReultsById(lines[f].id);
4160
- lines[f].checkResults = tempLineF.checkResults;
4161
- tempLineF = null;
4150
+ lines[f].checkResults = lineReader.getLineCheckReultsById(lines[f].id);
4162
4151
  if (lines[f].checkResults) {
4163
4152
  for (let a = 0; a < lines[f].checkResults.length; a++) {
4164
4153
  let ptsTmpp = [];
@@ -4227,7 +4216,7 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
4227
4216
  const ptInsertTmp = segmentsIntersect2D(tmpLineStart, tmpLineEnd, tmpOtherLineStart, tmpOtherLineEnd, 0.03);
4228
4217
  let isPerpendicularInfo = perpendicularInfo(tmpLineStart, tmpLineEnd, tmpOtherLineStart, tmpOtherLineEnd);
4229
4218
  if (ptInsertTmp != null) {
4230
- if (isPerpendicularInfo && isPerpendicularInfo.angle > 85) {
4219
+ if (isPerpendicularInfo && isPerpendicularInfo.angle > 79) {
4231
4220
  let dist00 = ptInsertTmp.point.distanceTo(tmpLineStart);
4232
4221
  let dist01 = ptInsertTmp.point.distanceTo(tmpLineEnd);
4233
4222
  if (dist01 < 0.3) {
@@ -4239,7 +4228,7 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
4239
4228
  }
4240
4229
  continue;
4241
4230
  }
4242
- if (isPerpendicularInfo && isPerpendicularInfo.angle > 85) {
4231
+ if (isPerpendicularInfo && isPerpendicularInfo.angle > 79) {
4243
4232
  let tmpLine3 = new THREE5.Line3(tmpOtherLineStart, tmpOtherLineEnd);
4244
4233
  const ptClose = tmpLine3.closestPointToPoint(tmpLineEnd, true, ptTarget);
4245
4234
  let isParallelism = getParallelism(tmpLineEnd, tmpLineStart, ptClose, tmpLineEnd);
@@ -4265,10 +4254,7 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
4265
4254
  let tmpDist8 = getZZeroPointToPointDistance(tmpDoorEnd, tmpOtherLineEnd);
4266
4255
  let isPPPP = getParallelism(tmpLineEnd, tmpLineStart, tmpOtherLineStart, tmpDoorStart);
4267
4256
  let nearCheckResult = false;
4268
- let tempLineF = lineReader.readLineById(lines[f].id);
4269
- tempLineF.checkResults = lineReader.getLineCheckReultsById(lines[f].id);
4270
- lines[f].checkResults = tempLineF.checkResults;
4271
- tempLineF = null;
4257
+ lines[f].checkResults = lineReader.getLineCheckReultsById(lines[f].id);
4272
4258
  if (lines[f].checkResults) {
4273
4259
  for (let a = 0; a < lines[f].checkResults.length; a++) {
4274
4260
  let ptsTmpp = [];
@@ -4662,10 +4648,7 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
4662
4648
  }
4663
4649
  }
4664
4650
  const allTmpPoints = [];
4665
- let tempLineX = lineReader.readLineById(lines[x].id);
4666
- tempLineX.originalPoints = lineReader.getOriginalPointsById(lines[x].id);
4667
- lines[x].originalPoints = tempLineX.originalPoints;
4668
- tempLineX = null;
4651
+ lines[x].originalPoints = lineReader.getOriginalPointsById(lines[x].id);
4669
4652
  lines[x].originalPoints.forEach((item) => {
4670
4653
  if (item.z > doorTmpSt.z + 0.2 && item.z < doorTmpSt.z + height / 2)
4671
4654
  allTmpPoints.push(new THREE5.Vector3(item.x, item.y, doorTmpSt.z));
@@ -4829,10 +4812,7 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
4829
4812
  let lineIsOnlyBeam1 = false;
4830
4813
  let lineIsOnlyBeam2 = false;
4831
4814
  if (doorAndBeamDataObj.type == "beam" && tmpDoorBeamData.type == "beam") {
4832
- let tempLineT = lineReader.readLineById(lines[doorBeamDataIndex[w2].linesIndex].id);
4833
- tempLineT.originalPoints = lineReader.getOriginalPointsById(lines[doorBeamDataIndex[w2].linesIndex].id);
4834
- lines[doorBeamDataIndex[w2].linesIndex].originalPoints = tempLineT.originalPoints;
4835
- tempLineT = null;
4815
+ lines[doorBeamDataIndex[w2].linesIndex].originalPoints = lineReader.getOriginalPointsById(lines[doorBeamDataIndex[w2].linesIndex].id);
4836
4816
  let Z1 = getPointsMinAndMax(lines[doorBeamDataIndex[w2].linesIndex].originalPoints);
4837
4817
  let Z2 = getPointsMinAndMax(line2.originalPoints);
4838
4818
  lines[doorBeamDataIndex[w2].linesIndex].originalPoints = null;
@@ -4964,6 +4944,8 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
4964
4944
  }
4965
4945
  if (findDoorIndexs.length > 1) {
4966
4946
  for (let j = 0; j < findDoorIndexs.length; j++) {
4947
+ if (onProgress != null)
4948
+ onProgress(60 + (j + 1) / findDoorIndexs.length * 5);
4967
4949
  let savedata2 = [];
4968
4950
  for (let d = 0; d < lines[findDoorIndexs[j]].doorAndBeamData.length; d++) {
4969
4951
  let isDel = false;
@@ -5020,142 +5002,149 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, re
5020
5002
  let maxDoorLength = 2;
5021
5003
  let isFindWallIndex = [];
5022
5004
  let allDoorLines = [];
5023
- for (let n = 0; n < doorDatas.length; n++) {
5024
- if (doorDatas[n].isFind || doorDatas[n].inWall)
5025
- continue;
5026
- let doorSt = new THREE5.Vector3(doorDatas[n].doorStartPt.x, doorDatas[n].doorStartPt.y, 0);
5027
- let doorEd = new THREE5.Vector3(doorDatas[n].doorEndPt.x, doorDatas[n].doorEndPt.y, 0);
5028
- let vec1 = new THREE5.Vector3().subVectors(doorSt, doorEd).normalize();
5029
- for (let j = 0; j < lines.length; j++) {
5030
- if (lines[j].length < 0.7 || lines[j].completePointAreaPercentage > 60)
5005
+ if (doorDatas.length > 0) {
5006
+ for (let n = 0; n < doorDatas.length; n++) {
5007
+ if (onProgress != null)
5008
+ onProgress(65 + (n + 1) / doorDatas.length * 35);
5009
+ if (doorDatas[n].isFind || doorDatas[n].inWall)
5031
5010
  continue;
5032
- let beamSt = new THREE5.Vector3(lines[j].start.x, lines[j].start.y, 0);
5033
- let beamEd = new THREE5.Vector3(lines[j].end.x, lines[j].end.y, 0);
5034
- let vec2 = new THREE5.Vector3().subVectors(beamSt, beamEd).normalize();
5035
- let nExtend = 0.3;
5036
- let doorStExtended = doorSt.clone().addScaledVector(vec1, nExtend);
5037
- let doorEdExtended = doorEd.clone().addScaledVector(vec1.clone().negate(), nExtend);
5038
- let beamStExtended = beamSt.clone().addScaledVector(vec2, nExtend);
5039
- let beamEdExtended = beamEd.clone().addScaledVector(vec2.clone().negate(), nExtend);
5040
- let insertPt = segmentsIntersect2D(doorStExtended, doorEdExtended, beamStExtended, beamEdExtended);
5041
- let isDoorParBeam = getParallelism(
5042
- doorStExtended,
5043
- doorEdExtended,
5044
- beamStExtended,
5045
- beamEdExtended
5046
- );
5047
- let ptNear = doorSt.distanceTo(beamSt) > doorEd.distanceTo(beamSt) ? doorEd : doorSt;
5048
- let dist11 = ptNear.distanceTo(beamSt);
5049
- let dist22 = ptNear.distanceTo(beamEd);
5050
- let isNear = dist11 < nearDist || dist22 < nearDist;
5051
- if (isNear && isDoorParBeam && !isDoorParBeam.isParallel) {
5052
- let nearDoorDist1 = doorSt.distanceTo(beamSt);
5053
- let nearDoorDist2 = doorSt.distanceTo(beamEd);
5054
- let nearDoorPt = nearDoorDist1 < nearDoorDist2 ? beamSt : beamEd;
5055
- let findLine = false;
5056
- for (let k = 0; k < lines.length; k++) {
5057
- if (k == j || isFindWallIndex.includes(k) || lines[k].length < 0.7)
5058
- continue;
5059
- let beamStOther = new THREE5.Vector3(lines[k].start.x, lines[k].start.y, 0);
5060
- let beamEdOther = new THREE5.Vector3(lines[k].end.x, lines[k].end.y, 0);
5061
- let vec32 = new THREE5.Vector3().subVectors(beamStOther, beamEdOther).normalize();
5062
- let vec4 = vec32.clone().negate();
5063
- let newBeamStOther = beamStOther.clone().addScaledVector(vec32, 5);
5064
- let newBeamEdOther = beamEdOther.clone().addScaledVector(vec4, 5);
5065
- let isP = perpendicularInfo(beamSt, beamEd, beamStOther, beamEdOther);
5066
- let isPP = classifySegments(beamSt, beamEd, beamStOther, beamEdOther);
5067
- let isTmpInsert = segmentsIntersect2D(beamSt, beamEd, newBeamStOther, newBeamEdOther);
5068
- let isInside = true;
5069
- if (isTmpInsert != null) {
5070
- isInside = isTmpInsert.point.distanceTo(beamSt) < nearDist || isTmpInsert.point.distanceTo(beamEd) < nearDist;
5071
- }
5072
- if ((isP && isP.angle > 85 || isPP && isPP.type == "collinear_gap") && isInside) {
5073
- let line3 = new THREE5.Line3(beamSt, beamEd);
5074
- let target = new THREE5.Vector3();
5075
- let ptClose1 = line3.closestPointToPoint(beamStOther, true, target);
5076
- let ptClose2 = line3.closestPointToPoint(beamEdOther, true, target);
5077
- let dist1 = ptClose1.distanceTo(beamStOther);
5078
- let dist23 = ptClose2.distanceTo(beamEdOther);
5079
- let doorStartPt, doorEndPt;
5080
- if (dist1 > dist23 && dist23 > minDoorLength) {
5081
- doorStartPt = beamEdOther;
5082
- doorEndPt = ptClose2;
5083
- } else if (dist1 < dist23 && dist1 > minDoorLength) {
5084
- doorStartPt = beamStOther;
5085
- doorEndPt = ptClose1;
5086
- } else
5087
- continue;
5088
- dist1 = nearDoorPt.distanceTo(beamStOther);
5089
- dist23 = nearDoorPt.distanceTo(beamEdOther);
5090
- if (dist1 > maxDoorLength && dist23 > maxDoorLength)
5091
- continue;
5092
- let isPP2 = getParallelism(doorStartPt, doorEndPt, beamStOther, beamEdOther);
5093
- let isPPP = getParallelism(doorStartPt, doorEndPt, doorStExtended, doorEdExtended);
5094
- if (isPPP && isPPP.isParallel)
5095
- continue;
5096
- if (!isPP2 || !isPP2.isParallel)
5097
- continue;
5098
- let resOverlap = classifySegments(doorSt, doorEd, doorStartPt, doorEndPt);
5099
- if (resOverlap && resOverlap.type == "collinear_overlap" && resOverlap.maxPerpendicularDistance < 0.2)
5011
+ let doorSt = new THREE5.Vector3(doorDatas[n].doorStartPt.x, doorDatas[n].doorStartPt.y, 0);
5012
+ let doorEd = new THREE5.Vector3(doorDatas[n].doorEndPt.x, doorDatas[n].doorEndPt.y, 0);
5013
+ let vec1 = new THREE5.Vector3().subVectors(doorSt, doorEd).normalize();
5014
+ for (let j = 0; j < lines.length; j++) {
5015
+ if (lines[j].length < 0.7 || lines[j].completePointAreaPercentage > 60)
5016
+ continue;
5017
+ let beamSt = new THREE5.Vector3(lines[j].start.x, lines[j].start.y, 0);
5018
+ let beamEd = new THREE5.Vector3(lines[j].end.x, lines[j].end.y, 0);
5019
+ let vec2 = new THREE5.Vector3().subVectors(beamSt, beamEd).normalize();
5020
+ let nExtend = 0.3;
5021
+ let doorStExtended = doorSt.clone().addScaledVector(vec1, nExtend);
5022
+ let doorEdExtended = doorEd.clone().addScaledVector(vec1.clone().negate(), nExtend);
5023
+ let beamStExtended = beamSt.clone().addScaledVector(vec2, nExtend);
5024
+ let beamEdExtended = beamEd.clone().addScaledVector(vec2.clone().negate(), nExtend);
5025
+ let insertPt = segmentsIntersect2D(doorStExtended, doorEdExtended, beamStExtended, beamEdExtended);
5026
+ let isDoorParBeam = getParallelism(
5027
+ doorStExtended,
5028
+ doorEdExtended,
5029
+ beamStExtended,
5030
+ beamEdExtended
5031
+ );
5032
+ let ptNear = doorSt.distanceTo(beamSt) > doorEd.distanceTo(beamSt) ? doorEd : doorSt;
5033
+ let dist11 = ptNear.distanceTo(beamSt);
5034
+ let dist22 = ptNear.distanceTo(beamEd);
5035
+ let isNear = dist11 < nearDist || dist22 < nearDist;
5036
+ if (isNear && isDoorParBeam && !isDoorParBeam.isParallel) {
5037
+ let nearDoorDist1 = doorSt.distanceTo(beamSt);
5038
+ let nearDoorDist2 = doorSt.distanceTo(beamEd);
5039
+ let nearDoorPt = nearDoorDist1 < nearDoorDist2 ? beamSt : beamEd;
5040
+ let findLine = false;
5041
+ for (let k = 0; k < lines.length; k++) {
5042
+ if (k == j || isFindWallIndex.includes(k) || lines[k].length < 0.7)
5100
5043
  continue;
5101
- doorStartPt.z = doorEndPt.z = lines[k].start.z;
5102
- let isOverlap = false;
5103
- for (let m = 0; m < allDoorLines.length; m++) {
5104
- let result = classifySegments(allDoorLines[m].start, allDoorLines[m].end, doorStartPt, doorEndPt);
5105
- if (result && result.type == "collinear_overlap" && result.maxPerpendicularDistance < 0.2) {
5106
- isOverlap = true;
5107
- break;
5108
- }
5044
+ let beamStOther = new THREE5.Vector3(lines[k].start.x, lines[k].start.y, 0);
5045
+ let beamEdOther = new THREE5.Vector3(lines[k].end.x, lines[k].end.y, 0);
5046
+ let vec32 = new THREE5.Vector3().subVectors(beamStOther, beamEdOther).normalize();
5047
+ let vec4 = vec32.clone().negate();
5048
+ let newBeamStOther = beamStOther.clone().addScaledVector(vec32, 5);
5049
+ let newBeamEdOther = beamEdOther.clone().addScaledVector(vec4, 5);
5050
+ let isP = perpendicularInfo(beamSt, beamEd, beamStOther, beamEdOther);
5051
+ let isPP = classifySegments(beamSt, beamEd, beamStOther, beamEdOther);
5052
+ let isTmpInsert = segmentsIntersect2D(beamSt, beamEd, newBeamStOther, newBeamEdOther);
5053
+ let isInside = true;
5054
+ if (isTmpInsert != null) {
5055
+ isInside = isTmpInsert.point.distanceTo(beamSt) < nearDist || isTmpInsert.point.distanceTo(beamEd) < nearDist;
5109
5056
  }
5110
- if (isOverlap)
5111
- continue;
5112
- for (let x = 0; x < lines.length; x++) {
5113
- if (lines[x].length < 0.5) continue;
5114
- let startPt2 = new THREE5.Vector3(lines[x].start.x, lines[x].start.y, lines[x].start.z);
5115
- let endPt2 = new THREE5.Vector3(lines[x].end.x, lines[x].end.y, lines[x].end.z);
5116
- let result = classifySegments(startPt2, endPt2, doorStartPt, doorEndPt);
5117
- if (result && result.type == "collinear_overlap" && result.maxPerpendicularDistance < 0.1) {
5118
- isOverlap = true;
5119
- break;
5057
+ if ((isP && isP.angle > 85 || isPP && isPP.type == "collinear_gap") && isInside) {
5058
+ let line3 = new THREE5.Line3(beamSt, beamEd);
5059
+ let target = new THREE5.Vector3();
5060
+ let ptClose1 = line3.closestPointToPoint(beamStOther, true, target);
5061
+ let ptClose2 = line3.closestPointToPoint(beamEdOther, true, target);
5062
+ let dist1 = ptClose1.distanceTo(beamStOther);
5063
+ let dist23 = ptClose2.distanceTo(beamEdOther);
5064
+ let doorStartPt, doorEndPt;
5065
+ if (dist1 > dist23 && dist23 > minDoorLength) {
5066
+ doorStartPt = beamEdOther;
5067
+ doorEndPt = ptClose2;
5068
+ } else if (dist1 < dist23 && dist1 > minDoorLength) {
5069
+ doorStartPt = beamStOther;
5070
+ doorEndPt = ptClose1;
5071
+ } else
5072
+ continue;
5073
+ dist1 = nearDoorPt.distanceTo(beamStOther);
5074
+ dist23 = nearDoorPt.distanceTo(beamEdOther);
5075
+ if (dist1 > maxDoorLength && dist23 > maxDoorLength)
5076
+ continue;
5077
+ let isPP2 = getParallelism(doorStartPt, doorEndPt, beamStOther, beamEdOther);
5078
+ let isPPP = getParallelism(doorStartPt, doorEndPt, doorStExtended, doorEdExtended);
5079
+ if (isPPP && isPPP.isParallel)
5080
+ continue;
5081
+ if (!isPP2 || !isPP2.isParallel)
5082
+ continue;
5083
+ let resOverlap = classifySegments(doorSt, doorEd, doorStartPt, doorEndPt);
5084
+ if (resOverlap && resOverlap.type == "collinear_overlap" && resOverlap.maxPerpendicularDistance < 0.2)
5085
+ continue;
5086
+ doorStartPt.z = doorEndPt.z = lines[k].start.z;
5087
+ let isOverlap = false;
5088
+ for (let m = 0; m < allDoorLines.length; m++) {
5089
+ let result = classifySegments(allDoorLines[m].start, allDoorLines[m].end, doorStartPt, doorEndPt);
5090
+ if (result && result.type == "collinear_overlap" && result.maxPerpendicularDistance < 0.2) {
5091
+ isOverlap = true;
5092
+ break;
5093
+ }
5120
5094
  }
5095
+ if (isOverlap)
5096
+ continue;
5097
+ for (let x = 0; x < lines.length; x++) {
5098
+ if (lines[x].length < 0.5) continue;
5099
+ let startPt2 = new THREE5.Vector3(lines[x].start.x, lines[x].start.y, lines[x].start.z);
5100
+ let endPt2 = new THREE5.Vector3(lines[x].end.x, lines[x].end.y, lines[x].end.z);
5101
+ let result = classifySegments(startPt2, endPt2, doorStartPt, doorEndPt);
5102
+ if (result && result.type == "collinear_overlap" && result.maxPerpendicularDistance < 0.1) {
5103
+ isOverlap = true;
5104
+ break;
5105
+ }
5106
+ }
5107
+ if (isOverlap)
5108
+ continue;
5109
+ allDoorLines.push({
5110
+ start: doorStartPt,
5111
+ end: doorEndPt
5112
+ });
5113
+ isFindWallIndex.push(k);
5114
+ let height1 = lines[k].rooftopPz - lines[k].start.z;
5115
+ let height2 = lines[j].rooftopPz - lines[j].start.z;
5116
+ let doorHeight = height1 < height2 ? height1 : height2;
5117
+ if (!lines[k].doorAndBeamData)
5118
+ lines[k].doorAndBeamData = [];
5119
+ lines[k].doorAndBeamData.push({
5120
+ id,
5121
+ beamStart: doorStartPt,
5122
+ beamEnd: doorEndPt,
5123
+ beamHeight: doorHeight,
5124
+ doorStart: doorStartPt,
5125
+ doorEnd: doorEndPt,
5126
+ doorHeight,
5127
+ nearId: -1,
5128
+ type: "onlyDoor",
5129
+ isDoor: true,
5130
+ beamNearWallVec: new THREE5.Vector3(0, 0, 0),
5131
+ groundClearance: 0
5132
+ });
5133
+ pcdData[doorDatas[n].index].isFindBeam = true;
5134
+ pcdData[doorDatas[n].index].isFindOnlyDoor = true;
5135
+ beamGroup.push([{ id, beamStart: doorStartPt, beamEnd: doorEndPt }]);
5136
+ id++;
5137
+ findLine = true;
5138
+ break;
5121
5139
  }
5122
- if (isOverlap)
5123
- continue;
5124
- allDoorLines.push({
5125
- start: doorStartPt,
5126
- end: doorEndPt
5127
- });
5128
- isFindWallIndex.push(k);
5129
- let height1 = lines[k].rooftopPz - lines[k].start.z;
5130
- let height2 = lines[j].rooftopPz - lines[j].start.z;
5131
- let doorHeight = height1 < height2 ? height1 : height2;
5132
- if (!lines[k].doorAndBeamData)
5133
- lines[k].doorAndBeamData = [];
5134
- lines[k].doorAndBeamData.push({
5135
- id,
5136
- beamStart: doorStartPt,
5137
- beamEnd: doorEndPt,
5138
- beamHeight: doorHeight,
5139
- doorStart: doorStartPt,
5140
- doorEnd: doorEndPt,
5141
- doorHeight,
5142
- nearId: -1,
5143
- type: "onlyDoor",
5144
- isDoor: true,
5145
- beamNearWallVec: new THREE5.Vector3(0, 0, 0),
5146
- groundClearance: 0
5147
- });
5148
- pcdData[doorDatas[n].index].isFindBeam = true;
5149
- pcdData[doorDatas[n].index].isFindOnlyDoor = true;
5150
- beamGroup.push([{ id, beamStart: doorStartPt, beamEnd: doorEndPt }]);
5151
- id++;
5152
- findLine = true;
5153
- break;
5154
5140
  }
5141
+ if (findLine) break;
5155
5142
  }
5156
- if (findLine) break;
5157
5143
  }
5158
5144
  }
5145
+ } else {
5146
+ if (onProgress != null)
5147
+ onProgress(100);
5159
5148
  }
5160
5149
  let tmpLines = [];
5161
5150
  for (let i = 0; i < lines.length; i++) {
@@ -5199,10 +5188,7 @@ var checkBeamIsReasonable = async (lines, lineReader) => {
5199
5188
  doorAndBeamDataObj.beamNearWallVec = new THREE5.Vector3().subVectors(ptClose66, tmpPt66).normalize();
5200
5189
  }
5201
5190
  const allTmpPoints = [];
5202
- let tempLineX = lineReader.readLineById(lines[x].id);
5203
- tempLineX.originalPoints = lineReader.getOriginalPointsById(lines[x].id);
5204
- lines[x].originalPoints = tempLineX.originalPoints;
5205
- tempLineX = null;
5191
+ lines[x].originalPoints = lineReader.getOriginalPointsById(lines[x].id);
5206
5192
  lines[x].originalPoints.forEach((item) => {
5207
5193
  if (item.z > doorTmpSt.z + 0.2 && item.z < doorTmpSt.z + height / 2)
5208
5194
  allTmpPoints.push(new THREE5.Vector3(item.x, item.y, doorTmpSt.z));
@@ -5560,9 +5546,9 @@ var getColLine = (lines, runDataList) => {
5560
5546
  };
5561
5547
  let isFindColIndexs = /* @__PURE__ */ new Set();
5562
5548
  let minColLineLength = 0.1;
5563
- let maxColLineLength = 1.2;
5549
+ let maxColLineLength = 2;
5564
5550
  let minArea = 0.15;
5565
- let maxArea = 2;
5551
+ let maxArea = 2.5;
5566
5552
  let minPerpendicularAngle = 80;
5567
5553
  let maxPerpendicularAngle = 95;
5568
5554
  if (!lines[0].uuid) {
@@ -8515,7 +8501,7 @@ var drawStaircase = (pcdPointsArr, scene) => {
8515
8501
  }
8516
8502
  return pointCloudGroup;
8517
8503
  };
8518
- var getMergeMeaning = (allProjectionResults, averagePz2, pointCloudCluster = null) => {
8504
+ var getMergeMeaning = (allProjectionResults, averagePz2, pointCloudCluster = null, tolerancePointCloudCluster = 0.1) => {
8519
8505
  if (allProjectionResults.length == 0) return [];
8520
8506
  if (!averagePz2) averagePz2 = allProjectionResults[0].averagePz;
8521
8507
  const pcdPointsArr = [];
@@ -9041,7 +9027,7 @@ var getMergeMeaning = (allProjectionResults, averagePz2, pointCloudCluster = nul
9041
9027
  if (points.length < 50)
9042
9028
  continue;
9043
9029
  let clusterResult = pointCloudCluster([points], {
9044
- tolerance: 0.2,
9030
+ tolerance: tolerancePointCloudCluster,
9045
9031
  minClusterSize: 50,
9046
9032
  maxClusterSize: 1e7,
9047
9033
  threadCount: 1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rm-graphical-computing-node",
3
- "version": "1.0.38",
3
+ "version": "1.0.40",
4
4
  "description": "墙体/梁线/点云语义计算库(依赖 Python 与 three.js)",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",