File: closedSplines.tcl

package info (click to toggle)
vtk 5.0.4-1.1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 51,084 kB
  • ctags: 70,426
  • sloc: cpp: 524,166; ansic: 220,276; tcl: 43,377; python: 14,037; perl: 3,102; java: 1,436; yacc: 1,033; sh: 339; lex: 248; makefile: 197; asm: 154
file content (240 lines) | stat: -rw-r--r-- 5,643 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
package require vtk
package require vtkinteraction
package require vtktesting

# get the interactor ui

# Now create the RenderWindow, Renderer and Interactor
#
vtkRenderer ren1
vtkRenderWindow renWin
    renWin AddRenderer ren1
vtkRenderWindowInteractor iren
    iren SetRenderWindow renWin

vtkMath math
set numberOfInputPoints 30

vtkKochanekSpline aKSplineX
 aKSplineX ClosedOn
vtkKochanekSpline aKSplineY
 aKSplineY ClosedOn
vtkKochanekSpline aKSplineZ
 aKSplineZ ClosedOn

vtkCardinalSpline aCSplineX
 aCSplineX ClosedOn
vtkCardinalSpline aCSplineY
 aCSplineY ClosedOn
vtkCardinalSpline aCSplineZ
 aCSplineZ ClosedOn

# add some points
vtkPoints inputPoints
set x -1.0; set y -1.0; set z 0.0
aKSplineX AddPoint 0 $x
aKSplineY AddPoint 0 $y
aKSplineZ AddPoint 0 $z
aCSplineX AddPoint 0 $x
aCSplineY AddPoint 0 $y
aCSplineZ AddPoint 0 $z
inputPoints InsertPoint 0 $x $y $z

set x 1.0; set y -1.0; set z 0.0
aKSplineX AddPoint 1 $x
aKSplineY AddPoint 1 $y
aKSplineZ AddPoint 1 $z
aCSplineX AddPoint 1 $x
aCSplineY AddPoint 1 $y
aCSplineZ AddPoint 1 $z
inputPoints InsertPoint 1 $x $y $z

set x 1.0; set y 1.0; set z 0.0
aKSplineX AddPoint 2 $x
aKSplineY AddPoint 2 $y
aKSplineZ AddPoint 2 $z
aCSplineX AddPoint 2 $x
aCSplineY AddPoint 2 $y
aCSplineZ AddPoint 2 $z
inputPoints InsertPoint 2 $x $y $z

set x -1.0; set y 1.0; set z 0.0
aKSplineX AddPoint 3 $x
aKSplineY AddPoint 3 $y
aKSplineZ AddPoint 3 $z
aCSplineX AddPoint 3 $x
aCSplineY AddPoint 3 $y
aCSplineZ AddPoint 3 $z
inputPoints InsertPoint 3 $x $y $z

vtkPolyData inputData
  inputData SetPoints inputPoints

vtkSphereSource balls
  balls SetRadius .04
  balls SetPhiResolution 10
  balls SetThetaResolution 10

vtkGlyph3D glyphPoints
  glyphPoints SetInput inputData
  glyphPoints SetSource [balls GetOutput]

vtkPolyDataMapper glyphMapper
  glyphMapper SetInputConnection [glyphPoints GetOutputPort]

vtkActor glyph
  glyph SetMapper glyphMapper
eval   [glyph GetProperty] SetDiffuseColor $tomato
  [glyph GetProperty] SetSpecular .3
  [glyph GetProperty] SetSpecularPower 30

ren1 AddActor glyph


vtkPoints Kpoints
vtkPoints Cpoints

vtkPolyData profileKData
vtkPolyData profileCData
set numberOfInputPoints  5
set numberOfOutputPoints 100
set offset 1.0
proc fit {} {
  global numberOfInputPoints numberOfOutputPoints offset
  Kpoints Reset
  Cpoints Reset
  for {set i 0} {$i< $numberOfOutputPoints} {incr i 1} {
      set t [expr ( $numberOfInputPoints - $offset ) / ($numberOfOutputPoints - 1) * $i]
      Kpoints InsertPoint $i [aKSplineX Evaluate $t] [aKSplineY Evaluate $t] [aKSplineZ Evaluate $t]
      Cpoints InsertPoint $i [aCSplineX Evaluate $t] [aCSplineY Evaluate $t] [aCSplineZ Evaluate $t]
  }
  profileKData Modified
  profileCData Modified
}
fit

