如何将 numpy 3D 数组转换为 meshgrid / stl

问题描述 投票:0回答:1

我有一个 3 维的 python numpy.ndarray,我希望最终目标是将其转换为 stl 文件,以便我可以 3D 打印它。

我发现了许多很酷的例子,人们使用 numpy.meshgrid 或其他包的函数,这些函数可以在 z 维度上获取 x/y 关系,并(最终)使用它来生成 stl。然而,就我而言,我没有 x、y 和 z 之间的数学关系,也没有描述数组面的顶点列表。

我还没有看到可以直接获取 3 维 numpy.ndarray 并将其转换为 meshgrid/stl/顶点列表等的东西。

你看到我遗漏的东西了吗? :)

谢谢!

python numpy
1个回答
0
投票

您可以使用VTK实现的Marching Cube算法,例如:

import numpy as np
import vtk
from vtk.util.numpy_support import numpy_to_vtk

# Create the binary mask of a cube as a 3d sample
shape = (5, 7, 9)
cube = np.zeros(shape, dtype=np.uint8)
cube[1:-1, 1:-1, 1:-1] = 1

# Convert to vtkImageData
vtk_data = vtk.vtkImageData()
vtk_data.SetDimensions(*cube.shape[::-1])
vtk_array = numpy_to_vtk(cube.ravel(), array_type=vtk.VTK_UNSIGNED_CHAR)
vtk_data.GetPointData().SetScalars(vtk_array)

# Apply marching cubes to get the surface
mc = vtk.vtkMarchingCubes()
mc.SetInputData(vtk_data)
mc.SetValue(0, 0.5)

# Save the resulting surface as STL
stl_writer = vtk.vtkSTLWriter()
stl_writer.SetInputConnection(mc.GetOutputPort())
stl_writer.SetFileName("cube_surface.stl")
stl_writer.Write()
© www.soinside.com 2019 - 2024. All rights reserved.