【问题标题】:Classifying TopoDS_Face face分类 TopoDS_Face 人脸
【发布时间】:2019-04-08 22:09:30
【问题描述】:

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

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

【问题讨论】:

    标签: opencascade


    【解决方案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
    }
    

    【讨论】:

    • 添加了cout 以打印 PLANAR 或 NON-PLANAR,但输出始终是 NON-PLANAR,它应该打印 PLANAR 12 次和 NON-PLANAR 两次。
    • CAD 模型中似乎没有关于曲面类型的信息。在这种情况下,表面曲率值会有所帮助。看答案更新。
    • BRepLProp_SLProps surfaceProps(surface, u, v, 2, gp::Resolution()); 没有叫surfaceProps的方法
    • 这是真的,因为surfaceProps 是对象名称。在这一行,调用了 BRepLProp_SLProps 构造函数。
    猜你喜欢
    • 2014-05-23
    • 2018-01-10
    • 2021-06-27
    • 2020-06-03
    • 2020-04-28
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2018-02-16
    相关资源
    最近更新 更多