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

时间:2015-03-04 01:53:34

标签: python cad step opencascade

我创建了一个用于在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解析器不那么不透明?

1 个答案:

答案 0 :(得分:1)

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

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

  • 顶点 - 与几何中的点对应的零维形状;
  • 边缘 - 与曲线对应的形状,并由每个末端的顶点约束;
  • Wire - 由顶点连接的一系列边缘;
  • 面部 - 由闭合线限定的平面的一部分(在2D几何体中)或表面(在3D几何体中);
  • 外壳 - 由线边界的某些边连接的面的集合;
  • Solid - 由shell绑定的3D空间的一部分;
  • 复合固体 - 固体的集合。

准确地说,你要用方法 TopoDS_Shape :: ShapeType()查询它,以便知道那个形状是什么(顶点?边缘?,...)。

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

face = aResShape.Face();

一旦掌握了TopoDS_Face,就可以得到基础几何体(Geom_Surface):

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

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

这里记录了它们:

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

希望它有所帮助。