2011-09-29 35 views

Trả lời

17

Đây là ví dụ đặt màu điểm dựa trên giá trị trục 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 ổn định hiện tại (6.2.0) cần: 'mapper.SetInputData (self.vtkPolyData)' – gmas80

+0

bất kỳ ý tưởng làm thế nào để thiết lập một màu được xác định bởi ba giá trị r, g, b? –

+0

@TurboWhale ví dụ này http://www.vtk.org/Wiki/VTK/Examples/Python/TriangleColoredPoints sẽ hữu ích. Bạn nên tạo 'vtkUnsignedCharArray' với các thành phần' 3' và sử dụng 'InsertNextTuple3' để thêm màu sắc mà bạn cần. Hơn nữa bạn chỉ cần 'SetScalars' như trong ví dụ ở trên và thay đổi' SetActiveScalars' theo tên mảng màu của bạn (hoặc loại bỏ 'SetActiveScalars' ở tất cả). – Charlie

Các vấn đề liên quan