我创建了一个库,用于在Python中创建和使用b样条曲面,使用并行scipy.interpolate.RectBivariateSpline()实例来保存节点向量、(X、Y、Z)控制点网格,以及u和v( (t,c,k)元组中执行曲面计算的度数)。我还编写了一个STEP解析器来读取从CAD包导出的表面数据;我从文件中的b_spline_surface_with_knots实体获取(t,c,k)值,并将它们填充到我自己的对象中。表面库对我来说运行得很好,但是步骤解析器很麻烦,每次我使用它时都会以各种方式失败。因此,我尝试使用“真正的”步骤解析器,如下所示:
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 (或googling)中,没有多少戳和戳就能揭示出如何获取定义曲面的(t,c,k)值。
有人能给我指点一下显示这些值的方法吗?或者,是否还有另一个基于Python的步骤解析器,其不太透明?
发布于 2017-07-18 21:20:41
这个问题有点老了,但万一其他人遇到类似的问题.
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文档可能会让人感到困惑,但我认为您可能对这个主题感兴趣:
希望能帮上忙。
https://stackoverflow.com/questions/28845402
复制相似问题