我有一个 3 维的 python numpy.ndarray,我希望最终目标是将其转换为 stl 文件,以便我可以 3D 打印它。
我发现了许多很酷的例子,人们使用 numpy.meshgrid 或其他包的函数,这些函数可以在 z 维度上获取 x/y 关系,并(最终)使用它来生成 stl。然而,就我而言,我没有 x、y 和 z 之间的数学关系,也没有描述数组面的顶点列表。
我还没有看到可以直接获取 3 维 numpy.ndarray 并将其转换为 meshgrid/stl/顶点列表等的东西。
你看到我遗漏的东西了吗? :)
谢谢!
您可以使用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()