我创建了一个库,用于在Python中创建和使用b样条曲面,使用parallelscipy.interpolate.RectBivariateSpline()实例来保存节点向量(X,Y,Z)控制点网格,以及u和v(执行曲面求值的(t,c,k)元组)的度数。我还编写了一个步骤解析器来读取从CAD包导出的曲面数据;我从文件中的b_spline_surface_with_knots实体获取(t,c,k)值,并将它们填充到我自己的对象中。surface库对我来说工作得很好,但是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(或google)中没有多少戳戳和戳戳可以揭示如何获得定义曲面的(t,c,k)值。
有人能告诉我揭示这些价值的方法吗?或者可能还有另一个基于Python的步骤解析器,它的不透明性稍低一些吗?

最佳答案

这个问题有点老了,但万一有人碰到类似的问题。。。
step_reader.Shape()的结果是拓扑形状,它是一个拓扑实体,可以分为以下组件拓扑:
顶点-与几何中的一个点相对应的零维形状;
边–与曲线相对应的形状,并由每一端的顶点绑定;
Wire–由顶点连接的一系列边;
面-平面(在二维几何图形中)或曲面(在三维几何图形中)的一部分,由闭合线包围;
外壳-由线边界的某些边连接的面集合;
实体-三维空间的一部分,由壳绑定;
复合固体–固体的集合。
通常,您可以使用TopoDS_Shape::ShapeType()方法查询它,以便知道该形状(顶点)是什么?边缘?, ...).
如果模型是由单个b样条曲面形成的,则形状应为拓扑面,可以通过调用:

face = aResShape.Face();

一旦有了TopoDS_面,就可以得到下面这样的基本几何体(Geom_Surface):
surface = BRepAdaptor_Surface(face).Surface().BSpline();

现在您已经访问了基础几何体,可以调用此对象的方法,它们将为您提供所需的信息。
它们记录在这里:
https://www.opencascade.com/doc/occt-7.1.0/refman/html/class_geom___b_spline_surface.html
OpenCASCADE文档可能看起来很混乱,但我认为您可能对这个主题感兴趣:
https://www.opencascade.com/doc/occt-7.0.0/overview/html/occt_user_guides__modeling_data.html#occt_modat_3
希望有帮助。

关于python - 从OpenCascade曲面获取(t,c,k)值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28845402/

10-13 09:00