Measuring - Fixes in plane-plane measurement - Measurements validation - Fixes in dimensioning rendering
This commit is contained in:
parent
afa003f3cb
commit
29d6127774
3 changed files with 27 additions and 17 deletions
|
@ -719,21 +719,23 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
|
|||
|
||||
const auto [idx1, normal1, pt1] = f1.get_plane();
|
||||
const auto [idx2, normal2, pt2] = f2.get_plane();
|
||||
double angle = 0.;
|
||||
|
||||
if (are_parallel(normal1, normal2)) {
|
||||
// The planes are parallel, calculate distance.
|
||||
Eigen::Hyperplane<double, 3> plane(normal1, pt1);
|
||||
result.distance_infinite = std::make_optional(DistAndPoints{plane.absDistance(pt2), Vec3d::Zero(), Vec3d::Zero()});
|
||||
} else {
|
||||
// Planes are not parallel, calculate angle.
|
||||
angle = std::acos(std::abs(normal1.dot(normal2)));
|
||||
const Eigen::Hyperplane<double, 3> plane(normal1, pt1);
|
||||
result.distance_infinite = std::make_optional(DistAndPoints{ plane.absDistance(pt2), pt2, plane.projection(pt2) }); // TODO
|
||||
}
|
||||
result.angle = angle_plane_plane(f1.get_plane(), f2.get_plane());
|
||||
result.distance_infinite = std::make_optional(DistAndPoints{0., Vec3d::Zero(), Vec3d::Zero()}); // TODO
|
||||
else
|
||||
result.angle = angle_plane_plane(f1.get_plane(), f2.get_plane());
|
||||
}
|
||||
|
||||
|
||||
// validation
|
||||
if (result.distance_infinite.has_value() && result.distance_infinite->dist < EPSILON)
|
||||
result.distance_infinite.reset();
|
||||
if (result.distance_strict.has_value() && result.distance_strict->dist < EPSILON)
|
||||
result.distance_strict.reset();
|
||||
if (result.angle.has_value() && std::abs(result.angle->angle) < EPSILON)
|
||||
result.angle.reset();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue