如何在 OpenCASCADE 中从两个 gp_Pnt 创建 TopoDS_Edge

OCCUtils 提供了在两点之间创建 TopoDS_Edge(即直线)的便捷函数:

edge_from_points_occ.cpp
#include <occutils/Edge.hxx>

using namespace OCCUtils;

gp_Pnt p1 = /* ... */;
gp_Pnt p2 = /* ... */;

TopoDS_Edge edge = Edge::FromPoints(p1, p2);

如果你想手动操作(即不使用 OCCUtils),使用此代码片段

makeedge_manual.cpp
TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(p1, p2).Edge();

但请注意你还需要处理 p1 == p2 的情况,即

check_points_equal.cpp
if (p1.Distance(p2) <= Precision::Confusion()) {
    // 在这种情况下不要尝试创建 Edge
}

OCCUtil 的 Edge::FromPoints 通过返回 TopoDS_Edge()edge.IsNull() == trueTopoDS_Edge 来处理这种情况。


Check out similar posts by category: C/C++, OpenCASCADE