对 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
}
我有一个来自 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
}