在 opencascade 中对 TopoDS_Edge 个对象进行分类

Classifying TopoDS_Edge objects in opencascade

我在使用某些 IGES/STEP 模型时遇到了挑战,在这些模型中,我的代码无法根据边的基础分类对人脸进行分类,即边是直线(非有理 B 样条曲线)还是arc(有理 B 样条曲线)。我一直在使用下面的代码(适用于某些型号):

edgex.setIsRational(BRepAdaptor_Curve(edge).IsRational());

,其中边是 TopoDS_Edge,edgex 是自定义边对象。 我还尝试了以下代码,但它在第二行使程序崩溃:

BRepAdaptor_Curve curve = BRepAdaptor_Curve(edge);
Handle_Geom_BSplineCurve spline = curve.BSpline();
edgex.setIsRational(spline.IsRational())

能否请您提供更好的方法或修复我的解决方案。提前谢谢你。

您可以使用BrepAdaptor::GetType()方法来确定曲线的类型。第二行发生崩溃,显然,边缘不是 BSpline 曲线,BrepAdaptor::BSpline() 方法创建了一个副本,没有任何东西可以制作它。