rm-graphical-computing-node 1.0.69 → 1.0.71

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 +99 -8
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -5665,9 +5665,9 @@ var getColLine = async (lines, runDataList, collectDataPath, pointCloudCluster =
5665
5665
  threeEdgeRect: []
5666
5666
  };
5667
5667
  let isFindColIndexs = /* @__PURE__ */ new Set();
5668
- let minColLineLength = 0.1;
5668
+ let minColLineLength = 0.05;
5669
5669
  let maxColLineLength = 2;
5670
- let minArea = 0.15;
5670
+ let minArea = 0.1;
5671
5671
  let maxArea = 2.5;
5672
5672
  let minPerpendicularAngle = 80;
5673
5673
  let maxPerpendicularAngle = 95;
@@ -10881,7 +10881,7 @@ var getSlabData = (lines, runDataList, pointCloudCluster = null, getOblique = fa
10881
10881
  const flatSlabDatas = getFlatSlabData(flatSlabPoints, runDataList, pointCloudCluster);
10882
10882
  const flatFloorDatas = getFlatFloorData(flatSlabPoints, runDataList, pointCloudCluster);
10883
10883
  const obliqueSlabDatas = getObliqueSlabData(obliqueSlabPoints, runDataList, pointCloudCluster);
10884
- return { flatSlabDatas, obliqueSlabDatas };
10884
+ return { flatSlabDatas, obliqueSlabDatas, flatFloorDatas };
10885
10885
  };
