Class: GtkGLExtVTKRenderWindowInteractor
- Inherits:
-
Gtk::DrawingArea
- Object
- Gtk::DrawingArea
- GtkGLExtVTKRenderWindowInteractor
- Defined in:
- lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb
Instance Method Summary collapse
- #ConnectSignals ⇒ Object
- #GetPicker(picker) ⇒ Object
- #GetRenderWindow ⇒ Object
-
#initialize ⇒ GtkGLExtVTKRenderWindowInteractor
constructor
Embeds a vtkRenderWindow into a pyGTK widget && uses vtkGenericRenderWindowInteractor for the event handling.
- #Initialize ⇒ Object
- #OnButtonDown(wid, event) ⇒ Object
- #OnButtonUp(wid, event) ⇒ Object
- #OnConfigure(widget, event) ⇒ Object
- #OnDestroy(wid, event = nil) ⇒ Object
- #OnEnter(wid, event) ⇒ Object
- #OnExpose(wid, event) ⇒ Object
- #OnKeyPress(wid, event) ⇒ Object
- #OnKeyRelease(wid, event) ⇒ Object
- #OnLeave(wid, event) ⇒ Object
- #OnMouseMove(wid, event) ⇒ Object
- #OnRealize(wid, event) ⇒ Object
- #Render ⇒ Object
- #set_size_request(w, h) ⇒ Object
- #SetPicker(picker) ⇒ Object
- #Start ⇒ Object
Constructor Details
#initialize ⇒ GtkGLExtVTKRenderWindowInteractor
Embeds a vtkRenderWindow into a pyGTK widget && uses
vtkGenericRenderWindowInteractor for the event handling. This
class embeds the RenderWindow correctly. A __getattr__ hook is
provided that makes the class behave like a
vtkGenericRenderWindowInteractor.
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 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 36 def initialize super glconfig = Gdk::GLConfig.new(Gdk::GLConfig::MODE_RGB| Gdk::GLConfig::MODE_DEPTH) set_gl_capability(glconfig) @RenderWindow = Vtk::RenderWindow.new # private attributes @Created = false @ActiveButton = nil @Iren = Vtk::GenericRenderWindowInteractor.new @Iren.SetRenderWindow(@RenderWindow) @Iren.GetInteractorStyle.SetCurrentStyleToTrackballCamera createTimer = Proc.new{|obj, event| gtk.timeout_add(10, Proc.new{ @Iren.TimerEvent }) } destroyTimer = Proc.new{|obj, event| =begin The timer is a one shot timer so will expire automatically. =end return 1 } @Iren.AddObserver('CreateTimerEvent', createTimer) @Iren.AddObserver('DestroyTimerEvent', destroyTimer) self.ConnectSignals # need this to be able to handle key_press events. self.set_flags(Gtk::Window::CAN_FOCUS) end |
Instance Method Details
#ConnectSignals ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 80 def ConnectSignals self.signal_connect("realize"){|wid,event| OnRealize(wid,event) } self.signal_connect("expose_event"){|wid,event| OnExpose(wid,event) } self.signal_connect("configure_event"){|wid,event| OnConfigure(wid,event) } self.signal_connect("button_press_event"){|wid,event| OnButtonDown(wid,event) } self.signal_connect("button_release_event"){|wid,event| OnButtonUp(wid,event) } self.signal_connect("motion_notify_event"){|wid,event| OnMouseMove(wid,event) } self.signal_connect("enter_notify_event"){|wid,event| OnEnter(wid,event) } self.signal_connect("leave_notify_event"){|wid,event| OnLeave(wid,event) } self.signal_connect("key_press_event"){|wid,event| OnKeyPress(wid,event) } self.signal_connect("delete_event"){|wid,event| OnDestroy(wid,event) } self.add_events(Gdk::Event::EXPOSURE_MASK | Gdk::Event::BUTTON_PRESS_MASK | Gdk::Event::BUTTON_RELEASE_MASK | Gdk::Event::KEY_PRESS_MASK | Gdk::Event::POINTER_MOTION_MASK | Gdk::Event::POINTER_MOTION_HINT_MASK | Gdk::Event::ENTER_NOTIFY_MASK | Gdk::Event::LEAVE_NOTIFY_MASK) end |
#GetPicker(picker) ⇒ Object
291 292 293 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 291 def GetPicker(picker) return @Iren.GetPicker end |
#GetRenderWindow ⇒ Object
101 102 103 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 101 def GetRenderWindow return @RenderWindow end |
#Initialize ⇒ Object
275 276 277 278 279 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 275 def Initialize if @Created @Iren.Initialize end end |
#OnButtonDown(wid, event) ⇒ Object
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 162 def OnButtonDown(wid, event) =begin Mouse button pressed. =end m = self.pointer ctrl, shift = _GetCtrlShift(event) @Iren.SetEventInformationFlipY(m[0], m[1], ctrl, shift, 0.chr, 0, nil) = event. if == 3 @Iren.RightButtonPressEvent return true elsif == 1 @Iren.LeftButtonPressEvent return true elsif == 2 @Iren.MiddleButtonPressEvent return true else return ralse end end |
#OnButtonUp(wid, event) ⇒ Object
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 184 def OnButtonUp(wid, event) =begin Mouse button released. =end m = self.pointer ctrl, shift = _GetCtrlShift(event) @Iren.SetEventInformationFlipY(m[0], m[1], ctrl, shift, 0.chr, 0, nil) = event. if == 3 @Iren.RightButtonReleaseEvent return true elsif == 1 @Iren.LeftButtonReleaseEvent return true elsif == 2 @Iren.MiddleButtonReleaseEvent return true end return false end |
#OnConfigure(widget, event) ⇒ Object
128 129 130 131 132 133 134 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 128 def OnConfigure(, event) # self.widget=widget @Iren.SetSize(event.width, event.height) @Iren.ConfigureEvent self.Render return true end |
#OnDestroy(wid, event = nil) ⇒ Object
141 142 143 144 145 146 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 141 def OnDestroy(wid, event=nil) self.hide @RenderWindow = nil self.destroy return true end |
#OnEnter(wid, event) ⇒ Object
217 218 219 220 221 222 223 224 225 226 227 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 217 def OnEnter(wid, event) =begin Entering the vtkRenderWindow. =end self.grab_focus m = self.pointer ctrl, shift = _GetCtrlShift(event) @Iren.SetEventInformationFlipY(m[0], m[1], ctrl, shift, 0.chr, 0, nil) @Iren.EnterEvent return true end |
#OnExpose(wid, event) ⇒ Object
136 137 138 139 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 136 def OnExpose(wid, event) self.Render return true end |
#OnKeyPress(wid, event) ⇒ Object
240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 240 def OnKeyPress(wid, event) =begin Key pressed. =end m = self.pointer ctrl, shift = _GetCtrlShift(event) # keycode, keysym = event.keyval, event.string keycode, keysym = event.keyval, nil key = 0.chr if keycode < 256 key = keycode.chr end @Iren.SetEventInformationFlipY(m[0], m[1], ctrl, shift, key, 0, keysym) @Iren.KeyPressEvent @Iren.CharEvent return true end |
#OnKeyRelease(wid, event) ⇒ Object
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 258 def OnKeyRelease(wid, event) =begin Key released. =end m = self.pointer ctrl, shift = _GetCtrlShift(event) # keycode, keysym = event.keyval, event.string keycode, keysym = event.keyval, nil key = 0.chr if keycode < 256 key = keycode.chr end @Iren.SetEventInformationFlipY(m[0], m[1], ctrl, shift, key, 0, keysym) @Iren.KeyReleaseEvent return true end |
#OnLeave(wid, event) ⇒ Object
229 230 231 232 233 234 235 236 237 238 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 229 def OnLeave(wid, event) =begin Leaving the vtkRenderWindow. =end m = self.pointer ctrl, shift = _GetCtrlShift(event) @Iren.SetEventInformationFlipY(m[0], m[1], ctrl, shift, 0.chr, 0, nil) @Iren.LeaveEvent return true end |
#OnMouseMove(wid, event) ⇒ Object
206 207 208 209 210 211 212 213 214 215 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 206 def OnMouseMove(wid, event) =begin Mouse has moved. =end m = self.pointer ctrl, shift = _GetCtrlShift(event) @Iren.SetEventInformationFlipY(m[0], m[1], ctrl, shift, 0.chr, 0, nil) @Iren.MouseMoveEvent return true end |
#OnRealize(wid, event) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 111 def OnRealize(wid, event) unless @Created # you can't get the xid without the window being realized. self.realize if Config::CONFIG["host_os"] =~ /win32/ win_id = self.window.handle.to_s else win_id =self.window.xid.to_s end @RenderWindow.SetWindowInfo(win_id) # @Iren.Initialize @Created = true end return true end |
#Render ⇒ Object
105 106 107 108 109 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 105 def Render if @Created @RenderWindow.Render end end |
#set_size_request(w, h) ⇒ Object
73 74 75 76 77 78 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 73 def set_size_request(w, h) super(w,h) @RenderWindow.SetSize(w, h) @Iren.SetSize(w, h) @Iren.ConfigureEvent end |
#SetPicker(picker) ⇒ Object
287 288 289 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 287 def SetPicker(picker) @Iren.SetPicker(picker) end |
#Start ⇒ Object
281 282 283 284 285 |
# File 'lib/VTK/gtk/GtkGLExtVTKRenderWindowInteractor.rb', line 281 def Start if @Created @Iren.Start end end |