转换stl 2 numpy,体积数据

时间:2016-04-04 12:58:35

标签: python arrays numpy stl

有没有办法将 stl文件转换为numpy 数组? 使用x*y*z数据点解析的numpy数组应该包含" inside"意义上的体积信息。或"外面"几何,比如0或1。

令我惊讶的是,我还没有找到任何相关内容,尽管numpy2stl似乎很受欢迎。

问题是多孔介质的复杂几何形状,因此凸壳转换也不起作用。

import numpy
import stl
from stl import mesh
stl.stl.MAX_COUNT = 1e10
your_mesh = stl.mesh.Mesh.from_file('Data.stl')
print your_mesh.data

似乎只能导出三角形。

此外,即使这通常会导致MemoryError消息;但是numpy-stl(通常)用于将数据点加载到numpy。

有没有办法将stl数据转换为包含信息的体数据,如果每个点都在几何体内部或外部? 生成的3D阵列在技术上可能是二进制数据类型,但这不是必需的。 过于复杂 使用商业软件,这种转换似乎微不足道,但它不是python或free。从头开始实现光线投射算法对于文件类型转换来说似乎过于复杂。

2 个答案:

答案 0 :(得分:1)

我确实相信您想要做的是体素的体素化。您可以使用位于https://trimsh.org/ <style name="ButtonStyle" parent="Widget.MaterialComponents.Button.UnelevatedButton"> <item name="cornerRadius">@dimen/margin_20dp</item> <item name="android:padding">@dimen/margin_8dp</item> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">match_parent</item> <item name="android:layout_weight">1</item> <item name="android:textSize">@dimen/text_size_14sp</item> <item name="android:textAllCaps">false</item> <item name="android:textColor">@drawable/drawable_button_toggle_group_text_selector</item> <item name="android:backgroundTint">@drawable/drawable_button_toggle_group_selector</item> </style> <style name="ButtonsToggleGroupStyle"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_gravity">center</item> <item name="android:orientation">horizontal</item> <item name="android:layout_marginStart">@dimen/margin_32dp</item> <item name="android:layout_marginTop">@dimen/margin_12dp</item> <item name="android:layout_marginEnd">@dimen/margin_32dp</item> </style> 软件包来做到这一点

trimesh

您还可以使用以下方法检查点列表是否在体积内:

import trimesh
mesh = trimesh.load_mesh('path2yourstlfile.stl')
assert(mesh.is_watertight) # you cannot build a solid if your volume is not tight
volume = mesh.voxelized(pitch=0.1)
mat = mesh.matrix # matrix of boolean

答案 1 :(得分:0)

[4]中的小错字,trimesh没有矩阵属性,可以从VoxelGrid获得。

mat = mesh.matrix

固定

mat = volume.matrix