10886
10886
  var getFlatSlabData = (lines, runDataList, pointCloudCluster = null) => {
10887
10887
  if (lines.length === 0) return;
@@ -11052,8 +11052,8 @@ var getFlatFloorData = (lines, runDataList, pointCloudCluster = null) => {
11052
11052
  if (averageZ < maxZ) continue;
11053
11053
  let pathPoints = newPoints[u4].map((p) => [p.x, p.y]);
11054
11054
  let path3 = computeContour(pathPoints);
11055
- let area2 = calculatePolygonArea(path3);
11056
- if (area2 < 0.5) continue;
11055
+ let area3 = calculatePolygonArea(path3);
11056
+ if (area3 < 0.5) continue;
11057
11057
  const floorData = {
11058
11058
  contour: path3,
11059
11059
  averagePz: averagePz2,
@@ -11099,11 +11099,62 @@ var getFlatFloorData = (lines, runDataList, pointCloudCluster = null) => {
11099
11099
  if (!delIndex.has(j))
11100
11100
  floorDatas.push({
11101
11101
  contour: newFloorDatas[j].contour,
11102
- averagePz: newFloorDatas[j].averagePz
11103
- // points: newFloorDatas[j].points
11102
+ averagePz: newFloorDatas[j].averagePz,
11103
+ points: newFloorDatas[j].points
11104
11104
  });
11105
11105
  }
11106
- return floorDatas;
11106
+ let maxContourIndex = -1;
11107
+ let maxPointsLength = 0;
11108
+ let area2 = 0;
11109
+ let avaregPzs = [];
11110
+ let disIncludeIndexs = [];
11111
+ for (let i = 0; i < floorDatas.length; i++) {
11112
+ const contour = floorDatas[i].contour;
11113
+ if (contour.length) {
11114
+ const points = floorDatas[i].points;
11115
+ let avaregZ = 0;
11116
+ points.forEach((p) => {
11117
+ avaregZ += p.z;
11118
+ });
11119
+ avaregZ /= points.length;
11120
+ avaregPzs.push(avaregZ);
11121
+ if (avaregZ < averageZ) {
11122
+ const { width, height } = getOBB(contour);
11123
+ const newArea = width * height;
11124
+ if (newArea > area2) {
11125
+ if (points.length > maxPointsLength && (avaregZ < runDataList[0].z || Math.abs(avaregZ - runDataList[0].z) < 0.1)) {
11126
+ if (maxContourIndex > -1) {
11127
+ disIncludeIndexs.push(maxContourIndex);
11128
+ }
11129
+ area2 = newArea;
11130
+ maxContourIndex = i;
11131
+ maxPointsLength = points.length;
11132
+ continue;
11133
+ }
11134
+ disIncludeIndexs.push(i);
11135
+ } else {
11136
+ if (points.length > maxPointsLength && area2 - newArea < area2 / 3 && (avaregZ < runDataList[0].z || Math.abs(avaregZ - runDataList[0].z) < 0.1)) {
11137
+ if (maxContourIndex > -1) {
11138
+ disIncludeIndexs.push(maxContourIndex);
11139
+ }
11140
+ area2 = newArea;
11141
+ maxContourIndex = i;
11142
+ maxPointsLength = points.length;
11143
+ continue;
11144
+ }
11145
+ disIncludeIndexs.push(i);
11146
+ }
11147
+ }
11148
+ } else {
11149
+ console.log("\u4E0D\u5B58\u5728\uFF01");
11150
+ avaregPzs.push(1e4);
11151
+ }
11152
+ }
11153
+ return {
11154
+ contour: floorDatas[maxContourIndex].contour,
11155
+ averagePz: avaregPzs[maxContourIndex]
11156
+ /**, points: floorDatas[maxContourIndex].points */
11157
+ };
11107
11158
  };
11108
11159
  var getObliqueSlabData = (lines, runDataList, pointCloudCluster = null) => {
11109
11160
  if (lines.length === 0) return [];
@@ -11280,6 +11331,46 @@ function getPathZ(path3, points) {
11280
11331
  }
11281
11332
  }
11282
11333
  }
11334
+ var getOBB = (contour) => {
11335
+ const center = [0, 0];
11336
+ for (const [x, y] of contour) {
11337
+ center[0] += x;
11338
+ center[1] += y;
11339
+ }
11340
+ center[0] /= contour.length;
11341
+ center[1] /= contour.length;
11342
+ let covXX = 0, covXY = 0, covYY = 0;
11343
+ for (const [x, y] of contour) {
11344
+ const dx = x - center[0];
11345
+ const dy = y - center[1];
11346
+ covXX += dx * dx;
11347
+ covXY += dx * dy;
11348
+ covYY += dy * dy;
11349
+ }
11350
+ covXX /= contour.length;
11351
+ covXY /= contour.length;
11352
+ covYY /= contour.length;
11353
+ const det = Math.sqrt((covXX - covYY) ** 2 + 4 * covXY ** 2);
11354
+ const eigenVal1 = (covXX + covYY + det) / 2;
11355
+ const eigenVal2 = (covXX + covYY - det) / 2;
11356
+ const angle = Math.atan2(2 * covXY, covXX - covYY) / 2;
11357
+ const rotatedPoints = contour.map((p) => {
11358
+ const x = p[0] * Math.cos(-angle) - p[1] * Math.sin(-angle);
11359
+ const y = p[0] * Math.sin(-angle) + p[1] * Math.cos(-angle);
11360
+ return [x, y];
11361
+ });
11362
+ let minX = Infinity, maxX = -Infinity;
11363
+ let minY = Infinity, maxY = -Infinity;
11364
+ for (const [x, y] of rotatedPoints) {
11365
+ minX = Math.min(minX, x);
11366
+ maxX = Math.max(maxX, x);
11367
+ minY = Math.min(minY, y);
11368
+ maxY = Math.max(maxY, y);
11369
+ }
11370
+ const width = maxX - minX;
11371
+ const height = maxY - minY;
11372
+ return { width, height };
11373
+ };
11283
11374
 
11284
11375
  // src/geometry/window.mjs
11285
11376
  import * as THREE10 from "three";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rm-graphical-computing-node",
3
- "version": "1.0.69",
3
+ "version": "1.0.71",
4
4
  "description": "墙体/梁线/点云语义计算库(依赖 Python 与 three.js)",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",