我有一个TopoDS_Face
来自 IGES 文件翻译的对象。如果我使用自己的算法(用 C 编写)解析 IGES 文件,该算法搜索面然后搜索面指向的循环,最后是循环中的边缘,我可以确定面是平面的还是非平面的平面(弯曲的半圆柱形)。这是通过根据底层 NURBS(实体 126)中的表格编号检查边是直线还是弧来完成的。直线的形式为 1,弧的形式为 2。
在 Open Cascade 中可以使用哪些方法/功能或其他机制来确定 aTopoDS_Face
是平面还是半圆柱(弯曲)?
我有一个TopoDS_Face
来自 IGES 文件翻译的对象。如果我使用自己的算法(用 C 编写)解析 IGES 文件,该算法搜索面然后搜索面指向的循环,最后是循环中的边缘,我可以确定面是平面的还是非平面的平面(弯曲的半圆柱形)。这是通过根据底层 NURBS(实体 126)中的表格编号检查边是直线还是弧来完成的。直线的形式为 1,弧的形式为 2。
在 Open Cascade 中可以使用哪些方法/功能或其他机制来确定 aTopoDS_Face
是平面还是半圆柱(弯曲)?
您可以使用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
}