1#!/usr/bin/env python 2import vtk 3from vtk.util.misc import vtkGetDataRoot 4VTK_DATA_ROOT = vtkGetDataRoot() 5 6# On older Macs, 10 is too low. Due to what looks like a driver bug 7# spectral lighting behaves sort of weird and produces small differences 8threshold = 30 9points = vtk.vtkPoints() 10points.InsertNextPoint(2,4,0) 11points.InsertNextPoint(2.6,2.6,0) 12points.InsertNextPoint(4,2,0) 13points.InsertNextPoint(1.4,4,1.4) 14points.InsertNextPoint(2,3,1) 15points.InsertNextPoint(3,2,1) 16points.InsertNextPoint(4,1.4,1.4) 17points.InsertNextPoint(0,4,2) 18points.InsertNextPoint(1,3,2) 19points.InsertNextPoint(2,2,2) 20points.InsertNextPoint(3,1,2) 21points.InsertNextPoint(4,0,2) 22points.InsertNextPoint(0,2.6,2.6) 23points.InsertNextPoint(1,2,3) 24points.InsertNextPoint(2,1,3) 25points.InsertNextPoint(2.6,0,2.6) 26points.InsertNextPoint(0,2,4) 27points.InsertNextPoint(1.4,1.4,4) 28points.InsertNextPoint(2,0,4) 29faces = vtk.vtkCellArray() 30faces.InsertNextCell(3) 31faces.InsertCellPoint(0) 32faces.InsertCellPoint(3) 33faces.InsertCellPoint(4) 34faces.InsertNextCell(3) 35faces.InsertCellPoint(0) 36faces.InsertCellPoint(4) 37faces.InsertCellPoint(1) 38faces.InsertNextCell(3) 39faces.InsertCellPoint(1) 40faces.InsertCellPoint(4) 41faces.InsertCellPoint(5) 42faces.InsertNextCell(3) 43faces.InsertCellPoint(1) 44faces.InsertCellPoint(5) 45faces.InsertCellPoint(2) 46faces.InsertNextCell(3) 47faces.InsertCellPoint(2) 48faces.InsertCellPoint(5) 49faces.InsertCellPoint(6) 50faces.InsertNextCell(3) 51faces.InsertCellPoint(3) 52faces.InsertCellPoint(7) 53faces.InsertCellPoint(8) 54faces.InsertNextCell(3) 55faces.InsertCellPoint(3) 56faces.InsertCellPoint(8) 57faces.InsertCellPoint(4) 58faces.InsertNextCell(3) 59faces.InsertCellPoint(4) 60faces.InsertCellPoint(8) 61faces.InsertCellPoint(9) 62faces.InsertNextCell(3) 63faces.InsertCellPoint(4) 64faces.InsertCellPoint(9) 65faces.InsertCellPoint(5) 66faces.InsertNextCell(3) 67faces.InsertCellPoint(5) 68faces.InsertCellPoint(9) 69faces.InsertCellPoint(10) 70faces.InsertNextCell(3) 71faces.InsertCellPoint(5) 72faces.InsertCellPoint(10) 73faces.InsertCellPoint(6) 74faces.InsertNextCell(3) 75faces.InsertCellPoint(6) 76faces.InsertCellPoint(10) 77faces.InsertCellPoint(11) 78faces.InsertNextCell(3) 79faces.InsertCellPoint(7) 80faces.InsertCellPoint(12) 81faces.InsertCellPoint(8) 82faces.InsertNextCell(3) 83faces.InsertCellPoint(8) 84faces.InsertCellPoint(12) 85faces.InsertCellPoint(13) 86faces.InsertNextCell(3) 87faces.InsertCellPoint(8) 88faces.InsertCellPoint(13) 89faces.InsertCellPoint(9) 90faces.InsertNextCell(3) 91faces.InsertCellPoint(9) 92faces.InsertCellPoint(13) 93faces.InsertCellPoint(14) 94faces.InsertNextCell(3) 95faces.InsertCellPoint(9) 96faces.InsertCellPoint(14) 97faces.InsertCellPoint(10) 98faces.InsertNextCell(3) 99faces.InsertCellPoint(10) 100faces.InsertCellPoint(14) 101faces.InsertCellPoint(15) 102faces.InsertNextCell(3) 103faces.InsertCellPoint(10) 104faces.InsertCellPoint(15) 105faces.InsertCellPoint(11) 106faces.InsertNextCell(3) 107faces.InsertCellPoint(12) 108faces.InsertCellPoint(16) 109faces.InsertCellPoint(13) 110faces.InsertNextCell(3) 111faces.InsertCellPoint(13) 112faces.InsertCellPoint(16) 113faces.InsertCellPoint(17) 114faces.InsertNextCell(3) 115faces.InsertCellPoint(13) 116faces.InsertCellPoint(17) 117faces.InsertCellPoint(14) 118faces.InsertNextCell(3) 119faces.InsertCellPoint(14) 120faces.InsertCellPoint(17) 121faces.InsertCellPoint(18) 122faces.InsertNextCell(3) 123faces.InsertCellPoint(14) 124faces.InsertCellPoint(18) 125faces.InsertCellPoint(15) 126model = vtk.vtkPolyData() 127model.SetPolys(faces) 128model.SetPoints(points) 129rn = vtk.vtkMath() 130cellColors = vtk.vtkUnsignedCharArray() 131cellColors.SetNumberOfComponents(3) 132cellColors.SetNumberOfTuples(model.GetNumberOfCells()) 133i = 0 134while i < model.GetNumberOfCells(): 135 cellColors.InsertComponent(i,0,rn.Random(100,255)) 136 cellColors.InsertComponent(i,1,rn.Random(100,255)) 137 cellColors.InsertComponent(i,2,rn.Random(100,255)) 138 i = i + 1 139 140model.GetCellData().SetScalars(cellColors) 141t0 = vtk.vtkTransform() 142t0.Identity() 143tf0 = vtk.vtkTransformPolyDataFilter() 144tf0.SetTransform(t0) 145tf0.SetInputData(model) 146t1 = vtk.vtkTransform() 147t1.Identity() 148t1.RotateZ(90) 149tf1 = vtk.vtkTransformPolyDataFilter() 150tf1.SetTransform(t1) 151tf1.SetInputData(model) 152t2 = vtk.vtkTransform() 153t2.Identity() 154t2.RotateZ(180) 155tf2 = vtk.vtkTransformPolyDataFilter() 156tf2.SetTransform(t2) 157tf2.SetInputData(model) 158t3 = vtk.vtkTransform() 159t3.Identity() 160t3.RotateZ(270) 161tf3 = vtk.vtkTransformPolyDataFilter() 162tf3.SetTransform(t3) 163tf3.SetInputData(model) 164af = vtk.vtkAppendPolyData() 165af.AddInputConnection(tf0.GetOutputPort()) 166af.AddInputConnection(tf1.GetOutputPort()) 167af.AddInputConnection(tf2.GetOutputPort()) 168af.AddInputConnection(tf3.GetOutputPort()) 169t4 = vtk.vtkTransform() 170t4.Identity() 171t4.RotateX(180) 172tf4 = vtk.vtkTransformPolyDataFilter() 173tf4.SetTransform(t4) 174tf4.SetInputConnection(af.GetOutputPort()) 175af2 = vtk.vtkAppendPolyData() 176af2.AddInputConnection(af.GetOutputPort()) 177af2.AddInputConnection(tf4.GetOutputPort()) 178t5 = vtk.vtkTransform() 179t5.Identity() 180t5.Translate(0,0,-8) 181tf5 = vtk.vtkTransformPolyDataFilter() 182tf5.SetTransform(t5) 183tf5.SetInputConnection(af2.GetOutputPort()) 184af3 = vtk.vtkAppendPolyData() 185af3.AddInputConnection(af2.GetOutputPort()) 186af3.AddInputConnection(tf5.GetOutputPort()) 187t6 = vtk.vtkTransform() 188t6.Identity() 189t6.Translate(0,-8,0) 190tf6 = vtk.vtkTransformPolyDataFilter() 191tf6.SetTransform(t6) 192tf6.SetInputConnection(af3.GetOutputPort()) 193af4 = vtk.vtkAppendPolyData() 194af4.AddInputConnection(af3.GetOutputPort()) 195af4.AddInputConnection(tf6.GetOutputPort()) 196# Create the RenderWindow, Renderer and both Actors 197# 198ren1 = vtk.vtkRenderer() 199renWin = vtk.vtkRenderWindow() 200renWin.AddRenderer(ren1) 201iren = vtk.vtkRenderWindowInteractor() 202iren.SetRenderWindow(renWin) 203clean = vtk.vtkCleanPolyData() 204clean.SetTolerance(.001) 205clean.SetInputData(model) 206clean.SetInputConnection(af2.GetOutputPort()) 207clean.SetInputConnection(af3.GetOutputPort()) 208clean.SetInputConnection(af4.GetOutputPort()) 209subdivide = vtk.vtkButterflySubdivisionFilter() 210subdivide.SetInputConnection(clean.GetOutputPort()) 211subdivide.SetNumberOfSubdivisions(3) 212mapper = vtk.vtkDataSetMapper() 213mapper.SetInputConnection(subdivide.GetOutputPort()) 214surface = vtk.vtkActor() 215surface.SetMapper(mapper) 216fe = vtk.vtkFeatureEdges() 217fe.SetInputConnection(subdivide.GetOutputPort()) 218fe.SetFeatureAngle(100) 219feStripper = vtk.vtkStripper() 220feStripper.SetInputConnection(fe.GetOutputPort()) 221feTubes = vtk.vtkTubeFilter() 222feTubes.SetInputConnection(feStripper.GetOutputPort()) 223feTubes.SetRadius(.1) 224feMapper = vtk.vtkPolyDataMapper() 225feMapper.SetInputConnection(feTubes.GetOutputPort()) 226edges = vtk.vtkActor() 227edges.SetMapper(feMapper) 228# Add the actors to the renderer, set the background and size 229# 230ren1.AddActor(surface) 231ren1.AddActor(edges) 232backP = vtk.vtkProperty() 233backP.SetDiffuseColor(1,1,.3) 234surface.SetBackfaceProperty(backP) 235edges.GetProperty().SetDiffuseColor(.2,.2,.2) 236surface.GetProperty().SetDiffuseColor(1,.4,.3) 237surface.GetProperty().SetSpecular(.4) 238surface.GetProperty().SetDiffuse(.8) 239surface.GetProperty().SetSpecularPower(40) 240ren1.SetBackground(0.1,0.2,0.4) 241renWin.SetSize(300,300) 242# render the image 243# 244ren1.ResetCamera() 245cam1 = ren1.GetActiveCamera() 246cam1.Azimuth(90) 247ren1.ResetCamera() 248cam1.Zoom(1.5) 249iren.Initialize() 250# prevent the tk window from showing up then start the event loop 251# --- end of script -- 252