分类TopoDS_Face脸

时间:2019-04-08 10:16:33

标签: opencascade

我有一个TopoDS_Face对象,它来自IGES文件的翻译。如果我使用自己的算法(用C语言编写)来解析IGES文件,该算法会搜索人脸,然后搜索人脸所指向的循环,最后搜索循环中的边缘,则可以确定人脸是平面的还是非平面的。平面(弯曲时为半圆柱)。这是通过基于基础NURBS(实体126)中的表单号检查边缘是直线还是圆弧来完成的。直线的形式为1,弧的形式为2。

开放级联中可以使用哪些方法/功能或其他机制来确定TopoDS_Face是平面的还是半圆柱的(弯曲)?

1 个答案:

答案 0 :(得分:1)

您可以使用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
}