2011-09-29 33 views

回答

17

這裏是其基於z軸值的點顏色的示例。

import vtk 
from numpy import random 

class VtkPointCloud: 

    def __init__(self, zMin=-10.0, zMax=10.0, maxNumPoints=1e6): 
     self.maxNumPoints = maxNumPoints 
     self.vtkPolyData = vtk.vtkPolyData() 
     self.clearPoints() 
     mapper = vtk.vtkPolyDataMapper() 
     mapper.SetInputData(self.vtkPolyData) 
     mapper.SetColorModeToDefault() 
     mapper.SetScalarRange(zMin, zMax) 
     mapper.SetScalarVisibility(1) 
     self.vtkActor = vtk.vtkActor() 
     self.vtkActor.SetMapper(mapper) 

    def addPoint(self, point): 
     if self.vtkPoints.GetNumberOfPoints() < self.maxNumPoints: 
      pointId = self.vtkPoints.InsertNextPoint(point[:]) 
      self.vtkDepth.InsertNextValue(point[2]) 
      self.vtkCells.InsertNextCell(1) 
      self.vtkCells.InsertCellPoint(pointId) 
     else: 
      r = random.randint(0, self.maxNumPoints) 
      self.vtkPoints.SetPoint(r, point[:]) 
     self.vtkCells.Modified() 
     self.vtkPoints.Modified() 
     self.vtkDepth.Modified() 

    def clearPoints(self): 
     self.vtkPoints = vtk.vtkPoints() 
     self.vtkCells = vtk.vtkCellArray() 
     self.vtkDepth = vtk.vtkDoubleArray() 
     self.vtkDepth.SetName('DepthArray') 
     self.vtkPolyData.SetPoints(self.vtkPoints) 
     self.vtkPolyData.SetVerts(self.vtkCells) 
     self.vtkPolyData.GetPointData().SetScalars(self.vtkDepth) 
     self.vtkPolyData.GetPointData().SetActiveScalars('DepthArray') 

pointCloud = VtkPointCloud() 
for k in xrange(1000): 
    point = 20*(random.rand(3)-0.5) 
    pointCloud.addPoint(point) 
pointCloud.addPoint([0,0,0]) 
pointCloud.addPoint([0,0,0]) 
pointCloud.addPoint([0,0,0]) 
pointCloud.addPoint([0,0,0]) 

# Renderer 
renderer = vtk.vtkRenderer() 
renderer.AddActor(pointCloud.vtkActor) 
renderer.SetBackground(.2, .3, .4) 
renderer.ResetCamera() 

# Render Window 
renderWindow = vtk.vtkRenderWindow() 
renderWindow.AddRenderer(renderer) 

# Interactor 
renderWindowInteractor = vtk.vtkRenderWindowInteractor() 
renderWindowInteractor.SetRenderWindow(renderWindow) 

# Begin Interaction 
renderWindow.Render() 
renderWindowInteractor.Start() 
+2

目前穩定API(6.2.0)的需要:'mapper.SetInputData(self.vtkPolyData)' – gmas80

+0

任何知道如何設置一個由三個值指定的顏色R,G,B? –

+0

@TurboWhale這個例子http://www.vtk.org/Wiki/VTK/Examples/Python/TriangleColoredPoints應該有所幫助。你應該用'3'組件創建'vtkUnsignedCharArray'並使用'InsertNextTuple3'來添加你需要的顏色。此外,你只需像上面例子中的SetScalars一樣,根據你的顏色數組的名稱改變SetActiveScalars(或者根本不需要調用SetActiveScalars)。 – Charlie

相關問題