首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从OpenCascade曲面获取(t,c,k)值

从OpenCascade曲面获取(t,c,k)值
EN

Stack Overflow用户
提问于 2015-03-04 01:53:34
回答 1查看 937关注 0票数 4

我创建了一个库,用于在Python中创建和使用b样条曲面,使用并行scipy.interpolate.RectBivariateSpline()实例来保存节点向量、(X、Y、Z)控制点网格,以及u和v( (t,c,k)元组中执行曲面计算的度数)。我还编写了一个STEP解析器来读取从CAD包导出的表面数据;我从文件中的b_spline_surface_with_knots实体获取(t,c,k)值,并将它们填充到我自己的对象中。表面库对我来说运行得很好,但是步骤解析器很麻烦,每次我使用它时都会以各种方式失败。因此,我尝试使用“真正的”步骤解析器,如下所示:

代码语言:javascript
复制
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的步骤解析器,其不太透明?

EN

回答 1

Stack Overflow用户

发布于 2017-07-18 21:20:41

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

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

  • 顶点-与几何学中的一个点对应的零维形状;
  • 边缘-一种与曲线相对应的形状,在每一端都有一个顶点;
  • 线-由它们的顶点连接的一系列边;
  • 面-平面的一部分(在二维几何中)或表面(在三维几何中)被一个封闭的线所包围;
  • 外壳--由金属线边界的一些边缘连接的一组面;
  • 实体-三维空间的一部分,被一个外壳所束缚;
  • 复合固体-固体的集合。

技巧上,您可以使用TopoDS_Shape::ShapeType()方法查询它,以便知道该形状是什么(顶点)?边缘?,)。

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

代码语言:javascript
复制
face = aResShape.Face();

一旦您手头有了TopoDS_Face,您就可以得到这样的底层几何学(Geom_Surface):

代码语言:javascript
复制
surface = BRepAdaptor_Surface(face).Surface().BSpline();

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

在此记录如下:

OpenCASCADE文档可能会让人感到困惑,但我认为您可能对这个主题感兴趣:

希望能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28845402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档