vtk-ruby 5.0.4.0-x86-mswin32-60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. data/lib/VTK/common.rb +7 -0
  2. data/lib/VTK/common.rb.rule +1 -0
  3. data/lib/VTK/filtering.rb +7 -0
  4. data/lib/VTK/filtering.rb.rule +1 -0
  5. data/lib/VTK/genericfiltering.rb +7 -0
  6. data/lib/VTK/genericfiltering.rb.rule +1 -0
  7. data/lib/VTK/graphics.rb +7 -0
  8. data/lib/VTK/graphics.rb.rule +1 -0
  9. data/lib/VTK/gtk.rb +5 -0
  10. data/lib/VTK/gtk.rb.rule +1 -0
  11. data/lib/VTK/gtk/GtkGLExtVTKRenderWindow.rb +635 -0
  12. data/lib/VTK/gtk/GtkGLExtVTKRenderWindow.rb.rule +1 -0
  13. data/lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb +355 -0
  14. data/lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb.rule +1 -0
  15. data/lib/VTK/gtk/GtkVTKRenderWindow.rb +615 -0
  16. data/lib/VTK/gtk/GtkVTKRenderWindow.rb.rule +1 -0
  17. data/lib/VTK/gtk/GtkVTKRenderWindowInteractor.rb +336 -0
  18. data/lib/VTK/gtk/GtkVTKRenderWindowInteractor.rb.rule +1 -0
  19. data/lib/VTK/hybrid.rb +7 -0
  20. data/lib/VTK/hybrid.rb.rule +1 -0
  21. data/lib/VTK/imaging.rb +7 -0
  22. data/lib/VTK/imaging.rb.rule +1 -0
  23. data/lib/VTK/io.rb +7 -0
  24. data/lib/VTK/io.rb.rule +1 -0
  25. data/lib/VTK/parallel.rb +7 -0
  26. data/lib/VTK/parallel.rb.rule +1 -0
  27. data/lib/VTK/rendering.rb +7 -0
  28. data/lib/VTK/rendering.rb.rule +1 -0
  29. data/lib/VTK/tk.rb +4 -0
  30. data/lib/VTK/tk.rb.rule +1 -0
  31. data/lib/VTK/tk/vtkLoadRubyTkWidgets.rb +54 -0
  32. data/lib/VTK/tk/vtkLoadRubyTkWidgets.rb.rule +1 -0
  33. data/lib/VTK/tk/vtkTkImageViewerWidget.rb +377 -0
  34. data/lib/VTK/tk/vtkTkImageViewerWidget.rb.rule +1 -0
  35. data/lib/VTK/tk/vtkTkPhotoImage.rb +28 -0
  36. data/lib/VTK/tk/vtkTkPhotoImage.rb.rule +1 -0
  37. data/lib/VTK/tk/vtkTkRenderWidget.rb +486 -0
  38. data/lib/VTK/tk/vtkTkRenderWidget.rb.rule +1 -0
  39. data/lib/VTK/tk/vtkTkRenderWindowInteractor.rb +394 -0
  40. data/lib/VTK/tk/vtkTkRenderWindowInteractor.rb.rule +1 -0
  41. data/lib/VTK/util.rb +6 -0
  42. data/lib/VTK/util.rb.rule +1 -0
  43. data/lib/VTK/util/colors.rb +223 -0
  44. data/lib/VTK/util/colors.rb.rule +1 -0
  45. data/lib/VTK/util/misc.rb +68 -0
  46. data/lib/VTK/util/misc.rb.rule +1 -0
  47. data/lib/VTK/util/vtkConstants.rb +123 -0
  48. data/lib/VTK/util/vtkConstants.rb.rule +1 -0
  49. data/lib/VTK/util/vtkImageExportToArray.rb +96 -0
  50. data/lib/VTK/util/vtkImageExportToArray.rb.rule +1 -0
  51. data/lib/VTK/util/vtkImageImportFromArray.rb +116 -0
  52. data/lib/VTK/util/vtkImageImportFromArray.rb.rule +1 -0
  53. data/lib/VTK/volumerendering.rb +7 -0
  54. data/lib/VTK/volumerendering.rb.rule +1 -0
  55. data/lib/VTK/vtkCommon.dll +0 -0
  56. data/lib/VTK/vtkCommon.exp +0 -0
  57. data/lib/VTK/vtkCommon.lib +0 -0
  58. data/lib/VTK/vtkCommonRuby.dll +0 -0
  59. data/lib/VTK/vtkCommonRuby.exp +0 -0
  60. data/lib/VTK/vtkCommonRuby.lib +0 -0
  61. data/lib/VTK/vtkCommonRubyD.dll +0 -0
  62. data/lib/VTK/vtkCommonRubyD.exp +0 -0
  63. data/lib/VTK/vtkCommonRubyD.lib +0 -0
  64. data/lib/VTK/vtkDICOMParser.dll +0 -0
  65. data/lib/VTK/vtkDICOMParser.exp +0 -0
  66. data/lib/VTK/vtkDICOMParser.lib +0 -0
  67. data/lib/VTK/vtkFiltering.dll +0 -0
  68. data/lib/VTK/vtkFiltering.exp +0 -0
  69. data/lib/VTK/vtkFiltering.lib +0 -0
  70. data/lib/VTK/vtkFilteringRuby.dll +0 -0
  71. data/lib/VTK/vtkFilteringRuby.exp +0 -0
  72. data/lib/VTK/vtkFilteringRuby.lib +0 -0
  73. data/lib/VTK/vtkFilteringRubyD.dll +0 -0
  74. data/lib/VTK/vtkFilteringRubyD.exp +0 -0
  75. data/lib/VTK/vtkFilteringRubyD.lib +0 -0
  76. data/lib/VTK/vtkGenericFiltering.dll +0 -0
  77. data/lib/VTK/vtkGenericFiltering.exp +0 -0
  78. data/lib/VTK/vtkGenericFiltering.lib +0 -0
  79. data/lib/VTK/vtkGenericFilteringRuby.dll +0 -0
  80. data/lib/VTK/vtkGenericFilteringRuby.exp +0 -0
  81. data/lib/VTK/vtkGenericFilteringRuby.lib +0 -0
  82. data/lib/VTK/vtkGenericFilteringRubyD.dll +0 -0
  83. data/lib/VTK/vtkGenericFilteringRubyD.exp +0 -0
  84. data/lib/VTK/vtkGenericFilteringRubyD.lib +0 -0
  85. data/lib/VTK/vtkGraphics.dll +0 -0
  86. data/lib/VTK/vtkGraphics.exp +0 -0
  87. data/lib/VTK/vtkGraphics.lib +0 -0
  88. data/lib/VTK/vtkGraphicsRuby.dll +0 -0
  89. data/lib/VTK/vtkGraphicsRuby.exp +0 -0
  90. data/lib/VTK/vtkGraphicsRuby.lib +0 -0
  91. data/lib/VTK/vtkGraphicsRubyD.dll +0 -0
  92. data/lib/VTK/vtkGraphicsRubyD.exp +0 -0
  93. data/lib/VTK/vtkGraphicsRubyD.lib +0 -0
  94. data/lib/VTK/vtkHybrid.dll +0 -0
  95. data/lib/VTK/vtkHybrid.exp +0 -0
  96. data/lib/VTK/vtkHybrid.lib +0 -0
  97. data/lib/VTK/vtkHybridRuby.dll +0 -0
  98. data/lib/VTK/vtkHybridRuby.exp +0 -0
  99. data/lib/VTK/vtkHybridRuby.lib +0 -0
  100. data/lib/VTK/vtkHybridRubyD.dll +0 -0
  101. data/lib/VTK/vtkHybridRubyD.exp +0 -0
  102. data/lib/VTK/vtkHybridRubyD.lib +0 -0
  103. data/lib/VTK/vtkIO.dll +0 -0
  104. data/lib/VTK/vtkIO.exp +0 -0
  105. data/lib/VTK/vtkIO.lib +0 -0
  106. data/lib/VTK/vtkIORuby.dll +0 -0
  107. data/lib/VTK/vtkIORuby.exp +0 -0
  108. data/lib/VTK/vtkIORuby.lib +0 -0
  109. data/lib/VTK/vtkIORubyD.dll +0 -0
  110. data/lib/VTK/vtkIORubyD.exp +0 -0
  111. data/lib/VTK/vtkIORubyD.lib +0 -0
  112. data/lib/VTK/vtkImaging.dll +0 -0
  113. data/lib/VTK/vtkImaging.exp +0 -0
  114. data/lib/VTK/vtkImaging.lib +0 -0
  115. data/lib/VTK/vtkImagingRuby.dll +0 -0
  116. data/lib/VTK/vtkImagingRuby.exp +0 -0
  117. data/lib/VTK/vtkImagingRuby.lib +0 -0
  118. data/lib/VTK/vtkImagingRubyD.dll +0 -0
  119. data/lib/VTK/vtkImagingRubyD.exp +0 -0
  120. data/lib/VTK/vtkImagingRubyD.lib +0 -0
  121. data/lib/VTK/vtkNetCDF.dll +0 -0
  122. data/lib/VTK/vtkNetCDF.exp +0 -0
  123. data/lib/VTK/vtkNetCDF.lib +0 -0
  124. data/lib/VTK/vtkParallel.dll +0 -0
  125. data/lib/VTK/vtkParallel.exp +0 -0
  126. data/lib/VTK/vtkParallel.lib +0 -0
  127. data/lib/VTK/vtkParallelRuby.dll +0 -0
  128. data/lib/VTK/vtkParallelRuby.exp +0 -0
  129. data/lib/VTK/vtkParallelRuby.lib +0 -0
  130. data/lib/VTK/vtkParallelRubyD.dll +0 -0
  131. data/lib/VTK/vtkParallelRubyD.exp +0 -0
  132. data/lib/VTK/vtkParallelRubyD.lib +0 -0
  133. data/lib/VTK/vtkParseOGLExt.exe +0 -0
  134. data/lib/VTK/vtkRendering.dll +0 -0
  135. data/lib/VTK/vtkRendering.exp +0 -0
  136. data/lib/VTK/vtkRendering.lib +0 -0
  137. data/lib/VTK/vtkRenderingRuby.dll +0 -0
  138. data/lib/VTK/vtkRenderingRuby.exp +0 -0
  139. data/lib/VTK/vtkRenderingRuby.lib +0 -0
  140. data/lib/VTK/vtkRenderingRubyD.dll +0 -0
  141. data/lib/VTK/vtkRenderingRubyD.exp +0 -0
  142. data/lib/VTK/vtkRenderingRubyD.lib +0 -0
  143. data/lib/VTK/vtkVREncodeString.exe +0 -0
  144. data/lib/VTK/vtkVolumeRendering.dll +0 -0
  145. data/lib/VTK/vtkVolumeRendering.exp +0 -0
  146. data/lib/VTK/vtkVolumeRendering.lib +0 -0
  147. data/lib/VTK/vtkVolumeRenderingRuby.dll +0 -0
  148. data/lib/VTK/vtkVolumeRenderingRuby.exp +0 -0
  149. data/lib/VTK/vtkVolumeRenderingRuby.lib +0 -0
  150. data/lib/VTK/vtkVolumeRenderingRubyD.dll +0 -0
  151. data/lib/VTK/vtkVolumeRenderingRubyD.exp +0 -0
  152. data/lib/VTK/vtkVolumeRenderingRubyD.lib +0 -0
  153. data/lib/VTK/vtkWidgets.dll +0 -0
  154. data/lib/VTK/vtkWidgets.exp +0 -0
  155. data/lib/VTK/vtkWidgets.lib +0 -0
  156. data/lib/VTK/vtkWidgetsRuby.dll +0 -0
  157. data/lib/VTK/vtkWidgetsRuby.exp +0 -0
  158. data/lib/VTK/vtkWidgetsRuby.lib +0 -0
  159. data/lib/VTK/vtkWidgetsRubyD.dll +0 -0
  160. data/lib/VTK/vtkWidgetsRubyD.exp +0 -0
  161. data/lib/VTK/vtkWidgetsRubyD.lib +0 -0
  162. data/lib/VTK/vtkWrapRuby.exe +0 -0
  163. data/lib/VTK/vtkWrapRubyInit.exe +0 -0
  164. data/lib/VTK/vtk_dummy.rb +3 -0
  165. data/lib/VTK/vtkexoIIc.dll +0 -0
  166. data/lib/VTK/vtkexoIIc.exp +0 -0
  167. data/lib/VTK/vtkexoIIc.lib +0 -0
  168. data/lib/VTK/vtkexpat.dll +0 -0
  169. data/lib/VTK/vtkexpat.exp +0 -0
  170. data/lib/VTK/vtkexpat.lib +0 -0
  171. data/lib/VTK/vtkfreetype.dll +0 -0
  172. data/lib/VTK/vtkfreetype.exp +0 -0
  173. data/lib/VTK/vtkfreetype.lib +0 -0
  174. data/lib/VTK/vtkftgl.dll +0 -0
  175. data/lib/VTK/vtkftgl.exp +0 -0
  176. data/lib/VTK/vtkftgl.lib +0 -0
  177. data/lib/VTK/vtkjpeg.dll +0 -0
  178. data/lib/VTK/vtkjpeg.exp +0 -0
  179. data/lib/VTK/vtkjpeg.lib +0 -0
  180. data/lib/VTK/vtkpng.dll +0 -0
  181. data/lib/VTK/vtkpng.exp +0 -0
  182. data/lib/VTK/vtkpng.lib +0 -0
  183. data/lib/VTK/vtkruby.exe +0 -0
  184. data/lib/VTK/vtksys.dll +0 -0
  185. data/lib/VTK/vtksys.exp +0 -0
  186. data/lib/VTK/vtksys.lib +0 -0
  187. data/lib/VTK/vtksysEncodeExecutable.exe +0 -0
  188. data/lib/VTK/vtksysProcessFwd9x.exe +0 -0
  189. data/lib/VTK/vtktiff.dll +0 -0
  190. data/lib/VTK/vtktiff.exp +0 -0
  191. data/lib/VTK/vtktiff.lib +0 -0
  192. data/lib/VTK/vtkzlib.dll +0 -0
  193. data/lib/VTK/vtkzlib.exp +0 -0
  194. data/lib/VTK/vtkzlib.lib +0 -0
  195. data/lib/VTK/widgets.rb +7 -0
  196. data/lib/VTK/widgets.rb.rule +1 -0
  197. data/lib/setup.rb +104 -0
  198. data/lib/vtk.rb +35 -0
  199. data/lib/vtk_dummy.rb +3 -0
  200. metadata +256 -0
