X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxVTKRenderWindowInteractor.cxx;h=e7aa85e32a8fcf79c6917e8c3e7a08f8a4e6d830;hb=c5bb8b228d6fcd2a4ea1d6210bfa3a39d6bcac33;hp=e337fb64c7346fc33fb27192ae98eacb52d280b3;hpb=e5dd3702826e57ae15d40b8cda521e8ae17d5c57;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVTKRenderWindowInteractor.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVTKRenderWindowInteractor.cxx index e337fb6..e7aa85e 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVTKRenderWindowInteractor.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxVTKRenderWindowInteractor.cxx @@ -1,10 +1,35 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + /*========================================================================= Program: Visualization Toolkit Module: $RCSfile: wxVTKRenderWindowInteractor.cxx,v $ Language: C++ - Date: $Date: 2010/10/04 05:18:13 $ - Version: $Revision: 1.5 $ + Date: $Date: 2012/11/15 14:14:35 $ + Version: $Revision: 1.7 $ Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. @@ -16,6 +41,8 @@ =========================================================================*/ +#include + #include "wxVTKRenderWindowInteractor.h" //This is needed for vtk 3.1 : @@ -23,11 +50,16 @@ # include "vtkVersion.h" #endif -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) # include "vtkCommand.h" #else # include "vtkInteractorStyle.h" #endif +#include "vtkDebugLeaks.h" + +#ifdef __WXMAC__ +#include "vtkCarbonRenderWindow.h" +#endif //Keep this for compatibilty reason, this was introduced in wxGTK 2.4.0 #if (!wxCHECK_VERSION(2, 4, 0)) @@ -50,19 +82,37 @@ wxWindow* wxGetTopLevelParent(wxWindow *win) #endif //VTK_USE_COCOA #endif //__WXCOCOA__ -#ifdef __WXGTK__ -# include // GDK_WINDOW_XWINDOW is found here in wxWidgets 2.8.0 -# include "gdk/gdkprivate.h" -#ifdef __WXGTK20__ -#include + + +//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 +#if wxMAJOR_VERSION <= 2 + #ifdef __WXGTK__ + # include // GDK_WINDOW_XWINDOW is found here in wxWidgets 2.8.0 + # include "gdk/gdkprivate.h" + #if wxCHECK_VERSION(2, 8, 0) + #ifdef __WXGTK20__ + #include + #else + #include + #endif + #else + #include + #endif + #define GetXWindow(wxwin) (wxwin)->m_wxwindow ? \ + GDK_WINDOW_XWINDOW(GTK_PIZZA((wxwin)->m_wxwindow)->bin_window) : \ + GDK_WINDOW_XWINDOW((wxwin)->m_widget->window) + #endif #else -#include -#endif -#define GetXWindow(wxwin) (wxwin)->m_wxwindow ? \ - GDK_WINDOW_XWINDOW(GTK_PIZZA((wxwin)->m_wxwindow)->bin_window) : \ - GDK_WINDOW_XWINDOW((wxwin)->m_widget->window) + #ifdef __WXGTK__ + #include + #include + #endif #endif + + + + #ifdef __WXX11__ #include "wx/x11/privx.h" #define GetXWindow(wxwin) ((Window)(wxwin)->GetHandle()) @@ -108,22 +158,26 @@ BEGIN_EVENT_TABLE(wxVTKRenderWindowInteractor, wxWindow) EVT_ENTER_WINDOW(wxVTKRenderWindowInteractor::OnEnter) EVT_LEAVE_WINDOW(wxVTKRenderWindowInteractor::OnLeave) EVT_MOUSEWHEEL (wxVTKRenderWindowInteractor::OnMouseWheel) -// If we use EVT_KEY_DOWN instead of EVT_CHAR, capital versions -// of all characters are always returned. EVT_CHAR also performs -// other necessary keyboard-dependent translations. - //EVT_KEY_DOWN (wxVTKRenderWindowInteractor::OnKeyDown) - EVT_CHAR (wxVTKRenderWindowInteractor::OnKeyDown) + EVT_KEY_DOWN (wxVTKRenderWindowInteractor::OnKeyDown) EVT_KEY_UP (wxVTKRenderWindowInteractor::OnKeyUp) + EVT_CHAR (wxVTKRenderWindowInteractor::OnChar) #endif EVT_TIMER (ID_wxVTKRenderWindowInteractor_TIMER, wxVTKRenderWindowInteractor::OnTimer) EVT_SIZE (wxVTKRenderWindowInteractor::OnSize) END_EVENT_TABLE() +vtkCxxRevisionMacro(wxVTKRenderWindowInteractor, "$Revision: 1.7 $") +vtkInstantiatorNewMacro(wxVTKRenderWindowInteractor) + //--------------------------------------------------------------------------- #if defined(__WXGTK__) && defined(USE_WXGLCANVAS) -wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor() : vtkRenderWindowInteractor(), wxGLCanvas() +#if (wxCHECK_VERSION(2, 8, 0)) +wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor() : wxGLCanvas(0, -1, wxDefaultPosition), vtkRenderWindowInteractor() +#else +wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor() : wxGLCanvas(), vtkRenderWindowInteractor() +#endif #else -wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor() : vtkRenderWindowInteractor(), wxWindow() +wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor() : wxWindow(), vtkRenderWindowInteractor() #endif //__WXGTK__ , timer(this, ID_wxVTKRenderWindowInteractor_TIMER) , ActiveButton(wxEVT_NULL) @@ -134,12 +188,12 @@ wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor() : vtkRenderWindowInte , RenderWhenDisabled(1) , UseCaptureMouse(0) { - +#ifdef VTK_DEBUG_LEAKS + vtkDebugLeaks::ConstructClass("wxVTKRenderWindowInteractor"); +#endif this->RenderWindow = NULL; this->SetRenderWindow(vtkRenderWindow::New()); this->RenderWindow->Delete(); - - //this->SetBackgroundColour( wxColour(255,0,255) ); } //--------------------------------------------------------------------------- wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor(wxWindow *parent, @@ -149,9 +203,9 @@ wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor(wxWindow *parent, long style, const wxString &name) #if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - : vtkRenderWindowInteractor(), wxGLCanvas(parent, id, pos, size, style, name) + : wxGLCanvas(parent, id, pos, size, style, name), vtkRenderWindowInteractor() #else - : vtkRenderWindowInteractor(), wxWindow(parent, id, pos, size, style, name) + : wxWindow(parent, id, pos, size, style, name), vtkRenderWindowInteractor() #endif //__WXGTK__ , timer(this, ID_wxVTKRenderWindowInteractor_TIMER) , ActiveButton(wxEVT_NULL) @@ -162,18 +216,23 @@ wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor(wxWindow *parent, , RenderWhenDisabled(1) , UseCaptureMouse(0) { - +#ifdef VTK_DEBUG_LEAKS + vtkDebugLeaks::ConstructClass("wxVTKRenderWindowInteractor"); +#endif this->RenderWindow = NULL; this->SetRenderWindow(vtkRenderWindow::New()); this->RenderWindow->Delete(); - - // this->SetBackgroundColour( wxColour(255,0,0) ); +#ifdef __WXMAC__ + // On Mac (Carbon) we don't get notified of the initial window size with an EVT_SIZE event, + // so we update the size information of the interactor/renderwindow here + this->UpdateSize(size.x, size.y); +#endif } //--------------------------------------------------------------------------- wxVTKRenderWindowInteractor::~wxVTKRenderWindowInteractor() -{ - // LG : trompe la mort ! - SetReferenceCount(0); +{ + SetRenderWindow(NULL); + SetInteractorStyle(NULL); } //--------------------------------------------------------------------------- wxVTKRenderWindowInteractor * wxVTKRenderWindowInteractor::New() @@ -275,7 +334,7 @@ void wxVTKRenderWindowInteractor::OnTimer(wxTimerEvent& WXUNUSED(event)) if (!Enabled) return; -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style InvokeEvent(vtkCommand::TimerEvent, NULL); #else @@ -299,7 +358,7 @@ long wxVTKRenderWindowInteractor::GetHandleHack() long handle_tmp = 0; // __WXMSW__ is for Win32 -//__WXMAX__ stands for using Carbon C-headers, using either the CarbonLib/CFM or the native Mach-O builds (which then also use the latest features available) +//__WXMAC__ stands for using Carbon C-headers, using either the CarbonLib/CFM or the native Mach-O builds (which then also use the latest features available) // __WXGTK__ is for both gtk 1.2.x and gtk 2.x #if defined(__WXMSW__) || defined(__WXMAC__) handle_tmp = (long)this->GetHandle(); @@ -321,7 +380,15 @@ long wxVTKRenderWindowInteractor::GetHandleHack() // Find and return the actual X-Window. #if defined(__WXGTK__) || defined(__WXX11__) - return (long)GetXWindow(this); + + //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 + #if wxMAJOR_VERSION <= 2 + return (long)GetXWindow(this); + #else + GdkWindow* Win = gtk_widget_get_window( (GtkWidget *) GetHandle() ); + return (long int)GDK_WINDOW_XDISPLAY(Win); + #endif + #endif //#ifdef __WXMOTIF__ @@ -333,7 +400,6 @@ long wxVTKRenderWindowInteractor::GetHandleHack() //--------------------------------------------------------------------------- void wxVTKRenderWindowInteractor::OnPaint(wxPaintEvent& WXUNUSED(event)) { - //must always be here wxPaintDC pDC(this); @@ -347,22 +413,20 @@ void wxVTKRenderWindowInteractor::OnPaint(wxPaintEvent& WXUNUSED(event)) #endif //__WXMSW__ } // get vtk to render to the wxWindows - //bbtkDebugMessage("Wx",9,"wxVTKRenderWindowInteractor::OnPaint"<Refresh(); -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - // bbtkDebugMessage("Core",9,"wxVTKRenderWindowInteractor::OnPaint public wxGLCanvas, virtual public vtkRenderWindowInteractor \n"); -#else - // bbtkDebugMessage("Core",9,"wxVTKRenderWindowInteractor::OnPaint public wxWindow, virtual public vtkRenderWindowInteractor \n"); -#endif //__WXGTK__ - +#ifdef __WXMAC__ + // This solves a problem with repainting after a window resize + // See also: http://sourceforge.net/mailarchive/forum.php?thread_id=31690967&forum_id=41789 + vtkCarbonRenderWindow* rwin = vtkCarbonRenderWindow::SafeDownCast(RenderWindow); + if( rwin ) + { + rwin->UpdateGLRegion(); + } +#endif } //--------------------------------------------------------------------------- void wxVTKRenderWindowInteractor::OnEraseBackground(wxEraseEvent &event) { - //printf("EED wxVTKRenderWindowInteractor::OnEraseBackground \n"); //turn off background erase to reduce flickering on MSW event.Skip(false); } @@ -378,7 +442,7 @@ void wxVTKRenderWindowInteractor::OnSize(wxSizeEvent& WXUNUSED(event)) return; } -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) InvokeEvent(vtkCommand::ConfigureEvent, NULL); #endif //this will check for Handle @@ -389,10 +453,9 @@ void wxVTKRenderWindowInteractor::OnMotion(wxMouseEvent &event) { if (!Enabled) { - return; + return; } - -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) SetEventInformationFlipY(event.GetX(), event.GetY(), event.ControlDown(), event.ShiftDown(), '\0', 0, NULL); @@ -406,13 +469,12 @@ void wxVTKRenderWindowInteractor::OnMotion(wxMouseEvent &event) #if !(VTK_MAJOR_VERSION == 3 && VTK_MINOR_VERSION == 1) void wxVTKRenderWindowInteractor::OnEnter(wxMouseEvent &event) { - SetFocus(); if (!Enabled) - { - return; + { + return; } -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style SetEventInformationFlipY(event.GetX(), event.GetY(), event.ControlDown(), event.ShiftDown(), '\0', 0, NULL); @@ -432,7 +494,7 @@ void wxVTKRenderWindowInteractor::OnLeave(wxMouseEvent &event) return; } -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style SetEventInformationFlipY(event.GetX(), event.GetY(), event.ControlDown(), event.ShiftDown(), '\0', 0, NULL); @@ -452,58 +514,22 @@ void wxVTKRenderWindowInteractor::OnKeyDown(wxKeyEvent &event) return; } -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style int keycode = event.GetKeyCode(); - - char key = '\0'; - if ( keycode < 256 ) + if (((unsigned int)keycode) < 256) { // TODO: Unicode in non-Unicode mode ?? key = (char)keycode; } - else//Dic 2007 - { - if ( keycode==314 )//Real keyCode for Left ARROW and non-Unicode - { - key = 'L';//Left - } - else if( keycode==315 )//Real keyCode for Left ARROW and non-Unicode - { - key = 'U';//Up - } - else if( keycode==316 )//Real keyCode for Left ARROW and non-Unicode - { - key = 'R';//Right - } - else if( keycode==317 )//Real keyCode for Down ARROW and non-Unicode - { - key = 'D';//Down - } - else if( keycode==312 )//Real keyCode for Diagonal left down ARROW and non-Unicode - { - key = 'W';//Diagonal left down - } - else if( keycode==313 )//Real keyCode for Diagonal left up ARROW and non-Unicode - { - key = 'Q';//Diagonal left up - } - else if( keycode==366 )//Real keyCode for Diagonal right up ARROW and non-Unicode - { - key = 'P';//Diagonal right up - } - else if( keycode==367 )//Real keyCode for Diagonal right down ARROW and non-Unicode - { - key = 'M';//Diagonal right down - } - } - - SetEventInformationFlipY(event.GetX(), event.GetY(), - event.ControlDown(), event.ShiftDown(), key, 0, NULL); + // we don't get a valid mouse position inside the key event on every platform + // so we retrieve the mouse position explicitly and pass it along + wxPoint mousePos = ScreenToClient(wxGetMousePosition()); + SetEventInformationFlipY(mousePos.x, mousePos.y, + event.ControlDown(), event.ShiftDown(), key, 0, NULL); InvokeEvent(vtkCommand::KeyPressEvent, NULL); - InvokeEvent(vtkCommand::CharEvent, NULL); #else InteractorStyle->OnKeyDown(event.ControlDown(), event.ShiftDown(), event.GetKeyCode(), 1); @@ -518,18 +544,21 @@ void wxVTKRenderWindowInteractor::OnKeyUp(wxKeyEvent &event) return; } -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style int keycode = event.GetKeyCode(); char key = '\0'; - if (keycode < 256) + if (((unsigned int)keycode) < 256) { // TODO: Unicode in non-Unicode mode ?? key = (char)keycode; } - SetEventInformationFlipY(event.GetX(), event.GetY(), - event.ControlDown(), event.ShiftDown(), key, 0, NULL); + // we don't get a valid mouse position inside the key event on every platform + // so we retrieve the mouse position explicitly and pass it along + wxPoint mousePos = ScreenToClient(wxGetMousePosition()); + SetEventInformationFlipY(mousePos.x, mousePos.y, + event.ControlDown(), event.ShiftDown(), key, 0, NULL); InvokeEvent(vtkCommand::KeyReleaseEvent, NULL); #else InteractorStyle->OnKeyUp(event.ControlDown(), event.ShiftDown(), @@ -538,24 +567,56 @@ void wxVTKRenderWindowInteractor::OnKeyUp(wxKeyEvent &event) event.Skip(); } #endif //!(VTK_MAJOR_VERSION == 3 && VTK_MINOR_VERSION == 1) + //--------------------------------------------------------------------------- +void wxVTKRenderWindowInteractor::OnChar(wxKeyEvent &event) +{ + if (!Enabled) + { + return; + } + +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) + // new style + int keycode = event.GetKeyCode(); + char key = '\0'; + if (((unsigned int)keycode) < 256) + { + // TODO: Unicode in non-Unicode mode ?? + key = (char)keycode; + } + + // we don't get a valid mouse position inside the key event on every platform + // so we retrieve the mouse position explicitly and pass it along + wxPoint mousePos = ScreenToClient(wxGetMousePosition()); + SetEventInformationFlipY(mousePos.x, mousePos.y, + event.ControlDown(), event.ShiftDown(), key, 0, NULL); + InvokeEvent(vtkCommand::CharEvent, NULL); +#endif + event.Skip(); +} //--------------------------------------------------------------------------- void wxVTKRenderWindowInteractor::OnButtonDown(wxMouseEvent &event) { - if (!Enabled || (ActiveButton != wxEVT_NULL)) { return; } ActiveButton = event.GetEventType(); -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) + // On Mac (Carbon) and Windows we don't automatically get the focus when + // you click inside the window + // we therefore set the focus explicitly + // Apparently we need that on linux (GTK) too: + this->SetFocus(); + +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) SetEventInformationFlipY(event.GetX(), event.GetY(), event.ControlDown(), event.ShiftDown(), '\0', 0, NULL); #endif if(event.RightDown()) { -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style InvokeEvent(vtkCommand::RightButtonPressEvent, NULL); #else @@ -566,7 +627,7 @@ void wxVTKRenderWindowInteractor::OnButtonDown(wxMouseEvent &event) } else if(event.LeftDown()) { -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style InvokeEvent(vtkCommand::LeftButtonPressEvent, NULL); #else @@ -577,7 +638,7 @@ void wxVTKRenderWindowInteractor::OnButtonDown(wxMouseEvent &event) } else if(event.MiddleDown()) { -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style InvokeEvent(vtkCommand::MiddleButtonPressEvent, NULL); #else @@ -607,14 +668,14 @@ void wxVTKRenderWindowInteractor::OnButtonUp(wxMouseEvent &event) return; } -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) SetEventInformationFlipY(event.GetX(), event.GetY(), event.ControlDown(), event.ShiftDown(), '\0', 0, NULL); #endif if(ActiveButton == wxEVT_RIGHT_DOWN) { -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style InvokeEvent(vtkCommand::RightButtonReleaseEvent, NULL); #else @@ -625,7 +686,7 @@ void wxVTKRenderWindowInteractor::OnButtonUp(wxMouseEvent &event) } else if(ActiveButton == wxEVT_LEFT_DOWN) { -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style InvokeEvent(vtkCommand::LeftButtonReleaseEvent, NULL); #else @@ -636,7 +697,7 @@ void wxVTKRenderWindowInteractor::OnButtonUp(wxMouseEvent &event) } else if(ActiveButton == wxEVT_MIDDLE_DOWN) { -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) // new style InvokeEvent(vtkCommand::MiddleButtonReleaseEvent, NULL); #else @@ -656,7 +717,7 @@ void wxVTKRenderWindowInteractor::OnButtonUp(wxMouseEvent &event) void wxVTKRenderWindowInteractor::OnMouseWheel(wxMouseEvent& event) { // Mouse wheel was only added after VTK 4.4 (I think...) -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 2) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 2) // new style //Set vtk event information ... The numebr of wheel rotations is stored in //the x varible. y varible is zero @@ -665,21 +726,19 @@ void wxVTKRenderWindowInteractor::OnMouseWheel(wxMouseEvent& event) if(event.GetWheelRotation() > 0) { //Send event to VTK -// EED -// InvokeEvent(vtkCommand::MouseWheelForwardEvent, NULL); + InvokeEvent(vtkCommand::MouseWheelForwardEvent, NULL); } else { //Send event to VTK -// EED -// InvokeEvent(vtkCommand::MouseWheelBackwardEvent, NULL); + InvokeEvent(vtkCommand::MouseWheelBackwardEvent, NULL); } #endif } //--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::Render() throw (char*) +void wxVTKRenderWindowInteractor::Render() { RenderAllowed = 1; if (!RenderWhenDisabled) @@ -699,24 +758,18 @@ void wxVTKRenderWindowInteractor::Render() throw (char*) { if(Handle && (Handle == GetHandleHack()) ) { - if(RenderWindow!=NULL){ - RenderWindow->Render(); - }else{ - throw "wxVTKRenderWindowInteractor::Render(){RenderWindow not set}"; - } + RenderWindow->Render(); } -#if VTK_MAJOR_VERSION == 5 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 2) +#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 2) else if(GetHandleHack()) { //this means the user has reparented us; let's adapt to the //new situation by doing the WindowRemap dance //store the new situation - if(RenderWindow!=NULL){ - Handle = GetHandleHack(); - RenderWindow->SetNextWindowId(reinterpret_cast(Handle)); - RenderWindow->WindowRemap(); - RenderWindow->Render(); - } + Handle = GetHandleHack(); + RenderWindow->SetNextWindowId(reinterpret_cast(Handle)); + RenderWindow->WindowRemap(); + RenderWindow->Render(); } #endif } @@ -766,11 +819,3 @@ void wxVTKRenderWindowInteractor::PrintSelf(ostream& os, vtkIndent indent) this->Superclass::PrintSelf(os, indent); } - -#if defined(_WIN32) -const char * wxVTKRenderWindowInteractor::GetClassName() const -{ - return "wxVTKRenderWindowInteractor"; -} -#endif //_WIN32 -