Skip to content

Commit a999efe

Browse files
feat: point association a bit more logical and simple
1 parent 9a74d41 commit a999efe

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/diffCheck/segmentation/DFSegmentation.cc

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -258,22 +258,21 @@ namespace diffCheck::segmentation
258258
Eigen::Vector3d segmentCenter;
259259
Eigen::Vector3d segmentNormal;
260260

261-
for (auto point : segment->Points){segmentCenter += point;}
262-
if (segment->GetNumPoints() > 0)
263-
{
264-
segmentCenter /= segment->GetNumPoints();
265-
}
266-
else
261+
if (segment->GetNumPoints() == 0)
267262
{
268263
DIFFCHECK_WARN("Empty segment. Skipping the segment.");
269264
continue;
270265
}
266+
segmentCenter = segment->GetAxixAlignedBoundingBox()[0] + (segment->GetAxixAlignedBoundingBox()[1] - segment->GetAxixAlignedBoundingBox()[0])/2.0;
267+
271268
for (auto normal : segment->Normals){segmentNormal += normal;}
272269
segmentNormal.normalize();
273270
double currentDistance = (faceCenter - segmentCenter).norm();
274271
double currentDitanceOrthogonalToFace = std::abs((faceCenter - segmentCenter).dot(faceNormal));
275272
double currentAngle = std::abs(sin(acos(faceNormal.dot(faceCenter - segmentCenter))));
276-
if (std::abs(sin(acos(faceNormal.dot(segmentNormal)))) < angleThreshold && currentDitanceOrthogonalToFace < maximumFaceSegmentDistance && currentDitanceOrthogonalToFace < faceDistance)
273+
if (std::abs(sin(acos(faceNormal.dot(segmentNormal)))) < angleThreshold
274+
&& currentDitanceOrthogonalToFace < maximumFaceSegmentDistance
275+
&& currentDitanceOrthogonalToFace < faceDistance)
277276
{
278277
correspondingSegment = segment;
279278
faceDistance = currentDitanceOrthogonalToFace;
@@ -435,7 +434,9 @@ namespace diffCheck::segmentation
435434
double currentDistance = (center - clusterCenter).norm() ;
436435
double adaptedDistance = currentDistance * std::abs(dotProduct);
437436

438-
if (std::abs(dotProduct) < angleThreshold && adaptedDistance < distance && currentDistance < (max - min).norm()*associationThreshold)
437+
if (std::abs(dotProduct) < angleThreshold
438+
&& adaptedDistance < distance
439+
&& currentDistance < (max - min).norm()*associationThreshold)
439440
{
440441
goodMeshIndex = meshIndex;
441442
goodFaceIndex = faceIndex;

0 commit comments

Comments
 (0)