我创建了一个用于在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解析器不那么不透明?
答案 0 :(得分:1)
这个问题有点陈旧,但万一有其他人在这里遇到类似的问题......
step_reader.Shape()的结果是TopoDS_Shape,它是一个拓扑实体,可以分为以下组件拓扑:
准确地说,你要用方法 TopoDS_Shape :: ShapeType()查询它,以便知道那个形状是什么(顶点?边缘?,...)。
如果模型由单个b样条曲面形成,那么形状应该是TopoDS_Face,您可以通过调用获得:
face = aResShape.Face();
一旦掌握了TopoDS_Face,就可以得到基础几何体(Geom_Surface):
surface = BRepAdaptor_Surface(face).Surface().BSpline();
现在您已经可以访问基础几何体,您可以调用此对象的方法,它们将为您提供所需的信息。
这里记录了它们:
OpenCASCADE文档可能看起来令人困惑,但我想您可能对此主题感兴趣:
希望它有所帮助。