vtkCellArray lines
  lines InsertNextCell $numberOfOutputPoints

for {set i 0} {$i< $numberOfOutputPoints} {incr i 1} {
  lines InsertCellPoint $i
}

profileKData SetPoints Kpoints
profileKData SetLines lines
profileCData SetPoints Cpoints
profileCData SetLines lines


vtkTubeFilter profileKTubes
  profileKTubes SetNumberOfSides 8
  profileKTubes SetInput profileKData
  profileKTubes SetRadius .01

vtkPolyDataMapper profileKMapper
profileKMapper SetInputConnection [profileKTubes GetOutputPort]

vtkActor profileK
  profileK SetMapper profileKMapper
eval  [profileK GetProperty] SetDiffuseColor $banana
  [profileK GetProperty] SetSpecular .3
  [profileK GetProperty] SetSpecularPower 30

ren1 AddActor profileK

vtkTubeFilter profileCTubes
  profileCTubes SetNumberOfSides 8
  profileCTubes SetInput profileCData
  profileCTubes SetRadius .01

vtkPolyDataMapper profileCMapper
profileCMapper SetInputConnection [profileCTubes GetOutputPort]

vtkActor profileC
  profileC SetMapper profileCMapper
eval  [profileC GetProperty] SetDiffuseColor $peacock
  [profileC GetProperty] SetSpecular .3
  [profileC GetProperty] SetSpecularPower 30

ren1 AddActor profileC
ren1 ResetCamera
[ren1 GetActiveCamera] Dolly 1.5
ren1 ResetCameraClippingRange

renWin SetSize 300 300

# render the image
#
iren Initialize
iren AddObserver UserEvent {wm deiconify .vtkInteract}

# prevent the tk window from showing up then start the event loop
wm withdraw .

proc defaults {} {
  aSplineX SetDefaultBias 0
  aSplineX SetDefaultTension 0
  aSplineX SetDefaultContinuity 0
  aSplineY SetDefaultBias 0
  aSplineY SetDefaultTension 0
  aSplineY SetDefaultContinuity 0
  aSplineZ SetDefaultBias 0
  aSplineZ SetDefaultTension 0
  aSplineZ SetDefaultContinuity 0
  fit
  renWin Render
}
proc varyBias {} {
    defaults
    for {set bias -1} { $bias <= 1 } {set bias [expr $bias + .05]} {
      aSplineX SetDefaultBias $bias
      aSplineY SetDefaultBias $bias
      aSplineZ SetDefaultBias $bias
      fit
      renWin Render
    }
}
proc varyTension {} {
    defaults
    for {set tension -1} { $tension <= 1 } {set tension [expr $tension + .05]} {
      aSplineX SetDefaultTension $tension
      aSplineY SetDefaultTension $tension
      aSplineZ SetDefaultTension $tension
      fit
      renWin Render
    }
}
proc varyContinuity {} {
    defaults
    for {set Continuity -1} { $Continuity <= 1 } {set Continuity [expr $Continuity + .05]} {
      aSplineX SetDefaultContinuity $Continuity
      aSplineY SetDefaultContinuity $Continuity
      aSplineZ SetDefaultContinuity $Continuity
      fit
      renWin Render
    }
}

proc closed {} {
    global offset

    set offset 0.0
    aSplineX ClosedOn
    aSplineY ClosedOn
    aSplineZ ClosedOn
    fit
    renWin Render
}

proc opened {} {
    global offset

    set offset 1.0
    aSplineX ClosedOff
    aSplineY ClosedOff
    aSplineZ ClosedOff
    fit
    renWin Render
}