1#!/usr/bin/env python
2import vtk
3from vtk.util.misc import vtkGetDataRoot
4VTK_DATA_ROOT = vtkGetDataRoot()
5
6# Create renderer stuff
7#
8ren1 = vtk.vtkRenderer()
9renWin = vtk.vtkRenderWindow()
10renWin.AddRenderer(ren1)
11iren = vtk.vtkRenderWindowInteractor()
12iren.SetRenderWindow(renWin)
13# Pipeline stuff
14#
15torus = vtk.vtkSuperquadricSource()
16torus.SetCenter(0.0,0.0,0.0)
17torus.SetScale(1.0,1.0,1.0)
18torus.SetPhiResolution(64)
19torus.SetThetaResolution(64)
20torus.SetPhiRoundness(1.0)
21torus.SetThetaRoundness(1.0)
22torus.SetThickness(0.5)
23torus.SetSize(0.5)
24torus.SetToroidal(1)
25# The quadric has nasty discontinuities from the way the edges are generated
26# so let's pass it though a CleanPolyDataFilter and merge any points which
27# are coincident, or very close
28cleaner = vtk.vtkCleanPolyData()
29cleaner.SetInputConnection(torus.GetOutputPort())
30cleaner.SetTolerance(0.005)
31curve1 = vtk.vtkCurvatures()
32curve1.SetInputConnection(cleaner.GetOutputPort())
33curve1.SetCurvatureTypeToGaussian()
34curve2 = vtk.vtkCurvatures()
35curve2.SetInputConnection(cleaner.GetOutputPort())
36curve2.SetCurvatureTypeToMean()
37lut1 = vtk.vtkLookupTable()
38lut1.SetNumberOfColors(256)
39lut1.SetHueRange(0.15,1.0)
40lut1.SetSaturationRange(1.0,1.0)
41lut1.SetValueRange(1.0,1.0)
42lut1.SetAlphaRange(1.0,1.0)
43lut1.SetRange(-20,20)
44lut2 = vtk.vtkLookupTable()
45lut2.SetNumberOfColors(256)
46lut2.SetHueRange(0.15,1.0)
47lut2.SetSaturationRange(1.0,1.0)
48lut2.SetValueRange(1.0,1.0)
49lut2.SetAlphaRange(1.0,1.0)
50lut2.SetRange(0,4)
51cmapper1 = vtk.vtkPolyDataMapper()
52cmapper1.SetInputConnection(curve1.GetOutputPort())
53cmapper1.SetLookupTable(lut1)
54cmapper1.SetUseLookupTableScalarRange(1)
55cmapper2 = vtk.vtkPolyDataMapper()
56cmapper2.SetInputConnection(curve2.GetOutputPort())
57cmapper2.SetLookupTable(lut2)
58cmapper2.SetUseLookupTableScalarRange(1)
59cActor1 = vtk.vtkActor()
60cActor1.SetMapper(cmapper1)
61cActor1.SetPosition(-0.5,0.0,0.0)
62cActor2 = vtk.vtkActor()
63cActor2.SetMapper(cmapper2)
64cActor2.SetPosition(0.5,0.0,0.0)
65# Add the actors to the renderer
66#
67ren1.AddActor(cActor1)
68ren1.AddActor(cActor2)
69ren1.SetBackground(0.5,0.5,0.5)
70renWin.SetSize(300,200)
71camera = vtk.vtkCamera()
72ren1.SetActiveCamera(camera)
73camera.SetPosition(0.0,2.0,2.1)
74camera.SetFocalPoint(0.0,0.0,0.0)
75camera.SetViewAngle(30)
76ren1.ResetCameraClippingRange()
77iren.Initialize()
78# render the image
79#
80# prevent the tk window from showing up then start the event loop
81renWin.Render()
82# --- end of script --
83