opencascade 使用过程中经常要计算某个点到某个 Edge 或者 Face 的最短距离,在opencascade 中有些算法可便捷地实现该功能。
#include <BRepBuilderAPI_MakeVertex.hxx>
#include <BRepExtrema_DistShapeShape.hxx>
#include <gp_Pnt.hxx>
double DistPoint2Shape(const gp_Pnt& fpPoint, const TopoDS_Shape& fpShape)
{
TopoDS_Vertex shapePoint = BRepBuilderAPI_MakeVertex(fpPoint);
// 计算点到边的最短距离
BRepExtrema_DistShapeShape extrema(shapePoint, fpShape);
extrema.Perform();
if (!extrema.IsDone() || extrema.NbSolution() == 0) {
std::cerr << "Error: Failed to compute distance." << std::endl;
return -1.0;
}
// 找到最近点
const gp_Pnt& nearestPoint = extrema.PointOnShape2(1);
// 计算点到最近点的距离
return fpPoint.Distance(nearestPoint);
}