Классификация объектов TopoDS_Edge в opencascade

У меня возникают проблемы с некоторыми моделями IGES/STEP, где мой код не может классифицировать грани на основе базовой классификации ребер, т.е. является ли ребро прямой линией (нерациональная кривая B-сплайна) или дугой (рациональная кривая B-сплайна). Я использовал приведенный ниже код (который работает для некоторых моделей):

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

, где ребро — это TopoDS_Edge, а edgex — это настраиваемый объект Edge. Я также попробовал следующий код, но он приводит к сбою программы во второй строке:

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

Не могли бы вы помочь с лучшим методом или исправить мои решения. Заранее спасибо.


person Minathe    schedule 10.03.2020    source источник


Ответы (1)


Вы можете использовать метод BrepAdaptor::GetType() для определения типа кривой. Вылет во второй строке происходит, видимо, из-за того, что ребро не является кривой BSpline, а метод BrepAdaptor::BSpline() создает копию, и делать ее не из чего.

person AlexanderFS    schedule 10.03.2020
comment
Спасибо. Для типа GeomAbs_BSplineCurve мне также пришлось проверить, является ли кривая рациональной или нет. - person Minathe; 11.03.2020