rm-graphical-computing-node 1.0.88 → 1.0.90

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 +94 -13
  2. package/package.json +2 -3
package/dist/index.mjs CHANGED
@@ -4012,10 +4012,11 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
4012
4012
  line2.mergeCheckRegion = allRegion;
4013
4013
  }
4014
4014
  const doorDatas = [];
4015
+ const doorFrame = [];
4015
4016
  for (let i = 0; i < pcdData.length; i++) {
4016
4017
  const door = pcdData[i];
4017
4018
  door.isFindBeam = false;
4018
- if (door.category == "door") {
4019
+ if (door.category == "door" || door.category == "door frame") {
4019
4020
  let boxPoints = [];
4020
4021
  door.coordinatesByArea.coordinates.forEach((p) => {
4021
4022
  boxPoints.push(new THREE5.Vector3(p.x, p.y, p.z));
@@ -4030,17 +4031,31 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
4030
4031
  }
4031
4032
  let doorStartPt = getMid(boxPoints[0], boxPoints[3], true);
4032
4033
  let doorEndPt = getMid(boxPoints[1], boxPoints[2], true);
4033
- doorDatas.push({
4034
- doorStartPt,
4035
- doorEndPt,
4036
- boxPoints,
4037
- minZ: door.coordinatesByArea.heightData.minZ,
4038
- maxZ: door.coordinatesByArea.heightData.maxZ,
4039
- index: i,
4040
- isFind: false,
4041
- inWall: false
4042
- //是否在墙内
4043
- });
4034
+ let vecDoorFrame = new THREE5.Vector3().subVectors(doorEndPt, doorStartPt).normalize();
4035
+ if (door.category == "door") {
4036
+ doorDatas.push({
4037
+ doorStartPt,
4038
+ doorEndPt,
4039
+ boxPoints,
4040
+ minZ: door.coordinatesByArea.heightData.minZ,
4041
+ maxZ: door.coordinatesByArea.heightData.maxZ,
4042
+ index: i,
4043
+ isFind: false,
4044
+ inWall: false
4045
+ //是否在墙内
4046
+ });
4047
+ }
4048
+ if (door.category == "door frame") {
4049
+ doorFrame.push({
4050
+ doorStartPt,
4051
+ doorEndPt,
4052
+ vecDoorFrame,
4053
+ boxPoints,
4054
+ index: i,
4055
+ minZ: door.coordinatesByArea.heightData.minZ,
4056
+ maxZ: door.coordinatesByArea.heightData.maxZ
4057
+ });
4058
+ }
4044
4059
  }
4045
4060
  }
4046
4061
  for (let y = 0; y < doorDatas.length; y++) {
@@ -4600,7 +4615,7 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
4600
4615
  }
4601
4616
  if (
4602
4617
  /**!isPullOutDoor && */
4603
- length2 < 1.5
4618
+ length2 < 1.6
4604
4619
  ) {
4605
4620
  for (let n = 0; n < doorDatas.length; n++) {
4606
4621
  if (doorDatas[n].inWall) continue;
@@ -4885,6 +4900,72 @@ var getBeamLine = async (lines, runDataList, pcdData, lineReader, lineEditor, on
4885
4900
  }
4886
4901
  doorAndBeamDataObj.type = dataType;
4887
4902
  doorAndBeamDataObj.wallBelowBeam = wallBelowBeam;
4903
+ if (doorFrame && doorFrame.length > 0 && doorAndBeamDataObj.type == "door") {
4904
+ let doorLen = doorTmpSt.distanceTo(doorTmpEd);
4905
+ let lineStart2 = getPt3(line2.start);
4906
+ let lineEnd2 = getPt3(line2.end);
4907
+ const pcdToLineDist = 0.1;
4908
+ for (let x = 0; x < doorFrame.length; x++) {
4909
+ const ptArray = doorFrame[x].boxPoints;
4910
+ const doorFrameStart = getPt3(doorFrame[x].doorStartPt);
4911
+ const doorFrameEnd = getPt3(doorFrame[x].doorEndPt);
4912
+ doorFrameStart.z = doorFrameEnd.z = doorTmpSt.z;
4913
+ let doorFrameLen = doorFrameStart.distanceTo(doorFrameEnd);
4914
+ if (Math.abs(doorFrameLen - doorLen) > 0.5) continue;
4915
+ let result = getParallelism(doorFrameStart, doorFrameEnd, doorTmpSt, doorTmpEd);
4916
+ if (result && result.angleDeg < 15) {
4917
+ let ptLongSt1 = getPt3(ptArray[0]);
4918
+ let ptLongEd1 = getPt3(ptArray[1]);
4919
+ let ptLongSt2 = getPt3(ptArray[2]);
4920
+ let ptLongEd2 = getPt3(ptArray[3]);
4921
+ let ptShortSt1 = getPt3(ptArray[1]);
4922
+ let ptShortEd1 = getPt3(ptArray[2]);
4923
+ let ptShortSt2 = getPt3(ptArray[3]);
4924
+ let ptShortEd2 = getPt3(ptArray[0]);
4925
+ if (ptLongSt1.distanceTo(ptLongEd1) < ptLongSt1.distanceTo(ptLongEd2)) {
4926
+ ptLongSt1 = getPt3(ptArray[1]);
4927
+ ptLongEd1 = getPt3(ptArray[2]);
4928
+ ptLongSt2 = getPt3(ptArray[3]);
4929
+ ptLongEd2 = getPt3(ptArray[0]);
4930
+ ptShortSt1 = getPt3(ptArray[0]);
4931
+ ptShortEd1 = getPt3(ptArray[1]);
4932
+ ptShortSt2 = getPt3(ptArray[2]);
4933
+ ptShortEd2 = getPt3(ptArray[3]);
4934
+ }
4935
+ let vec1 = getVector3(lineStart2, lineEnd2);
4936
+ let vec2 = getVector3(ptShortSt1, ptShortEd1);
4937
+ let vec32 = getVector3(ptShortSt2, ptShortEd2);
4938
+ let tmpPtStart = lineStart2.clone().addScaledVector(vec1, -pcdToLineDist);
4939
+ let tmpPtEnd = lineEnd2.clone().addScaledVector(vec1, pcdToLineDist);
4940
+ let tmpPtShortSt1 = ptShortSt1.clone().addScaledVector(vec2, -pcdToLineDist);
4941
+ let tmpPtShortEd1 = ptShortEd1.clone().addScaledVector(vec2, pcdToLineDist);
4942
+ let tmpPtShortSt2 = ptShortSt2.clone().addScaledVector(vec32, -pcdToLineDist);
4943
+ let tmpPtShortEd2 = ptShortEd2.clone().addScaledVector(vec32, pcdToLineDist);
4944
+ let intersect1 = segmentsIntersect2D(tmpPtStart, tmpPtEnd, tmpPtShortSt1, tmpPtShortEd1, pcdToLineDist);
4945
+ let intersect2 = segmentsIntersect2D(tmpPtStart, tmpPtEnd, tmpPtShortSt2, tmpPtShortEd2, pcdToLineDist);
4946
+ if (intersect1 != null && intersect2 != null) {
4947
+ const ptIntersect1 = intersect1.point;
4948
+ const ptIntersect2 = intersect2.point;
4949
+ let ptOnLine1 = isPointOnLine2(ptIntersect1, ptIntersect2, doorTmpSt, 1e-3, true);
4950
+ let ptOnLine2 = isPointOnLine2(ptIntersect1, ptIntersect2, doorTmpEd, 1e-3, true);
4951
+ if (ptOnLine1 && ptOnLine2) {
4952
+ let originZ = doorTmpSt.z;
4953
+ doorTmpSt = ptIntersect1.clone();
4954
+ doorTmpEd = ptIntersect2.clone();
4955
+ doorTmpSt.z = doorTmpEd.z = originZ;
4956
+ doorAndBeamDataObj.doorStart = doorTmpSt.clone();
4957
+ doorAndBeamDataObj.doorEnd = doorTmpEd.clone();
4958
+ doorAndBeamDataObj.doorHeight = doorFrame[x].maxZ - doorAndBeamDataObj.doorStart.z;
4959
+ doorAndBeamDataObj.beamStart = doorTmpSt.clone();
4960
+ doorAndBeamDataObj.beamEnd = doorTmpEd.clone();
4961
+ doorAndBeamDataObj.beamStart.z = doorAndBeamDataObj.beamEnd.z = doorAndBeamDataObj.doorStart.z + doorAndBeamDataObj.doorHeight;
4962
+ doorAndBeamDataObj.beamHeight = line2.rooftopPz - doorAndBeamDataObj.beamStart.z;
4963
+ break;
4964
+ }
4965
+ }
4966
+ }
4967
+ }
4968
+ }
4888
4969
  for (let w2 = 0; w2 < doorBeamDataIndex.length; w2++) {
4889
4970
  const tmpDoorBeamData = lines[doorBeamDataIndex[w2].linesIndex].doorAndBeamData[doorBeamDataIndex[w2].doorIndex];
4890
4971
  if (tmpDoorBeamData.nearId != -1)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rm-graphical-computing-node",
3
- "version": "1.0.88",
3
+ "version": "1.0.90",
4
4
  "description": "墙体/梁线/点云语义计算库(依赖 Python 与 three.js)",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -20,10 +20,9 @@
20
20
  "dependencies": {
21
21
  "d3-delaunay": "^6.0.4",
22
22
  "geojson-minimum-bounding-rectangle": "^2.0.3",
23
- "rm-graphical-computing-node": "^1.0.24",
23
+ "rm-graphical-computing-node": "^1.0.88",
24
24
  "rm-gxf-computing-rusts": "^0.0.61",
25
25
  "rm-point-cloud-calculation": "^1.0.4",
26
- "rm-point-cloud-calculation-napi": "^1.0.13",
27
26
  "three": "^0.184.0"
28
27
  },
29
28
  "devDependencies": {