rm-graphical-computing-node 1.0.69 → 1.0.70
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 +97 -6
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -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
|
|
11056
|
-
if (
|
|
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
|
-
|
|
11102
|
+
averagePz: newFloorDatas[j].averagePz,
|
|
11103
|
+
points: newFloorDatas[j].points
|
|
11104
11104
|
});
|
|
11105
11105
|
}
|
|
11106
|
-
|
|
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";
|