Классификация лица TopoDS_Face - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть объект TopoDS_Face, полученный из перевода файла IGES. Если я проанализирую файл IGES, используя свой собственный алгоритм (написанный на C), который выполняет поиск граней, то цикл (ы), на которые указывает грань, и, наконец, ребра в петле, я могу определить, является ли грань плоской или нет. планарный (полуцилиндрический в изгибах). Это делается путем проверки, является ли край линией или дугой на основе номера формы в базовом NURBS (объект 126). Линия имеет форму 1, а дуга - форму 2.

Какие методы / функции или другой механизм можно использовать в Open Cascade, чтобы определить, является ли TopoDS_Face плоским или полуцилиндрическим (изгибами)?

1 Ответ

1 голос
/ 08 апреля 2019

Вы можете использовать BRepAdaptor_Surface класс, чтобы получить тип TopoDS_Face поверхность:

BRepAdaptor_Surface surface = BRepAdaptor_Surface(face);
if (surface.GetType() == GeomAbs_Plane)
{
  // Surface is a plane
}
else
{
  // Surface is not a plane
}

Обновление:

Альтернативный способ определения плоской поверхностиили нет использует значение кривизны.Для плоских поверхностей средняя кривизна должна быть равна 0.

BRepAdaptor_Surface surface = BRepAdaptor_Surface(face);

double u = (surface.FirstUParameter() + surface.LastUParameter()) / 2.0;
double v = (surface.FirstVParameter() + surface.LastVParameter()) / 2.0;

BRepLProp_SLProps surfaceProps(surface, u, v, 2, gp::Resolution());
if (surfaceProps.MeanCurvature() == 0.0)
{
  // Surface is a plane
}
else
{
  // Surface is not a plane
}
...