Классификация объектов TopoDS_Edge в opencascade - PullRequest
0 голосов
/ 10 марта 2020

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

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())

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

1 Ответ

1 голос
/ 10 марта 2020

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

...