import numpy as np
from mayavi import mlab
import vtk
from scipy.spatial import Delaunay
def stlcreator(pm,filepath):
"""根据点云数据生成stl文件"""
# pm为三维点云数组
x = pm[:, 0]
y = pm[:, 1]
z = pm[:, 2]
xy = np.column_stack((x, y))
tri = Delaunay(xy) # 划分平面三角网格
element = tri.simplices # 每一个三角网格所包含点的索引号
surface = mlab.pipeline.triangular_mesh_source(x, y, z, element) # 建立三角曲面
surface_vtk = surface.outputs[0]._vtk_obj # 生成vtk文件
stlWriter = vtk.vtkSTLWriter() # stl生成器
stlWriter.SetFileName(filepath) # 设置文件路径
stlWriter.SetInputConnection(surface_vtk.GetOutputPort()) # 设置stlWriter的vtk接口
stlWriter.Write() # 保存曲面为stl