1package require vtk
2package require vtkinteraction
3
4# Create renderer stuff
5#
6vtkRenderer ren1
7vtkRenderWindow renWin
8    renWin AddRenderer ren1
9vtkRenderWindowInteractor iren
10    iren SetRenderWindow renWin
11
12# Pipeline stuff
13#
14vtkSuperquadricSource torus
15    torus SetCenter 0.0 0.0 0.0
16    torus SetScale 1.0 1.0 1.0
17    torus SetPhiResolution 64
18    torus SetThetaResolution 64
19    torus SetPhiRoundness 1.0
20    torus SetThetaRoundness 1.0
21    torus SetThickness 0.5
22    torus SetSize 0.5
23    torus SetToroidal 1
24
25# The quadric is made of strips, so pass it through a triangle filter as
26# the curvature filter only operates on polys
27vtkTriangleFilter tri
28    tri SetInputConnection [torus GetOutputPort]
29
30# The quadric has nasty discontinuities from the way the edges are generated
31# so let's pass it though a CleanPolyDataFilter and merge any points which
32# are coincident, or very close
33
34vtkCleanPolyData cleaner
35    cleaner SetInputConnection [tri GetOutputPort]
36    cleaner SetTolerance 0.005
37
38vtkCurvatures curve1
39    curve1 SetInputConnection [cleaner GetOutputPort]
40    curve1 SetCurvatureTypeToGaussian
41
42vtkCurvatures curve2
43    curve2 SetInputConnection [cleaner GetOutputPort]
44    curve2 SetCurvatureTypeToMean
45
46vtkLookupTable lut1
47    lut1 SetNumberOfColors 256
48    lut1 SetHueRange 0.15 1.0
49    lut1 SetSaturationRange 1.0 1.0
50    lut1 SetValueRange 1.0 1.0
51    lut1 SetAlphaRange 1.0 1.0
52    lut1 SetRange -20 20
53
54vtkLookupTable lut2
55    lut2 SetNumberOfColors 256
56    lut2 SetHueRange 0.15 1.0
57    lut2 SetSaturationRange 1.0 1.0
58    lut2 SetValueRange 1.0 1.0
59    lut2 SetAlphaRange 1.0 1.0
60    lut2 SetRange 0 4
61
62vtkPolyDataMapper cmapper1
63    cmapper1 SetInputConnection [curve1 GetOutputPort]
64    cmapper1 SetLookupTable lut1
65    cmapper1 SetUseLookupTableScalarRange 1
66
67vtkPolyDataMapper cmapper2
68    cmapper2 SetInputConnection [curve2 GetOutputPort]
69    cmapper2 SetLookupTable lut2
70    cmapper2 SetUseLookupTableScalarRange 1
71
72vtkActor cActor1
73    cActor1 SetMapper cmapper1
74    cActor1 SetPosition -0.5 0.0 0.0
75
76vtkActor cActor2
77    cActor2 SetMapper cmapper2
78    cActor2 SetPosition  0.5 0.0 0.0
79
80# Add the actors to the renderer
81#
82ren1 AddActor cActor1
83ren1 AddActor cActor2
84
85ren1 SetBackground 0.5 0.5 0.5
86renWin SetSize 300 200
87
88vtkCamera camera
89ren1 SetActiveCamera camera
90
91camera SetPosition 0.0 2.0 2.1
92camera SetFocalPoint 0.0 0.0 0.0
93camera SetViewAngle 30
94
95ren1 ResetCameraClippingRange
96
97iren Initialize
98
99# render the image
100#
101iren AddObserver UserEvent {wm deiconify .vtkInteract}
102
103
104# prevent the tk window from showing up then start the event loop
105wm withdraw .
106
107
108renWin Render
109