【问题标题】:Getting (t, c, k) values from OpenCascade surfaces从 OpenCascade 表面获取 (t, c, k) 值
【发布时间】:2015-05-04 21:45:58
【问题描述】:

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

【问题讨论】:

    标签: python cad step opencascade


    【解决方案1】:

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

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

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

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

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

    face = aResShape.Face();
    

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

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

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

    他们记录在这里:

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

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      相关资源
      最近更新 更多