【问题标题】:Extract volume from a STEP file从 STEP 文件中提取体积
【发布时间】:2021-04-03 09:52:54
【问题描述】:

我的目标是编写一个 Python 程序,在 STEP 文件中提取对象的体积。我能够发现 steputilsaoxchange 是 Python 中存在的两个库,但它们似乎都没有包含足够的关于从文件中提取卷/属性的文档。是否有任何文件可以解释这一点?我为STL 文件尝试了一个类似的用例,并且能够使用numpy-stl 成功实现它。我正在为 STEP 文件搜索类似 numpy-stl 的东西。下面是我如何为STL 文件实现它的示例代码。

import numpy
from stl import mesh
your_mesh = mesh.Mesh.from_file('/path/to/myfile.stl')
volume, cog, inertia = your_mesh.get_mass_properties()
print("Volume = {0}".format(volume))

【问题讨论】:

  • @itprorh66 这个问题似乎很具体,可能有适合此任务的 unique(或至少“规范”)工具。如果有关如何在 Python 中查找列表长度的问题可以得到数百个赞成票,那么为了保持一致性,SO 应该容忍有关如何实现更具体任务的问题,例如“在STEP 文件中提取对象的体积”。为此,我对这个问题投了赞成票。
  • @itprorh66 添加了最小可重现示例。问题也用更好的语法进行了编辑。
  • 不是python,而是一种算法和一篇论文来检查你是否想形成一个函数stackoverflow.com/questions/1406029/…
  • 找到了一个repo,他们似乎在使用pythonocc将step文件转换为stl,然后计算体积:https://github.com/jdlubrano/cad_volume
  • 请注意,STEP 文件可能会定义“验证”属性 - 例如直接在 STEP 文件中编码的体积/表面值。从几何重新计算体积并从 STEP 文件本身提取此信息不是一回事(尽管在有效的 STEP 文件和精细的 STEP 几何导入没有问题的情况下,值应该相同或彼此接近)。

标签: python python-3.x step


【解决方案1】:

编辑以考虑 gkv311 的建议:pythonOCC 可用于直接计算音量。

from OCC.Core.GProp import GProp_GProps
from OCC.Core.BRepGProp import brepgprop_VolumeProperties
from OCC.Extend.DataExchange import read_step_file

my_shape = read_step_file(path_to_file)
prop = GProp_GProps()
tolerance = 1e-5 # Adjust to your liking
volume = brepgprop_VolumeProperties(myshape, prop, tolerance)
print(volume)

旧版本,使用STEPSTL的转换。


绝对不是最优雅的解决方案,但它可以完成工作:使用Pythonocc(aoxchange 所基于的库),您可以将STEP 文件转换为STL,然后使用您问题中的解决方案来计算STL 的音量。

from OCC.Core.STEPControl import STEPControl_Reader
from OCC.Core.StlAPI import StlAPI_Writer

input_file  = 'myshape.stp'
output_file = 'myshape.stl'

# Load STEP file
step_reader = STEPControl_Reader()
step_reader.ReadFile( input_file )
step_reader.TransferRoot()
myshape = step_reader.Shape()
print("File loaded")

# Export to STL
stl_writer = StlAPI_Writer()
stl_writer.SetASCIIMode(True)
stl_writer.Write(myshape, output_file)
print("Done")

【讨论】:

  • 这确实是一个解决方案。在这个问题之前,我已经看过你发布的链接。我在安装 pythonOcc 本身时遇到了麻烦。你能分享一下你安装pythonOcc的最新链接吗?
  • 您可以进一步尝试通过 Open CASCADE Technology 本身的 BRepGProp 工具扩展答案并计算音量。 bgprop = BRepGProp()| prop = GProp_GProps()| err = bgprop.VolumeProperties(myshape, prop)| volume = prop.Mass()
  • 我使用this binder 进行实验,因为我目前没有在我的工作站上安装它。 conda install 几个月前确实为我工作过,否则有关于如何从源代码 here 编译的说明。
  • 我不知道那个工具@gkv311,谢谢!编辑了答案以添加这个更优雅的解决方案。
  • @Seon Okay 将再等两天,看看是否有人提出了更好的解决方案。如果不是,赏金将属于您,因为这是一个有效的规范解决方案。
猜你喜欢
  • 1970-01-01
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多