对 TopoDS_Face 人脸进行分类

Classifying TopoDS_Face face

我有一个来自 IGES 文件翻译的 TopoDS_Face 对象。如果我使用我自己的算法(用 C 编写)解析 IGES 文件,该算法搜索面,然后是面指向的环,最后是环中的边,我可以确定面是平面的还是非平面的平面(弯曲处为半圆柱形)。这是通过根据底层 NURBS(实体 126)中的形式编号检查边是直线还是圆弧来完成的。直线的形式为 1,弧的形式为 2。

在 Open Cascade 中可以使用什么 methods/functions 或其他机制来确定 TopoDS_Face 是平面还是半圆柱(弯曲)?

您可以使用 BRepAdaptor_Surface class 获取 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
}