4

我创建了一个库,用于在 Python 中创建和使用 b 样条曲面,利用并行scipy.interpolate.RectBivariateSpline()实例来保存节点向量、(X、Y、Z)控制点网格,以及 u 和 v 中的度数((t,c, k) 对其执行表面评估的元组)。我还编写了一个 STEP 解析器来读取从 CAD 包导出的表面数据;我从b_spline_surface_with_knots文件中的实体中获取 (t, c, k) 值并将它们填充到我自己的对象中。表面库对我来说工作得很好,但是 STEP 解析器很痛苦,几乎每次我使用它时都会以各种方式失败。因此,我尝试使用“真正的”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) 值。

有人可以指点我揭示这些价值观的方法吗?或者是否可能有另一个不那么不透明的基于 Python 的 STEP 解析器?

4

1 回答 1

2

这个问题有点老了,但以防万一其他人在这里遇到类似的问题......

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

  • 顶点——与几何中的点相对应的零维形状;
  • 边——对应于曲线的形状,并在每个末端由一个顶点限制;
  • 连线——由顶点连接的一系列边;
  • 面——由闭合线包围的平面(在 2D 几何中)或表面(在 3D 几何中)的一部分;
  • 壳 - 由其线边界的某些边缘连接的面的集合;
  • 实体 – 由外壳限制的 3D 空间的一部分;
  • 复合固体——固体的集合。

通常,您会使用方法TopoDS_Shape::ShapeType()查询它,以便知道该形状是什么(顶点?边缘?,...)。

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

face = aResShape.Face();

一旦你手头有了 TopoDS_Face,你就可以像这样得到底层几何体 (Geom_Surface):

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

现在您已经可以访问底层几何图形,您可以调用此对象的方法,它们将为您提供所需的信息。

它们记录在这里:

OpenCASCADE 文档可能看起来令人困惑,但我认为您可能对这个主题感兴趣:

希望能帮助到你。

于 2017-07-18T21:20:41.380 回答