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