首页 文章

从OpenCascade曲面获取(t,c,k)值

提问于
浏览
3

我创建了一个用于在Python中创建和使用b样条曲面的库,利用并行 scipy.interpolate.RectBivariateSpline() 实例来保存结矢量,(X,Y,Z)控制点网格,以及u和v中的度数((t,c) ,k)进行表面评估的元组) . 我还编写了一个STEP解析器来读取从CAD包导出的表面数据;我从文件中的 b_spline_surface_with_knots 实体中获取(t,c,k)值,并将它们填充到我自己的对象中 . 表面库对我来说效果很好,但STEP解析器很痛苦,几乎每次使用它都会以各种方式失败 . 所以我've tried using a '真正的'STEP解析器,像这样:

from OCC.STEPControl import STEPControl_Reader
from OCC.IFSelect import IFSelect_RetDone, IFSelect_ItemsByEntity

step_reader = STEPControl_Reader()
status = step_reader.ReadFile('c:/LPT/nomdata/lpt3.stp')

if status == IFSelect_RetDone:  # check status
    failsonly = False
    step_reader.PrintCheckLoad(failsonly, IFSelect_ItemsByEntity)
    step_reader.PrintCheckTransfer(failsonly, IFSelect_ItemsByEntity)

    ok = step_reader.TransferRoot(1)
    _nbs = step_reader.NbShapes()
    aResShape = step_reader.Shape(1)
else:
    print("Error: can't read file.")
    sys.exit(0)

现在我有了这个 aResShape 对象,但在IPython中没有任何戳戳和刺激它(也不是谷歌搜索)揭示了如何获得定义表面的(t,c,k)值 .

有人可以指点我揭示这些 Value 观的方法吗?或者是否有另一种基于Python的STEP解析器不太透明?

1 回答

  • 1

    这个问题有点陈旧,但万一其他人遇到类似的问题......

    step_reader.Shape()的结果是TopoDS_Shape,它是一个拓扑实体,可以分为以下组件拓扑:

    • 顶点 - 与几何中的点对应的零维形状;

    • 边 - 与曲线对应的形状,并由每个末端的顶点限定;

    • Wire - 由顶点连接的一系列边缘;

    • 面 - 由闭合线限定的平面的一部分(在2D几何体中)或表面(在3D几何体中);

    • Shell - 由线边界的某些边连接的面的集合;

    • Solid - 由shell绑定的3D空间的一部分;

    • 复合实体 - 固体的集合 .

    简而言之,您可以使用方法TopoDS_Shape :: ShapeType()查询它,以了解该形状是什么(顶点?边缘?,...) .

    如果模型由单个b样条曲面形成,那么形状应该是TopoDS_Face,您可以通过调用获得:

    face = aResShape.Face();
    

    一旦掌握了TopoDS_Face,就可以获得如下所示的基础几何体(Geom_Surface):

    surface = BRepAdaptor_Surface(face).Surface().BSpline();
    

    现在您已经可以访问基础几何体,您可以调用此对象的方法,它们将为您提供所需的信息 .

    它们记录在这里:

    OpenCASCADE文档可能看起来令人困惑,但我想您可能对此主题感兴趣:

    希望能帮助到你 .

相关问题