使用python vtk 生成立体网格
效果:
points = vtk.vtkPoints()
cells = vtk.vtkCellArray()
polydata = vtk.vtkPolyData()
mapper = vtk.vtkPolyDataMapper()
rangeX = [-10,10]
rangeY = [-10,10]
rangeZ = [-10,10]
intervalX = 2
intervalY = 2
intervalZ = 2
for gridZ in range(rangeZ[0],rangeZ[1] + intervalZ,intervalZ):
for gridX in range(rangeX[0],rangeX[1] + intervalX,intervalX):
lineStart = [gridX, rangeY[0],gridZ]
lineEnd = [gridX,rangeY[1],gridZ]
pointIdStart = points.InsertNextPoint(lineStart)
pointIdEnd = points.InsertNextPoint(lineEnd)
singleLineCell = [pointIdStart,pointIdEnd]
cells.InsertNextCell(2,singleLineCell)
for gridY in range(rangeY[0],rangeY[1] +intervalY,intervalY):
lineStart = [gridY, rangeX[0],gridZ]
lineEnd = [gridY,rangeX[1],gridZ]
pointIdStart = points.InsertNextPoint(lineStart)
pointIdEnd = points.InsertNextPoint(lineEnd)
singleLineCell = [pointIdStart,pointIdEnd]
cells.InsertNextCell(2,singleLineCell)
for gridY in range(rangeY[0], rangeY[1] + intervalY , intervalY):
for gridZ in range(rangeZ[0], rangeZ[1] + intervalZ, intervalZ):
lineStart = [rangeX[0], gridY, gridZ]
lineEnd = [rangeX[1], gridY, gridZ]
pointIdStart = points.InsertNextPoint(lineStart)
pointIdEnd = points.InsertNextPoint(lineEnd)
singleLineCell = [pointIdStart, pointIdEnd]
cells.InsertNextCell(2, singleLineCell)
for gridX in range(rangeX[0], rangeX[1] +intervalX, intervalX):
lineStart = [gridX, gridY, rangeZ[0]]
lineEnd = [gridX, gridY, rangeZ[1]]
pointIdStart = points.InsertNextPoint(lineStart)
pointIdEnd = points.InsertNextPoint(lineEnd)
singleLineCell = [pointIdStart, pointIdEnd]
cells.InsertNextCell(2, singleLineCell)
polydata.SetLines(cells)
polydata.SetPoints(points)
mapper.SetInputData(polydata)
actor = vtk.vtkActor()
actor.SetMapper(mapper)
ren1 = vtk.vtkRenderer()
ren1.AddActor(actor)
ren1.SetBackground(0.1,0.2,0.4)
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren1);
renWin.SetSize(300, 300);
#enderWindowInteractor
iren = vtk.vtkRenderWindowInteractor();
iren.SetRenderWindow(renWin);
style = vtk.vtkInteractorStyleTrackballCamera();
iren.SetInteractorStyle(style);
renWin.SetSize(600, 600);
renWin.Render();
iren.Initialize()
iren.Start()
代码: