我创建了一个用于在Python中创建和使用b样条曲面的库,利用并行 scipy.interpolate.RectBivariateSpline()
实例来保存结矢量,(X,Y,Z)控制点网格,以及u和v中的度数((t,c) ,k)进行表面评估的元组) . 我还编写了一个STEP解析器来读取从CAD包导出的表面数据;我从文件中的 b_spline_surface_with_knots
实体中获取(t,c,k)值,并将它们填充到我自己的对象中 . 表面库对我来说效果很好,但STEP解析器很痛苦,几乎每次使用它都会以各种方式失败 . 所以我've tried using a '真正的'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)值 .
有人可以指点我揭示这些 Value 观的方法吗?或者是否有另一种基于Python的STEP解析器不太透明?
1 回答
这个问题有点陈旧,但万一其他人遇到类似的问题......
step_reader.Shape()的结果是TopoDS_Shape,它是一个拓扑实体,可以分为以下组件拓扑:
顶点 - 与几何中的点对应的零维形状;
边 - 与曲线对应的形状,并由每个末端的顶点限定;
Wire - 由顶点连接的一系列边缘;
面 - 由闭合线限定的平面的一部分(在2D几何体中)或表面(在3D几何体中);
Shell - 由线边界的某些边连接的面的集合;
Solid - 由shell绑定的3D空间的一部分;
复合实体 - 固体的集合 .
简而言之,您可以使用方法TopoDS_Shape :: ShapeType()查询它,以了解该形状是什么(顶点?边缘?,...) .
如果模型由单个b样条曲面形成,那么形状应该是TopoDS_Face,您可以通过调用获得:
一旦掌握了TopoDS_Face,就可以获得如下所示的基础几何体(Geom_Surface):
现在您已经可以访问基础几何体,您可以调用此对象的方法,它们将为您提供所需的信息 .
它们记录在这里:
OpenCASCADE文档可能看起来令人困惑,但我想您可能对此主题感兴趣:
希望能帮助到你 .