refactor: Enhance wall classification logic by improving key generation and adding position pair tracking to prevent duplicates
This commit is contained in:
@@ -6,9 +6,19 @@ export function useWallClassification(walls: Walls) {
|
|||||||
if (walls.length < 3) return [];
|
if (walls.length < 3) return [];
|
||||||
|
|
||||||
const wallSet = new Map<string, Wall>();
|
const wallSet = new Map<string, Wall>();
|
||||||
|
const positionPairSet = new Set<string>();
|
||||||
|
|
||||||
const makeKey = (p1: Point, p2: Point) => {
|
const makeKey = (p1: Point, p2: Point) => {
|
||||||
return [p1.pointUuid, p2.pointUuid].sort().join("-");
|
return [p1.pointUuid, p2.pointUuid].sort((a, b) => a.localeCompare(b)).join("-");
|
||||||
|
};
|
||||||
|
|
||||||
|
const makePositionPairKey = (p1: Point, p2: Point) => {
|
||||||
|
const sortedPositions = [
|
||||||
|
[p1.position[0].toFixed(6), p1.position[2].toFixed(6)],
|
||||||
|
[p2.position[0].toFixed(6), p2.position[2].toFixed(6)],
|
||||||
|
].sort((a, b) => a[0].localeCompare(b[0]) || a[1].localeCompare(b[1]));
|
||||||
|
|
||||||
|
return sortedPositions.map((pos) => pos.join(",")).join("|");
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const wall of walls) {
|
for (const wall of walls) {
|
||||||
@@ -18,6 +28,14 @@ export function useWallClassification(walls: Walls) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const positionPairKey = makePositionPairKey(p1, p2);
|
||||||
|
|
||||||
|
if (positionPairSet.has(positionPairKey)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
positionPairSet.add(positionPairKey);
|
||||||
|
|
||||||
const key = makeKey(p1, p2);
|
const key = makeKey(p1, p2);
|
||||||
if (!wallSet.has(key)) {
|
if (!wallSet.has(key)) {
|
||||||
wallSet.set(key, wall);
|
wallSet.set(key, wall);
|
||||||
|
|||||||
Reference in New Issue
Block a user