【问题标题】:How to use PythonOCC to import parametrical references?如何使用 PythonOCC 导入参数引用?
【发布时间】:2020-02-25 20:57:25
【问题描述】:

出于数据交换比较的原因,我需要从 CAD 文件中提取几何/参数参考。为此,我在 conda 环境中使用 PythonOCC 库。

到目前为止,我能够绘制提取的文件(在我的情况下是一个 STEP 文件),但我找不到关于这个库的任何进一步的文档(除了它拥有的所有函数 API 的列表,但它没有帮助我,因为有很多功能,它并没有真正解释它是如何工作的)。我的目标是从 NURBS/Splines 描述中提取参数参考以捕获表面的一些精确点(没有数据转换,这就是我不想通过 CAD 环境的原因)。

有谁知道我应该如何探索 pythonOCC 的哪些功能或知道任何可以提供帮助的文档?

到目前为止,我的代码只能显示实体:

 #Reads STEP files, checks them and translates their contents into Open CASCADE models.

from OCC.Core.STEPControl import STEPControl_Reader
step_reader = STEPControl_Reader() 
step_reader.ReadFile(r'C:\Users\jonat\Desktop\aspherique_32spln_10-4tol.STP')
step_reader.TransferRoot()
lens = step_reader.Shape()

#Open display to plot the shape

from OCC.Display.SimpleGui import init_display
display, start_display, add_menu, add_function_to_menu = init_display()

display.DisplayShape(lens, update=True)
start_display()

【问题讨论】:

  • 什么是“提取参数参考以捕获表面上的一些精确点”?您输入了什么以及预期的输出是什么?
  • 我的输入将是一个由 SolidWorks 生成的 STEP 文件,例如(这部分我已经完成),我的预期输出是获得一些东西,让我可以在实体表面找到点.通过在表面上找到一些点,我的意思是给出一个 x 和一个 y 并找到相应的 z。我相信从 STEP 文件的 NURBS/Splines 描述中捕获这些几何规范的唯一方法是获取参数方程。

标签: python cad opencascade


【解决方案1】:

弄乱 NURBS 方程可能很难。例如,一个壳可能由几个面组成,每个面可能有不同的数学表示。因此使用更高级别的 Open CASCADE 功能可能是更好的方法。

Open CASCADE 有一个类BRepExtrema_DistShapeShape。您可以使用两个 TopoDS_Shapes 来提供它,并通过调用 PointOnShape1PointOnShape2 来获取两个形状上最近的点。

如果你用你的表面几何图形和一个顶点来提供它,你可以获得最接近这个顶点的表面点。另一方面,如果你用你的表面几何形状和平行于 z 轴的(可能很长的)边缘来馈送它并进入给定的 x/y 元组,你可以检查交叉点的数量(方法NbSolution)并获得交点坐标。

这是你需要的吗?我已经给出了 C++ 代码中的名称,但很可能 pythonOCC 具有相同的类和方法,但名称非常相似......?

【讨论】:

  • 我认为我真正需要的是你在此处引用的内容“另一方面,如果你用你的表面几何形状和平行于 z 轴的(可能很长的)边缘喂它并去给定 x/y 元组,您可以检查交叉点的数量(方法 NbSolution)并获取交叉点坐标。”
  • 现在,更具体地说,我如何使用类和方法来检查交叉点和坐标?不好意思问的很具体,我对OCC不熟悉,Python技术也不是很高级
  • 我不知道pythonOCC,所以我真的帮不了你。由于BRepExtrema_DistShapeShape 采用TopoDS_Shape 实例,您需要创建这些实例。很可能您的表面已经是TopoDS_Shape,因为您已从 STEP 文件中读取它。使用BRepBuilderAPI_MakeEdgeBRepBuilderAPI_MakeVertex,您应该能够从给定坐标创建顶点或边。如果这很难做到,您可能必须继续发布问题并等待 pythonOCC 专家查看和回答。
  • 如何解决 C++ 结构中的问题?我在这里苦苦挣扎,因为几乎不可能为 PythonOCC 找到好的示例/文档。我的意思是,我确信 PythonOCC 非常强大,但肯定只有少数人能够使用它的全部功能
  • 您可以在此处找到一些 C++ 示例代码:opencascade.com/content/…。此外,如果您在互联网上搜索“pythonocc BRepExtrema_DistShapeShape”,似乎您可能会找到一些 Python 示例代码。
猜你喜欢
  • 2012-06-26
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
  • 2018-08-28
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多