@@ -0,0 +1 @@
1
+ # generated from CMake
@@ -0,0 +1,377 @@
1
+ =begin
2
+ A vtkTkImageViewerWidget for ruby, which is based on the
3
+ vtkTkImageWindowWidget.
4
+
5
+ Specify double=1 to get a double-buffered window.
6
+
7
+ =end
8
+
9
+ require 'tk'
10
+ require 'vtk'
11
+ require 'vtk/tk/vtkLoadRubyTkWidgets'
12
+
13
+
14
+ class VtkTkImageViewerWidget < TkWindow
15
+ =begin
16
+ A vtkTkImageViewerWidget for Ruby.
17
+
18
+ Use GetImageViewer() to get the vtkImageViewer.
19
+
20
+ Create with the keyword double=1 in order to generate a
21
+ double-buffered viewer.
22
+
23
+ Create with the keyword focus_on_enter=1 to enable
24
+ focus-follows-mouse. The default is for a click-to-focus mode.
25
+ =end
26
+ TkCommandNames = ['vtkTkImageViewerWidget'.freeze].freeze
27
+
28
+ def initialize(master, kw={})
29
+ =begin
30
+ Constructor.
31
+
32
+ Keyword arguments:
33
+
34
+ iv -- Use passed image viewer instead of creating a new one.
35
+
36
+ double -- If True, generate a double-buffered viewer.
37
+ Defaults to False.
38
+
39
+ focus_on_enter -- If True, use a focus-follows-mouse mode.
40
+ Defaults to False where the widget will use a click-to-focus
41
+ mode.
42
+ =end
43
+ # load the necessary extensions into tk
44
+ vtkLoadRubyTkWidgets()
45
+
46
+ _symbolkey2str(kw)
47
+
48
+ if kw['iv']
49
+ @ImageViewer = kw['iv']
50
+ else
51
+ @ImageViewer = Vtk::ImageViewer.new
52
+ end
53
+
54
+ doubleBuffer = 0
55
+ if kw['double']
56
+ doubleBuffer = 1
57
+ kw.delete('double')
58
+ end
59
+
60
+ # check if focus should follow mouse
61
+ if kw['focus_on_enter']
62
+ @FocusOnEnter = 1
63
+ else
64
+ @FocusOnEnter = 0
65
+ end
66
+
67
+ kw['iv'] = @ImageViewer.GetAddressAsString("vtkImageViewer")
68
+ kw['widgetname'] = 'vtkTkImageViewerWidget'
69
+ super(master, kw)
70
+
71
+ if doubleBuffer
72
+ @ImageViewer.GetRenderWindow.DoubleBufferOn
73
+ end
74
+
75
+ self.BindTkImageViewer
76
+ end
77
+
78
+ def GetImageViewer
79
+ return @ImageViewer
80
+ end
81
+
82
+ def Render
83
+ @ImageViewer.Render
84
+ end
85
+
86
+ def BindTkImageViewer
87
+ imager = @ImageViewer.GetRenderer
88
+
89
+ # stuff for window level text.
90
+ mapper = Vtk::TextMapper.new
91
+ mapper.SetInput("none")
92
+ t_prop = mapper.GetTextProperty
93
+ t_prop.SetFontFamilyToTimes
94
+ t_prop.SetFontSize(18)
95
+ t_prop.BoldOn
96
+ t_prop.ShadowOn
97
+
98
+ @LevelMapper = mapper
99
+
100
+ actor = Vtk::Actor2D.new
101
+ actor.SetMapper(mapper)
102
+ actor.SetLayerNumber(1)
103
+ actor.GetPositionCoordinate.SetValue(4,22)
104
+ actor.GetProperty.SetColor(1,1,0.5)
105
+ actor.SetVisibility(0)
106
+ imager.AddActor2D(actor)
107
+
108
+ @LevelActor = actor
109
+
110
+ mapper = Vtk::TextMapper.new
111
+ mapper.SetInput("none")
112
+ t_prop = mapper.GetTextProperty
113
+ t_prop.SetFontFamilyToTimes
114
+ t_prop.SetFontSize(18)
115
+ t_prop.BoldOn
116
+ t_prop.ShadowOn
117
+
118
+ @WindowMapper = mapper
119
+
120
+ actor = Vtk::Actor2D.new
121
+ actor.SetMapper(mapper)
122
+ actor.SetLayerNumber(1)
123
+ actor.GetPositionCoordinate.SetValue(4,4)
124
+ actor.GetProperty.SetColor(1,1,0.5)
125
+ actor.SetVisibility(0)
126
+ imager.AddActor2D(actor)
127
+
128
+ @WindowActor = actor
129
+
130
+ @LastX = 0
131
+ @LastY = 0
132
+ @OldFocus = 0
133
+ @InExpose = 0
134
+
135
+ # bindings
136
+ # window level
137
+ self.bind("ButtonPress-1"){|e,s| s||s=self; s.StartWindowLevelInteraction(e.x,e.y) }
138
+ self.bind("B1-Motion"){|e,s| s||s=self; s.UpdateWindowLevelInteraction(e.x,e.y) }
139
+ self.bind("ButtonRelease-1"){|e,s| s||s=self; s.EndWindowLevelInteraction }
140
+
141
+ # Get the value
142
+ self.bind("ButtonPress-3"){|e,s| s||s=self; s.StartQueryInteraction(e.x,e.y) }
143
+ self.bind("B3-Motion"){|e,s| s||s=self; s.UpdateQueryInteraction(e.x,e.y) }
144
+ self.bind("ButtonRelease-3"){|e,s| s||s=self; s.EndQueryInteraction }
145
+
146
+ self.bind("Expose"){|e,s| s||s=self; s.ExposeTkImageViewer }
147
+ self.bind("Enter"){|e,s| s||s=self; s.EnterTkViewer }
148
+ self.bind("Leave"){|e,s| s||s=self; s.LeaveTkViewer }
149
+ self.bind("KeyPress-e"){|e,s| s||s=self; exit }
150
+ self.bind("KeyPress-r"){|e,s| s||s=self; s.ResetTkImageViewer }
151
+ end
152
+
153
+ def GetImageViewer
154
+ return @ImageViewer
155
+ end
156
+
157
+ def Render
158
+ return @ImageViewer.Render
159
+ end
160
+
161
+ def _GrabFocus
162
+ @OldFocus = self.focus
163
+ self.focus
164
+ end
165
+
166
+ def EnterTkViewer
167
+ if @FocusOnEnter
168
+ self._GrabFocus
169
+ end
170
+ return nil
171
+ end
172
+
173
+ def LeaveTkViewer
174
+ if @FocusOnEnter && @OldFocus != nil
175
+ @OldFocus.focus
176
+ end
177
+ return nil
178
+ end
179
+
180
+ def ExposeTkImageViewer
181
+ if @InExpose == 0
182
+ @InExpose = 1
183
+ self.update()
184
+ @ImageViewer.Render()
185
+ @InExpose = 0
186
+ end
187
+ return nil
188
+ end
189
+
190
+ def StartWindowLevelInteraction(x,y)
191
+ if ! @FocusOnEnter
192
+ _GrabFocus
193
+ end
194
+ viewer = @ImageViewer
195
+ @LastX = x
196
+ @LastY = y
197
+ @Window = viewer.GetColorWindow.to_f
198
+ @Level = viewer.GetColorLevel.to_f
199
+
200
+ # make the window level text visible
201
+ @LevelActor.SetVisibility(1)
202
+ @WindowActor.SetVisibility(1)
203
+
204
+ self.UpdateWindowLevelInteraction(x,y)
205
+ return nil
206
+ end
207
+
208
+ def EndWindowLevelInteraction
209
+ # make the window level text invisible
210
+ @LevelActor.SetVisibility(0)
211
+ @WindowActor.SetVisibility(0)
212
+ self.Render
213
+ end
214
+
215
+ def UpdateWindowLevelInteraction(x,y)
216
+ # compute normalized delta
217
+ dx = 4.0*(x - @LastX)/self.winfo_width*@Window
218
+ dy = 4.0*(@LastY - y)/self.winfo_height*@Level
219
+
220
+ # abs so that direction does not flip
221
+ if @Window < 0.0
222
+ dx = -dx
223
+ end
224
+ if @Level < 0.0
225
+ dy = -dy
226
+ end
227
+
228
+ # compute new window level
229
+ window = @Window + dx
230
+ if window < 0.0
231
+ level = @Level + dy
232
+ else
233
+ level = @Level - dy
234
+ end
235
+
236
+ viewer = @ImageViewer
237
+ viewer.SetColorWindow(window)
238
+ viewer.SetColorLevel(level)
239
+
240
+ @WindowMapper.SetInput("Window: %g" % window)
241
+ @LevelMapper.SetInput("Level: %g" % level)
242
+
243
+ self.Render
244
+ end
245
+
246
+ def ResetTkImageViewer
247
+ # Reset: Set window level to show all values
248
+ viewer = @ImageViewer
249
+ input = viewer.GetInput
250
+ if input == nil
251
+ return nil
252
+ end
253
+
254
+ # Get the extent in viewer
255
+ z = viewer.GetZSlice
256
+
257
+ input.SetUpdateExtent(-99999,99999,-99999,99999,z,z)
258
+ input.Update
259
+
260
+ low,high = input.GetScalarRange
261
+
262
+ viewer.SetColorWindow(high - low)
263
+ viewer.SetColorLevel((high + low) * 0.5)
264
+
265
+ self.Render
266
+ end
267
+
268
+ def StartQueryInteraction(x,y)
269
+ if ! @FocusOnEnter
270
+ _GrabFocus()
271
+ end
272
+ # Query PixleValue stuff
273
+ @WindowActor.SetVisibility(1)
274
+ self.UpdateQueryInteraction(x,y)
275
+ end
276
+
277
+ def EndQueryInteraction
278
+ @WindowActor.SetVisibility(0)
279
+ self.Render
280
+ end
281
+
282
+ def UpdateQueryInteraction(x,y)
283
+ viewer = @ImageViewer
284
+ input = viewer.GetInput
285
+ z = viewer.GetZSlice
286
+
287
+ # y is flipped upside down
288
+ y = self.winfo_height - y
289
+
290
+ # make sure point is in the whole extent of the image.
291
+ xMin,xMax,yMin,yMax,zMin,zMax = input.GetWholeExtent
292
+ if (x < xMin || x > xMax || y < yMin || y > yMax || z < zMin || z > zMax)
293
+ return nil
294
+ end
295
+
296
+ input.SetUpdateExtent(x,x,y,y,z,z)
297
+ input.Update
298
+ numComps = input.GetNumberOfScalarComponents
299
+ text = ""
300
+ for i in 0...numComps
301
+ val = input.GetScalarComponentAsDouble(x,y,z,i)
302
+ text = "#{text} #{"%.1f"%val}"
303
+ end
304
+
305
+ @WindowMapper.SetInput("(#{"%d"%x}, #{"%d"%y}): #{text}")
306
+
307
+ self.Render
308
+ end
309
+
310
+ end
311
+
312
+ #-----------------------------------------------------------------------------
313
+ # an example of how to use this widget
314
+ if $0 == __FILE__
315
+ canvas = Vtk::ImageCanvasSource2D.new
316
+ canvas.SetNumberOfScalarComponents(3)
317
+ canvas.SetScalarType(3)
318
+ canvas.SetExtent(0,511,0,511,0,0)
319
+ canvas.SetDrawColor(100,100,0)
320
+ canvas.FillBox(0,511,0,511)
321
+ canvas.SetDrawColor(200,0,200)
322
+ canvas.FillBox(32,511,100,500)
323
+ canvas.SetDrawColor(100,0,0)
324
+ canvas.FillTube(550,20,30,400,5)
325
+ canvas.SetDrawColor(255,255,255)
326
+ canvas.DrawSegment3D(10,20,0,90,510,0)
327
+ canvas.SetDrawColor(200,50,50)
328
+ canvas.DrawSegment3D(510,90,0,10,20,0)
329
+
330
+ # Check segment clipping
331
+ canvas.SetDrawColor(0,200,0)
332
+ canvas.DrawSegment(-10,30,30,-10)
333
+ canvas.DrawSegment(-10,481,30,521)
334
+ canvas.DrawSegment(481,-10,521,30)
335
+ canvas.DrawSegment(481,521,521,481)
336
+
337
+ # Check Filling a triangle
338
+ canvas.SetDrawColor(20,200,200)
339
+ canvas.FillTriangle(-100,100,190,150,40,300)
340
+
341
+ # Check drawing a circle
342
+ canvas.SetDrawColor(250,250,10)
343
+ canvas.DrawCircle(350,350,200.0)
344
+
345
+ # Check drawing a point
346
+ canvas.SetDrawColor(250,250,250)
347
+ canvas.DrawPoint(350,350)
348
+ canvas.DrawPoint(350,550)
349
+
350
+ # Test filling functionality
351
+ canvas.SetDrawColor(55,0,0)
352
+ canvas.DrawCircle(450,350,80.0)
353
+ canvas.SetDrawColor(100,255,100)
354
+ canvas.FillPixel(450,350)
355
+
356
+ # Create the GUI: two renderer widgets and a quit button
357
+
358
+ frame = TkFrame.new
359
+
360
+ widget = VtkTkImageViewerWidget.new(frame,'width'=>512,'height'=>512,'double'=>1)
361
+ viewer = widget.GetImageViewer
362
+ viewer.SetInput(canvas.GetOutput)
363
+ viewer.SetColorWindow(256)
364
+ viewer.SetColorLevel(127.5)
365
+
366
+ button = TkButton.new(frame){
367
+ text "Quit"
368
+ command { exit }
369
+ }
370
+
371
+ widget.pack('side'=>'top','padx'=>3,'pady'=>3,'fill'=>'both','expand'=>true)
372
+ frame.pack('fill'=>'both','expand'=>true)
373
+ button.pack('fill'=>'x')
374
+
375
+ frame.mainloop
376
+
377
+ end
@@ -0,0 +1 @@
1
+ # generated from CMake
@@ -0,0 +1,28 @@
1
+ =begin
2
+ A subclass of Tkinter.PhotoImage that connects a
3
+ vtkImageData to a photo widget.
4
+ =end
5
+
6
+ require 'tk'
7
+ require 'vtk'
8
+ require 'vtk/tk/vtkLoadRubyTkWidgets'
9
+
10
+ class Vtk::TkPhotoImage < TkPhotoImage
11
+ =begin
12
+ A subclass of PhotoImage with helper functions
13
+ A subend
14
+ for displaying vtkImageData
15
+ =end
16
+ def initialize( kw={} )
17
+ # Caller the superclass
18
+ super( kw )
19
+ Vtk.LoadRubyTkWidgets
20
+ end
21
+ def PutImageSlice ( image, z, options={} )
22
+ default_options = { 'orientation'=>'transverse', 'window'=>256, 'level'=>128 }
23
+ default_options.update( options )
24
+ options = default_options
25
+ t = "_"+image.GetAddressAsString('vtkImageData')[5..-1]+"_"+image.GetClassName
26
+ Tk.tk_call("vtkImageDataToTkPhoto", t, @path, "%d"%z, options['orientation'], "%d"%options['window'], "%d"%options['level'])
27
+ end
28
+ end
@@ -0,0 +1 @@
1
+ # generated from CMake
@@ -0,0 +1,486 @@
1
+ =begin
2
+ A simple vtkTkRenderWidget for Tk.
3
+
4
+
5
+ A few important notes:
6
+
7
+ This class is meant to be used as a base-class widget for
8
+ doing VTK rendering in Ruby
9
+
10
+ In VTK (and C++) there is a very important distinction between
11
+ public ivars (attributes in rubyspeak), protected ivars, &&
12
+ private ivars. When you write a ruby class that you want
13
+ to 'look && feel' like a VTK class, you should follow these rules.
14
+
15
+ 1) Attributes should never be public. Attributes should always be
16
+ either protected (prefixed with a single underscore) || private
17
+ (prefixed with a double underscore). You can provide access to
18
+ attributes through public Set/Get methods (same as VTK).
19
+
20
+ 2) Use a single underscore to denote a protected attribute, e.g.
21
+ @RenderWindow is protected (can be accessed from this
22
+ class || a derived class).
23
+
24
+ 3) Use a double underscore to denote a private attribute, e.g.
25
+ @InExpose can not be accessed outside of this class.
26
+
27
+ All attributes should be 'declared' in the __init__ function
28
+ i.e. set to some initial value. Don't forget that 'nil' means
29
+ 'NULL' - the ruby/vtk wrappers guarantee their equivalence.
30
+ =end
31
+
32
+ require 'tk'
33
+ require 'vtk'
34
+ require 'vtk/tk/vtkLoadRubyTkWidgets'
35
+
36
+
37
+ class Vtk::TkRenderWidget < TkWindow
38
+ =begin
39
+ A vtkTkRenderWidget for Ruby
40
+
41
+ Use GetRenderWindow to get the vtkRenderWindow.
42
+
43
+ Create with the keyword stereo=1 in order to generate a
44
+ stereo-capable window.
45
+
46
+ Create with the keyword focus_on_enter=1 to enable
47
+ focus-follows-mouse. The default is for a click-to-focus mode.
48
+ =end
49
+ TkCommandNames = ['vtkTkRenderWidget'.freeze].freeze
50
+
51
+ def initialize( master, kw={} )
52
+ =begin
53
+ Constructor.
54
+
55
+ Keyword arguments:
56
+
57
+ rw -- Use passed render window instead of creating a new one.
58
+
59
+ stereo -- If True, generate a stereo-capable window.
60
+ Defaults to False.
61
+
62
+ focus_on_enter -- If True, use a focus-follows-mouse mode.
63
+ Defaults to False where the widget will use a click-to-focus
64
+ mode.
65
+ =end
66
+ # load the necessary extensions into tk
67
+ Vtk.LoadRubyTkWidgets
68
+
69
+ _symbolkey2str(kw)
70
+
71
+ if kw['rw']
72
+ renderWindow = kw['rw']
73
+ else
74
+ renderWindow = Vtk::RenderWindow.new
75
+ end
76
+
77
+ if kw['stereo']
78
+ renderWindow.StereoCapableWindowOn
79
+ kw.delete('stereo')
80
+ end
81
+
82
+ # check if focus should follow mouse
83
+ if kw['focus_on_enter']
84
+ @FocusOnEnter = true
85
+ kw.delete('focus_on_enter')
86
+ else
87
+ @FocusOnEnter = false
88
+ end
89
+
90
+ kw['rw'] = renderWindow.GetAddressAsString("vtkRenderWindow")
91
+ kw['widgetname'] = 'vtkTkRenderWidget'
92
+ super(master, kw)
93
+ renderWindow.UnRegister(nil)
94
+
95
+ @CurrentRenderer = nil
96
+ @CurrentCamera = nil
97
+ @CurrentZoom = 1.0
98
+ @CurrentLight = nil
99
+
100
+ @ViewportCenterX = 0
101
+ @ViewportCenterY = 0
102
+
103
+ @Picker = Vtk::CellPicker.new
104
+ @PickedAssembly = nil
105
+ @PickedProperty = Vtk::Property.new
106
+ @PickedProperty.SetColor(1,0,0)
107
+ @PrePickedProperty = nil
108
+
109
+ @OldFocus = nil
110
+
111
+ # used by the LOD actors
112
+ @DesiredUpdateRate = 15
113
+ @StillUpdateRate = 0.0001
114
+
115
+ # these record the previous mouse position
116
+ @LastX = 0
117
+ @LastY = 0
118
+
119
+ # private attributes
120
+ @InExpose = false
121
+
122
+ # create the Tk bindings
123
+ self.BindTkRenderWidget
124
+ end
125
+
126
+ def BindTkRenderWidget
127
+ =begin
128
+ Bind some default actions.
129
+ =end
130
+ self.bind("ButtonPress"){|e,s| s||s=self; s.StartMotion(e.x,e.y) }
131
+ self.bind("ButtonRelease"){|e,s| s||s=self; s.EndMotion(e.x,e.y) }
132
+ self.bind("B1-Motion"){|e,s| s||s=self; s.Rotate(e.x,e.y) }
133
+ self.bind("B2-Motion"){|e,s| s||s=self; s.Pan(e.x,e.y) }
134
+ self.bind("B3-Motion"){|e,s| s||s=self; s.Zoom(e.x,e.y) }
135
+ self.bind("Shift-B1-Motion"){|e,s| s||s=self; s.Pan(e.x,e.y) }
136
+ self.bind("KeyPress-r"){|e,s| s||s=self; s.Reset(e.x,e.y) }
137
+ self.bind("KeyPress-u"){|e,s| s||s=self; s.deiconify }
138
+ self.bind("KeyPress-w"){|e,s| s||s=self; s.Wireframe }
139
+ self.bind("KeyPress-s"){|e,s| s||s=self; s.Surface }
140
+ self.bind("KeyPress-p"){|e,s| s||s=self; s.PickActor(e.x,e.y) }
141
+ if @FocusOnEnter
142
+ self.bind("Enter"){|e,s| s||s=self; s.Enter(e.x,e.y) }
143
+ self.bind("Leave"){|e,s| s||s=self; s.Leave(e.x,e.y) }
144
+ else
145
+ self.bind("ButtonPress"){|e,s| s||s=self; s.Enter(e.x,e.y) }
146
+ self.bind("Expose"){|e,s| s||s=self; s.Expose }
147
+ end
148
+ end
149
+
150
+ def GetZoomFactor
151
+ return @CurrentZoom
152
+ end
153
+
154
+ def SetDesiredUpdateRate(rate)
155
+ =begin
156
+ Mirrors the method with the same name in
157
+ vtkRenderWindowInteractor.
158
+ =end
159
+ @DesiredUpdateRate = rate
160
+ end
161
+
162
+ def GetDesiredUpdateRate
163
+ =begin
164
+ Mirrors the method with the same name in
165
+ vtkRenderWindowInteractor.
166
+ =end
167
+ return @DesiredUpdateRate
168
+ end
169
+
170
+ def SetStillUpdateRate(rate)
171
+ =begin
172
+ Mirrors the method with the same name in
173
+ vtkRenderWindowInteractor.
174
+ =end
175
+ @StillUpdateRate = rate
176
+ end
177
+
178
+ def GetStillUpdateRate
179
+ =begin
180
+ Mirrors the method with the same name in
181
+ vtkRenderWindowInteractor.
182
+ =end
183
+ return @StillUpdateRate
184
+ end
185
+
186
+ def GetRenderWindow
187
+ addr = Tk.tk_call(self, 'GetRenderWindow')[5..-1]
188
+ renderWindow = Vtk::RenderWindow.new('_%s_vtkRenderWindow_p' % addr)
189
+ renderWindow.UnRegister(nil)
190
+ return renderWindow
191
+ end
192
+
193
+ def GetPicker
194
+ return @Picker
195
+ end
196
+
197
+ def Expose
198
+ if ! @InExpose
199
+ @InExpose = true
200
+ self.update
201
+ self.GetRenderWindow.Render
202
+ @InExpose = false
203
+ end
204
+ end
205
+
206
+ def Render
207
+ if (@CurrentLight)
208
+ light = @CurrentLight
209
+ light.SetPosition(@CurrentCamera.GetPosition)
210
+ light.SetFocalPoint(@CurrentCamera.GetFocalPoint)
211
+ end
212
+
213
+ self.GetRenderWindow.Render
214
+ end
215
+
216
+ def UpdateRenderer(x,y)
217
+ =begin
218
+ UpdateRenderer will identify the renderer under the mouse && set
219
+ up _CurrentRenderer, _CurrentCamera, && _CurrentLight.
220
+ =end
221
+ windowX = self.winfo_width
222
+ windowY = self.winfo_height
223
+
224
+ renderers = self.GetRenderWindow.GetRenderers
225
+ numRenderers = renderers.GetNumberOfItems
226
+
227
+ @CurrentRenderer = nil
228
+ renderers.InitTraversal
229
+ for i in 0...numRenderers
230
+ renderer = renderers.GetNextItem
231
+ vx,vy = [0,0]
232
+ if (windowX > 1)
233
+ vx = x.to_f/(windowX-1)
234
+ end
235
+ if (windowY > 1)
236
+ vy = (windowY-y.to_f-1)/(windowY-1)
237
+ end
238
+ vpxmin,vpymin,vpxmax,vpymax = renderer.GetViewport
239
+
240
+ if (vx >= vpxmin && vx <= vpxmax && vy >= vpymin && vy <= vpymax)
241
+ @CurrentRenderer = renderer
242
+ @ViewportCenterX = windowX.to_f*(vpxmax-vpxmin)/2.0 +vpxmin
243
+ @ViewportCenterY = windowY.to_f*(vpymax-vpymin)/2.0 +vpymin
244
+ @CurrentCamera = @CurrentRenderer.GetActiveCamera
245
+ lights = @CurrentRenderer.GetLights
246
+ lights.InitTraversal
247
+ @CurrentLight = lights.GetNextItem
248
+ break
249
+ end
250
+ end
251
+
252
+ @LastX = x
253
+ @LastY = y
254
+ end
255
+
256
+ def GetCurrentRenderer
257
+ return @CurrentRenderer
258
+ end
259
+
260
+ def Enter(x,y)
261
+ @OldFocus = self.focus
262
+ self.focus
263
+ self.StartMotion(x, y)
264
+ end
265
+
266
+ def Leave(x,y)
267
+ if (@OldFocus != nil)
268
+ @OldFocus.focus
269
+ end
270
+ end
271
+
272
+ def StartMotion(x,y)
273
+ self.GetRenderWindow.SetDesiredUpdateRate(@DesiredUpdateRate)
274
+ self.UpdateRenderer(x,y)
275
+ end
276
+
277
+ def EndMotion(x,y)
278
+ self.GetRenderWindow.SetDesiredUpdateRate(@StillUpdateRate)
279
+ if @CurrentRenderer
280
+ self.Render
281
+ end
282
+ end
283
+
284
+ def Rotate(x,y)
285
+ if @CurrentRenderer
286
+
287
+ @CurrentCamera.Azimuth(@LastX - x)
288
+ @CurrentCamera.Elevation(y - @LastY)
289
+ @CurrentCamera.OrthogonalizeViewUp
290
+
291
+ @LastX = x
292
+ @LastY = y
293
+
294
+ @CurrentRenderer.ResetCameraClippingRange
295
+ self.Render
296
+ end
297
+ end
298
+
299
+ def Pan(x,y)
300
+ if @CurrentRenderer
301
+
302
+ renderer = @CurrentRenderer
303
+ camera = @CurrentCamera
304
+ pPoint0,pPoint1,pPoint2 = camera.GetPosition
305
+ fPoint0,fPoint1,fPoint2 = camera.GetFocalPoint
306
+
307
+ if (camera.GetParallelProjection)
308
+ renderer.SetWorldPoint(fPoint0,fPoint1,fPoint2,1.0)
309
+ renderer.WorldToDisplay
310
+ fx,fy,fz = renderer.GetDisplayPoint
311
+ renderer.SetDisplayPoint(fx-x+@LastX,
312
+ fy+y-@LastY,
313
+ fz)
314
+ renderer.DisplayToWorld
315
+ fx,fy,fz,fw = renderer.GetWorldPoint
316
+ camera.SetFocalPoint(fx,fy,fz)
317
+
318
+ renderer.SetWorldPoint(pPoint0,pPoint1,pPoint2,1.0)
319
+ renderer.WorldToDisplay
320
+ fx,fy,fz = renderer.GetDisplayPoint
321
+ renderer.SetDisplayPoint(fx-x+@LastX,
322
+ fy+y-@LastY,
323
+ fz)
324
+ renderer.DisplayToWorld
325
+ fx,fy,fz,fw = renderer.GetWorldPoint
326
+ camera.SetPosition(fx,fy,fz)
327
+
328
+ else
329
+ (fPoint0,fPoint1,fPoint2) = camera.GetFocalPoint
330
+ # Specify a point location in world coordinates
331
+ renderer.SetWorldPoint(fPoint0,fPoint1,fPoint2,1.0)
332
+ renderer.WorldToDisplay
333
+ # Convert world point coordinates to display coordinates
334
+ dPoint = renderer.GetDisplayPoint
335
+ focalDepth = dPoint[2]
336
+
337
+ aPoint0 = @ViewportCenterX + (x - @LastX)
338
+ aPoint1 = @ViewportCenterY - (y - @LastY)
339
+
340
+ renderer.SetDisplayPoint(aPoint0,aPoint1,focalDepth)
341
+ renderer.DisplayToWorld
342
+
343
+ (rPoint0,rPoint1,rPoint2,rPoint3) = renderer.GetWorldPoint
344
+ if (rPoint3 != 0.0)
345
+ rPoint0 = rPoint0/rPoint3
346
+ rPoint1 = rPoint1/rPoint3
347
+ rPoint2 = rPoint2/rPoint3
348
+ end
349
+
350
+ camera.SetFocalPoint((fPoint0 - rPoint0) + fPoint0,
351
+ (fPoint1 - rPoint1) + fPoint1,
352
+ (fPoint2 - rPoint2) + fPoint2)
353
+
354
+ camera.SetPosition((fPoint0 - rPoint0) + pPoint0,
355
+ (fPoint1 - rPoint1) + pPoint1,
356
+ (fPoint2 - rPoint2) + pPoint2)
357
+ end
358
+
359
+ @LastX = x
360
+ @LastY = y
361
+
362
+ self.Render
363
+ end
364
+ end
365
+
366
+ def Zoom(x,y)
367
+ if @CurrentRenderer
368
+
369
+ renderer = @CurrentRenderer
370
+ camera = @CurrentCamera
371
+
372
+ zoomFactor = 1.02**(0.5*(@LastY - y))
373
+ @CurrentZoom = @CurrentZoom * zoomFactor
374
+
375
+ if camera.GetParallelProjection != 0
376
+ parallelScale = camera.GetParallelScale/zoomFactor
377
+ camera.SetParallelScale(parallelScale)
378
+ else
379
+ camera.Dolly(zoomFactor)
380
+ renderer.ResetCameraClippingRange
381
+ end
382
+
383
+ @LastX = x
384
+ @LastY = y
385
+
386
+ self.Render
387
+ end
388
+ end
389
+
390
+ def Reset(x,y)
391
+ if @CurrentRenderer
392
+ @CurrentRenderer.ResetCamera
393
+ end
394
+
395
+ self.Render
396
+ end
397
+
398
+ def Wireframe
399
+ actors = @CurrentRenderer.GetActors
400
+ numActors = actors.GetNumberOfItems
401
+ actors.InitTraversal
402
+ for i in 0...numActors
403
+ actor = actors.GetNextItem
404
+ actor.GetProperty.SetRepresentationToWireframe
405
+ end
406
+
407
+ self.Render
408
+ end
409
+
410
+ def Surface
411
+ actors = @CurrentRenderer.GetActors
412
+ numActors = actors.GetNumberOfItems
413
+ actors.InitTraversal
414
+ for i in 0...numActors
415
+ actor = actors.GetNextItem
416
+ actor.GetProperty.SetRepresentationToSurface
417
+ end
418
+
419
+ self.Render
420
+ end
421
+
422
+ def PickActor(x,y)
423
+ if @CurrentRenderer
424
+
425
+ renderer = @CurrentRenderer
426
+ picker = @Picker
427
+ windowY = self.winfo_height
428
+ picker.Pick(x,(windowY - y - 1),0.0,renderer)
429
+ assembly = picker.GetAssembly
430
+
431
+ if (@PickedAssembly != nil && @PrePickedProperty != nil)
432
+ @PickedAssembly.SetProperty(@PrePickedProperty)
433
+ # release hold of the property
434
+ @PrePickedProperty.UnRegister(@PrePickedProperty)
435
+ @PrePickedProperty = nil
436
+ end
437
+
438
+ if (assembly != nil)
439
+ @PickedAssembly = assembly
440
+ @PrePickedProperty = @PickedAssembly.GetProperty
441
+ # hold onto the property
442
+ @PrePickedProperty.Register(@PrePickedProperty)
443
+ @PickedAssembly.SetProperty(@PickedProperty)
444
+ end
445
+
446
+ self.Render
447
+ end
448
+ end
449
+
450
+ end
451
+
452
+ #----------------------------------------------------------------------------
453
+ def vtkRenderWidgetConeExample
454
+ =begin
455
+ Like it says, just a simple example
456
+ =end
457
+ # create root window
458
+ root = TkRoot.new
459
+
460
+ # create vtkTkRenderWidget
461
+ pane = Vtk::TkRenderWidget.new(root,'width'=>300,'height'=>300)
462
+
463
+ ren = Vtk::Renderer.new
464
+ pane.GetRenderWindow.AddRenderer(ren)
465
+
466
+ cone = Vtk::ConeSource.new
467
+ cone.SetResolution(8)
468
+
469
+ coneMapper = Vtk::PolyDataMapper.new
470
+ coneMapper.SetInput(cone.GetOutput)
471
+
472
+ coneActor = Vtk::Actor.new
473
+ coneActor.SetMapper(coneMapper)
474
+
475
+ ren.AddActor(coneActor)
476
+
477
+ # pack the pane into the tk root
478
+ pane.pack
479
+
480
+ # start the tk mainloop
481
+ Tk.mainloop
482
+ end
483
+
484
+ if $0 == __FILE__
485
+ vtkRenderWidgetConeExample
486
+ end