From 24a21c6d8b4c2e7b6fb11a78b7dede85ee7ff75d Mon Sep 17 00:00:00 2001 From: Eduardo DAVILA Date: Mon, 2 Oct 2017 17:08:46 +0200 Subject: [PATCH] #3127 BBTK Feature New Normal - branch changeWx28to30 compilation with wxWidgets3 --- kernel/src/bbtkDynamicLibraryHandling.h | 4 + kernel/src/bbtkFactory.cxx | 10 +- kernel/src/bbtkInterpreterVirtual.cxx | 32 +- kernel/src/bbtkPackage.cxx | 2 +- kernel/src/bbtkWxGUIPackageBrowser2.cxx | 15 +- packages/wxvtk/src/bbwxvtkViewer2D.cxx | 7 +- packages/wxvtk/src/bbwxvtkViewer2D.h | 2 +- packages/wxvtk/src/bbwxvtkViewer3D.cxx | 4 +- packages/wxvtk/src/bbwxvtkViewer3D.h | 18 +- ...wInteractorTovtkRenderWindowInteractor.cxx | 4 +- .../wxvtk/src/wxVTKRenderWindowInteractor.cxx | 978 ------------------ .../wxvtk/src/wxVTKRenderWindowInteractor.h | 220 ---- 12 files changed, 49 insertions(+), 1247 deletions(-) delete mode 100644 packages/wxvtk/src/wxVTKRenderWindowInteractor.cxx delete mode 100644 packages/wxvtk/src/wxVTKRenderWindowInteractor.h diff --git a/kernel/src/bbtkDynamicLibraryHandling.h b/kernel/src/bbtkDynamicLibraryHandling.h index 335c671..9118e9b 100644 --- a/kernel/src/bbtkDynamicLibraryHandling.h +++ b/kernel/src/bbtkDynamicLibraryHandling.h @@ -59,9 +59,13 @@ // the RTTI mechanism travel correctly across packages (typeid,dynamic_cast...) // however this can cause problems (symbol clashes) ... // see : +// https://linux.die.net/man/3/dlopen // http://gcc.gnu.org/faq.html#dso // http://gcc.gnu.org/ml/gcc/2003-04/msg00256.html // http://gcc.gnu.org/ml/gcc-bugs/2003-10/msg02771.html + +#define BBTK_RTLD_LOCAL + #ifndef BBTK_RTLD_LOCAL # define BBTK_RTLD_SCOPE RTLD_GLOBAL #else diff --git a/kernel/src/bbtkFactory.cxx b/kernel/src/bbtkFactory.cxx index d541db3..820085a 100644 --- a/kernel/src/bbtkFactory.cxx +++ b/kernel/src/bbtkFactory.cxx @@ -106,7 +106,6 @@ namespace bbtk std::string pkgname, std::string path) { - Package::Pointer p = Package::CreateFromDynamicLibrary(libname, pkgname, path); @@ -125,8 +124,7 @@ namespace bbtk mPackageMap[pkgname] = p; return true; } - return false; - + return false; } //=================================================================== @@ -147,8 +145,6 @@ namespace bbtk void Factory::LoadPackage( const std::string& name ) { - - // Note : in the following : // name : the user supplied name // - abreviated name e.g. pkg pkg.so libbpkg libbbpkg.so @@ -280,7 +276,6 @@ namespace bbtk foundFile = true; // Try to Load the library - ok = DoLoadPackage( libname, pkgname, path); if (ok) { @@ -317,9 +312,6 @@ namespace bbtk } bbtkMessage("output",2,"[" << libname << "] loaded" << std::endl); } - - - } //=================================================================== diff --git a/kernel/src/bbtkInterpreterVirtual.cxx b/kernel/src/bbtkInterpreterVirtual.cxx index 93d05ed..451ade9 100644 --- a/kernel/src/bbtkInterpreterVirtual.cxx +++ b/kernel/src/bbtkInterpreterVirtual.cxx @@ -516,6 +516,7 @@ namespace bbtk //======================================================================= void InterpreterVirtual::CatchUnknownException() { +printf("EED InterpreterVirtual::CatchUnknownException Start\n"); //EED Borrame if (GetExecuter()->GetNoErrorMode()) //EED Borrame { //EED Borrame std::string file("?"); @@ -556,27 +557,28 @@ namespace bbtk CloseAllFiles(); std::cerr << mess.str(); } +printf("EED InterpreterVirtual::CatchUnknownException End\n"); } //======================================================================= //======================================================================= -#define CATCH_MACRO \ - catch (InterpreterException e) \ - { \ - CatchInterpreterException(e); \ - } \ +#define CATCH_MACRO \ + catch (InterpreterException e) \ + { \ + CatchInterpreterException(e); \ + } \ catch (bbtk::Exception e) \ - { \ - CatchBbtkException(e); \ - } \ + { \ + CatchBbtkException(e); \ + } \ catch (std::exception& e) \ - { \ + { \ CatchStdException(e); \ - } \ - catch (...) \ - { \ - CatchUnknownException(); \ + } \ + catch (...) \ + { \ + CatchUnknownException(); \ } //======================================================================= @@ -611,8 +613,7 @@ namespace bbtk //======================================================================= - InterpreterVirtual::ExitStatus - InterpreterVirtual::InterpretBuffer( std::stringstream* buffer ) + InterpreterVirtual::ExitStatus InterpreterVirtual::InterpretBuffer( std::stringstream* buffer ) { bbtkDebugMessage("interpreter",4,"==> InterpreterVirtual::InterpretBuffer()"< item2) - return 1; - + { + return 1; + } return 0; - } +} // WxGUIBlackBoxList WxGUIBlackBoxList::WxGUIBlackBoxList(wxWindow *parent, diff --git a/packages/wxvtk/src/bbwxvtkViewer2D.cxx b/packages/wxvtk/src/bbwxvtkViewer2D.cxx index 731d497..aef4777 100644 --- a/packages/wxvtk/src/bbwxvtkViewer2D.cxx +++ b/packages/wxvtk/src/bbwxvtkViewer2D.cxx @@ -70,7 +70,7 @@ namespace bbwxvtk wxvtkImageViewer2 *imageViewer; vtkImageData *backImageData; vtkImageData *mDefaultImage; - wxVTKRenderWindowInteractor *wxvtkrenderwindowinteractor; + crea::wxVTKRenderWindowInteractor *wxvtkrenderwindowinteractor; bool mUpdateCamera; vtkImplicitPlaneWidget * maPlane1, * maPlane2, * mbPlane1, * mbPlane2; @@ -83,9 +83,8 @@ namespace bbwxvtk mFirstTime(true), mBox(box) { - wxPanel *panel = this; - - wxvtkrenderwindowinteractor = new wxVTKRenderWindowInteractor(panel,-1); + wxPanel *panel = this; + wxvtkrenderwindowinteractor = new crea::wxVTKRenderWindowInteractor(panel,-1); wxvtkrenderwindowinteractor->UseCaptureMouseOn(); imageViewer = wxvtkImageViewer2::New(); diff --git a/packages/wxvtk/src/bbwxvtkViewer2D.h b/packages/wxvtk/src/bbwxvtkViewer2D.h index f63399f..f755890 100644 --- a/packages/wxvtk/src/bbwxvtkViewer2D.h +++ b/packages/wxvtk/src/bbwxvtkViewer2D.h @@ -60,7 +60,7 @@ #include "vtkImplicitPlaneWidget.h" #include "bbtkWxBlackBox.h" -#include "wxVTKRenderWindowInteractor.h" +#include "creawxVTKRenderWindowInteractor.h" namespace bbwxvtk { diff --git a/packages/wxvtk/src/bbwxvtkViewer3D.cxx b/packages/wxvtk/src/bbwxvtkViewer3D.cxx index 1d5fd58..c0ece13 100644 --- a/packages/wxvtk/src/bbwxvtkViewer3D.cxx +++ b/packages/wxvtk/src/bbwxvtkViewer3D.cxx @@ -62,7 +62,7 @@ namespace bbwxvtk { wxPanel *panel = this; - wxvtkrenderwindowinteractor = new wxVTKRenderWindowInteractor(panel,-1); + wxvtkrenderwindowinteractor = new crea::wxVTKRenderWindowInteractor(panel,-1); wxvtkrenderwindowinteractor->UseCaptureMouseOn(); renderer = vtkRenderer::New(); @@ -144,7 +144,7 @@ namespace bbwxvtk //------------------------------------------------------------------------- //------------------------------------------------------------------------- - wxVTKRenderWindowInteractor * Viewer3DWidget::GetInteractor() + crea::wxVTKRenderWindowInteractor * Viewer3DWidget::GetInteractor() { return wxvtkrenderwindowinteractor; } diff --git a/packages/wxvtk/src/bbwxvtkViewer3D.h b/packages/wxvtk/src/bbwxvtkViewer3D.h index 25dc712..d353d59 100644 --- a/packages/wxvtk/src/bbwxvtkViewer3D.h +++ b/packages/wxvtk/src/bbwxvtkViewer3D.h @@ -61,7 +61,7 @@ #include #include "bbtkWxBlackBox.h" -#include "wxVTKRenderWindowInteractor.h" +#include "creawxVTKRenderWindowInteractor.h" @@ -78,15 +78,15 @@ namespace bbwxvtk void Update(); vtkRenderer *GetRenderer(); - wxVTKRenderWindowInteractor * GetInteractor(); + crea::wxVTKRenderWindowInteractor * GetInteractor(); virtual void Refresh(bool eraseBackground = true, const wxRect* rect = NULL); private: - Viewer3D* mBox; - vtkRenderer *renderer; - vtkRenderWindow *renderwindow; - vtkInteractorStyleTrackballCamera *interactorstyle; - wxVTKRenderWindowInteractor *wxvtkrenderwindowinteractor; + Viewer3D *mBox; + vtkRenderer *renderer; + vtkRenderWindow *renderwindow; + vtkInteractorStyleTrackballCamera *interactorstyle; + crea::wxVTKRenderWindowInteractor *wxvtkrenderwindowinteractor; }; //------------------------------------------------------------------------ @@ -109,7 +109,7 @@ namespace bbwxvtk BBTK_DECLARE_INPUT(Stereo, bool); BBTK_DECLARE_INPUT(BackgroundColor,std::vector); BBTK_DECLARE_OUTPUT(Renderer,vtkRenderer*); - BBTK_DECLARE_OUTPUT(Interactor,wxVTKRenderWindowInteractor*); + BBTK_DECLARE_OUTPUT(Interactor,crea::wxVTKRenderWindowInteractor*); BBTK_PROCESS(Process); BBTK_CREATE_WIDGET(CreateWidget); BBTK_ON_SHOW_WIDGET(OnShowWidget); @@ -144,7 +144,7 @@ namespace bbwxvtk BBTK_INPUT(Viewer3D,Obs5,"Input observer",vtkInteractorObserver *,""); BBTK_INPUT(Viewer3D,Stereo,"Stereo with Red-Blue filter. False/True (default False)",bool,""); BBTK_OUTPUT(Viewer3D,Renderer,"Renderer to which actors can be added.",vtkRenderer*,""); - BBTK_OUTPUT(Viewer3D,Interactor,"Interactor with which vtk widgets can interact",wxVTKRenderWindowInteractor*,""); + BBTK_OUTPUT(Viewer3D,Interactor,"Interactor with which vtk widgets can interact",crea::wxVTKRenderWindowInteractor*,""); BBTK_END_DESCRIBE_BLACK_BOX(Viewer3D); //================================================================= diff --git a/packages/wxvtk/src/bbwxvtkwxVTKRenderWindowInteractorTovtkRenderWindowInteractor.cxx b/packages/wxvtk/src/bbwxvtkwxVTKRenderWindowInteractorTovtkRenderWindowInteractor.cxx index 36d16a9..2c206a0 100644 --- a/packages/wxvtk/src/bbwxvtkwxVTKRenderWindowInteractorTovtkRenderWindowInteractor.cxx +++ b/packages/wxvtk/src/bbwxvtkwxVTKRenderWindowInteractorTovtkRenderWindowInteractor.cxx @@ -28,7 +28,7 @@ #ifdef _USE_VTK_ #include "bbstdCast.h" -#include "wxVTKRenderWindowInteractor.h" +#include "creawxVTKRenderWindowInteractor.h" #include "bbwxvtkPackage.h" @@ -48,7 +48,7 @@ namespace bbwxvtk { //==================================================================== // Add the specialized adaptors to the package - typedef wxVTKRenderWindowInteractor* I; + typedef crea::wxVTKRenderWindowInteractor* I; typedef vtkRenderWindowInteractor* O; BBTK_ADD_TEMPLATE2_BLACK_BOX_TO_PACKAGE(wxvtk,Cast,I,O); diff --git a/packages/wxvtk/src/wxVTKRenderWindowInteractor.cxx b/packages/wxvtk/src/wxVTKRenderWindowInteractor.cxx deleted file mode 100644 index da5f670..0000000 --- a/packages/wxvtk/src/wxVTKRenderWindowInteractor.cxx +++ /dev/null @@ -1,978 +0,0 @@ -/* - # --------------------------------------------------------------------- - # - # 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$ - Language: C++ - Date: $Date$ - Version: $Revision$ - - Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen - All rights reserved. - See Copyright.txt or http://www.kitware.com/Copyright.htm for details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notice for more information. - -=========================================================================*/ - -#include - -#include "wxVTKRenderWindowInteractor.h" - -//This is needed for vtk 3.1 : -#ifndef VTK_MAJOR_VERSION -# include "vtkVersion.h" -#endif - -#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) -# include "vtkCommand.h" -#else -# include "vtkInteractorStyle.h" -#endif -#include "vtkDebugLeaks.h" - -// AKT: wxOSX 2.9.x defines __WXOSX_COCOA__ rather than __WXCOCOA__ -#ifdef __WXOSX_COCOA__ -#define __WXCOCOA__ -#endif - -#if defined(__WXMAC__) && wxCHECK_VERSION(2,9,0) - // ControlDown has been changed to mean Command key down - #define ControlDown RawControlDown -#endif - -#ifdef __WXMAC__ -#ifdef __WXCOCOA__ -#include "vtkCocoaRenderWindow.h" -#else -#include "vtkCarbonRenderWindow.h" -#endif -#endif - -//======================================================================= -// LG : NAMESPACE IS NECESSARY TO AVOID CONFLICTING SYMBOLS IN DYN LIBS -namespace bbwxvtk -{ - - -//Keep this for compatibilty reason, this was introduced in wxGTK 2.4.0 -#if (!wxCHECK_VERSION(2, 4, 0)) -wxWindow* wxGetTopLevelParent(wxWindow *win) -{ - while ( win && !win->IsTopLevel() ) - win = win->GetParent(); - return win; -} -#endif -} -// LG : EO namespace bbwxvtk -//======================================================================= - -// To access objc calls on cocoa -#ifdef __WXCOCOA__ -#ifdef VTK_USE_COCOA -#import -// This trick is no longer need in VTK CVS, should get rid of that: -#define id Id -#else -#error Build mismatch you need both wxWidgets and VTK to be configure against Cocoa to work -#endif //VTK_USE_COCOA -#endif //__WXCOCOA__ - -#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, 9, 0) - // thanks to: http://thomasfischer.biz/?p=382 - #include - #include - #include - #define piz(wxwin) WX_PIZZA((wxwin)->m_wxwindow) - #define GetXWindow(wxwin) (wxwin)->m_wxwindow ? \ - GDK_WINDOW_XWINDOW(((GtkWidget*)piz(wxwin))->window) : \ - GDK_WINDOW_XWINDOW((wxwin)->m_widget->window) - #else - #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 - #endif - -#else - #ifdef __WXGTK__ - #include - #include -#define GetXWindow(wxwin) (wxwin)->m_wxwindow ? \ - GDK_WINDOW_XID(gtk_widget_get_window((wxwin)->m_wxwindow)) : \ - GDK_WINDOW_XID(gtk_widget_get_window((wxwin)->m_widget)) - #endif -#endif - -#ifdef __WXX11__ -#include "wx/x11/privx.h" -#define GetXWindow(wxwin) ((Window)(wxwin)->GetHandle()) -#endif - -//For more info on this class please go to: -//http://wxvtk.sf.net -//This hack is for some buggy wxGTK version: -#if wxCHECK_VERSION(2, 3, 2) && !wxCHECK_VERSION(2, 4, 1) && defined(__WXGTK__) -# define WX_USE_X_CAPTURE 0 -#else -# define WX_USE_X_CAPTURE 1 -#endif - -#define ID_wxVTKRenderWindowInteractor_TIMER 1001 - -//======================================================================= -// LG : NAMESPACE IS NECESSARY TO AVOID CONFLICTING SYMBOLS IN DYN LIBS -namespace bbwxvtk -{ - -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) -#else -#endif //__WXGTK__ - -//--------------------------------------------------------------------------- -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 - #if wxMAJOR_VERSION <= 2 - IMPLEMENT_DYNAMIC_CLASS(wxVTKRenderWindowInteractor, wxGLCanvas) - BEGIN_EVENT_TABLE(wxVTKRenderWindowInteractor, wxGLCanvas) - #else - wxIMPLEMENT_DYNAMIC_CLASS(wxVTKRenderWindowInteractor, wxGLCanvas); - wxBEGIN_EVENT_TABLE(wxVTKRenderWindowInteractor, wxGLCanvas) - #endif -#else - //EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 - #if wxMAJOR_VERSION <= 2 - IMPLEMENT_DYNAMIC_CLASS(wxVTKRenderWindowInteractor, wxWindow) - BEGIN_EVENT_TABLE(wxVTKRenderWindowInteractor, wxWindow) - #else - wxIMPLEMENT_DYNAMIC_CLASS(wxVTKRenderWindowInteractor, wxWindow); - wxBEGIN_EVENT_TABLE(wxVTKRenderWindowInteractor, wxWindow) - #endif -#endif //__WXGTK__ - //refresh window by doing a Render - EVT_PAINT (wxVTKRenderWindowInteractor::OnPaint) - EVT_ERASE_BACKGROUND(wxVTKRenderWindowInteractor::OnEraseBackground) - EVT_MOTION (wxVTKRenderWindowInteractor::OnMotion) - - //Bind the events to the event converters - EVT_LEFT_DOWN (wxVTKRenderWindowInteractor::OnButtonDown) - EVT_MIDDLE_DOWN (wxVTKRenderWindowInteractor::OnButtonDown) - EVT_RIGHT_DOWN (wxVTKRenderWindowInteractor::OnButtonDown) - EVT_LEFT_UP (wxVTKRenderWindowInteractor::OnButtonUp) - EVT_MIDDLE_UP (wxVTKRenderWindowInteractor::OnButtonUp) - EVT_RIGHT_UP (wxVTKRenderWindowInteractor::OnButtonUp) -#if !(VTK_MAJOR_VERSION == 3 && VTK_MINOR_VERSION == 1) - EVT_ENTER_WINDOW(wxVTKRenderWindowInteractor::OnEnter) - EVT_LEAVE_WINDOW(wxVTKRenderWindowInteractor::OnLeave) - EVT_MOUSEWHEEL (wxVTKRenderWindowInteractor::OnMouseWheel) -#if wxCHECK_VERSION(2, 8, 0) - EVT_MOUSE_CAPTURE_LOST(wxVTKRenderWindowInteractor::OnMouseCaptureLost) -#endif - 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$") -vtkInstantiatorNewMacro(wxVTKRenderWindowInteractor) - -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) -static int wxvtk_attributes[]={ - WX_GL_DOUBLEBUFFER, - WX_GL_RGBA, - WX_GL_DEPTH_SIZE, - 16, - 0 -}; -#endif - -//--------------------------------------------------------------------------- -wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor() - -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - #if wxCHECK_VERSION(2, 9, 0) // the order of the parameters to wxGLCanvas::wxGLCanvas has changed - : wxGLCanvas(0, -1, wxvtk_attributes, wxDefaultPosition, wxDefaultSize, 0, wxT("wxVTKRenderWindowInteractor")), - #else - : wxGLCanvas(0, -1, wxDefaultPosition, wxDefaultSize, 0, wxT("wxVTKRenderWindowInteractor"), wxvtk_attributes), - #endif -#else - : wxWindow(), -#endif //__WXGTK__ - - vtkRenderWindowInteractor() - , timer(this, ID_wxVTKRenderWindowInteractor_TIMER) - , ActiveButton(wxEVT_NULL) - , Stereo(0) - , Handle(0) - , Created(true) - , RenderWhenDisabled(1) - , UseCaptureMouse(0) -{ -#ifdef VTK_DEBUG_LEAKS - vtkDebugLeaks::ConstructClass("wxVTKRenderWindowInteractor"); -#endif -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - this->context = new wxGLContext(this); -#endif - this->RenderWindow = NULL; - this->SetRenderWindow(vtkRenderWindow::New()); - this->RenderWindow->Delete(); -} -//--------------------------------------------------------------------------- -wxVTKRenderWindowInteractor::wxVTKRenderWindowInteractor(wxWindow *parent, - wxWindowID id, - const wxPoint &pos, - const wxSize &size, - long style, - const wxString &name) -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - #if wxCHECK_VERSION(2, 9, 0) // the order of the parameters to wxGLCanvas::wxGLCanvas has changed - : wxGLCanvas(parent, id, wxvtk_attributes, pos, size, style, name) - #else - : wxGLCanvas(parent, id, pos, size, style, name, wxvtk_attributes) - #endif -#else - : wxWindow(parent, id, pos, size, style, name) -#endif //__WXGTK__ - , vtkRenderWindowInteractor() - , timer(this, ID_wxVTKRenderWindowInteractor_TIMER) - , ActiveButton(wxEVT_NULL) - , Stereo(0) - , Handle(0) - , Created(true) - , RenderWhenDisabled(1) - , UseCaptureMouse(0) -{ -#ifdef VTK_DEBUG_LEAKS - vtkDebugLeaks::ConstructClass("wxVTKRenderWindowInteractor"); -#endif -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - this->context = new wxGLContext(this); -#endif - this->RenderWindow = NULL; - this->SetRenderWindow(vtkRenderWindow::New()); - this->RenderWindow->Delete(); -#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() -{ - SetRenderWindow(NULL); - SetInteractorStyle(NULL); -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - delete this->context; -#endif -} -//--------------------------------------------------------------------------- -wxVTKRenderWindowInteractor * wxVTKRenderWindowInteractor::New() -{ - // we don't make use of the objectfactory, because we're not registered - return new wxVTKRenderWindowInteractor; -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::Initialize() -{ - int *size = RenderWindow->GetSize(); - // enable everything and start rendering - Enable(); - //RenderWindow->Start(); - - // set the size in the render window interactor - Size[0] = size[0]; - Size[1] = size[1]; - - // this is initialized - Initialized = 1; -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::Enable() -{ - // if already enabled then done - if (Enabled) - return; - - // that's it - Enabled = 1; -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - wxGLCanvas::SetCurrent(*this->context); -#endif - Modified(); -} -//--------------------------------------------------------------------------- -bool wxVTKRenderWindowInteractor::Enable(bool enable) -{ -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - return wxGLCanvas::Enable(enable); -#else - return wxWindow::Enable(enable); -#endif -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::Disable() -{ - // if already disabled then done - if (!Enabled) - return; - - // that's it (we can't remove the event handler like it should be...) - Enabled = 0; - Modified(); -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::Start() -{ - // the interactor cannot control the event loop - vtkErrorMacro( << "wxVTKRenderWindowInteractor::Start() " - "interactor cannot control event loop."); -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::UpdateSize(int x, int y) -{ - if( RenderWindow ) - { - // if the size changed tell render window - if ( x != Size[0] || y != Size[1] ) - { - // adjust our (vtkRenderWindowInteractor size) - Size[0] = x; - Size[1] = y; - // and our RenderWindow's size - RenderWindow->SetSize(x, y); -#if defined(__WXMSW__) - this->Refresh(); -#endif //__WXMSW__ - } - } -} -//--------------------------------------------------------------------------- -int wxVTKRenderWindowInteractor::CreateTimer(int WXUNUSED(timertype)) -{ - // it's a one shot timer - if (!timer.Start(10, TRUE)) - return 0; - - return 1; - -} -#if VTK_MAJOR_VERSION > 5 || (VTK_MAJOR_VERSION == 5 && VTK_MINOR_VERSION >= 2) -//------------------------------------------------------------------ -int wxVTKRenderWindowInteractor::InternalCreateTimer(int timerId, int timerType, - unsigned long duration) -{ - if (!timer.Start(duration, timerType == OneShotTimer)) - return 0; - - return ID_wxVTKRenderWindowInteractor_TIMER; -} -//------------------------------------------------------------------ -int wxVTKRenderWindowInteractor::InternalDestroyTimer(int platformTimerId) -{ - timer.Stop(); - return 1; -} -#endif -//--------------------------------------------------------------------------- -int wxVTKRenderWindowInteractor::DestroyTimer() -{ - // do nothing - return 1; -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::OnTimer(wxTimerEvent& WXUNUSED(event)) -{ - if (!Enabled) - return; - -#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) - // new style -#if VTK_MAJOR_VERSION > 5 || (VTK_MAJOR_VERSION == 5 && VTK_MINOR_VERSION >= 2) - // pass the right timer id - int timerId = this->GetCurrentTimerId(); - this->InvokeEvent(vtkCommand::TimerEvent, &timerId); -#else - this->InvokeEvent(vtkCommand::TimerEvent, NULL); -#endif -#else - // old style - InteractorStyle->OnTimer(); -#endif -} - -//--------------------------------------------------------------------------- -// NOTE on implementation: -// Bad luck you ended up in the only tricky place of this code. -// A few note, wxWidgets still refuse to provide such convenient method -// so I have to maintain it myself, eventhough this is completely integrated -// in wxPython... -// Anyway if this happen to break for you then compare to a recent version of wxPython -// and look for the function long wxPyGetWinHandle(wxWindow* win) -// in wxPython/src/helpers.cpp -long wxVTKRenderWindowInteractor::GetHandleHack() -{ - //helper function to hide the MSW vs GTK stuff - long handle_tmp = 0; - -// __WXMSW__ is for Win32 -// __WXMAC__ is for Carbon or Cocoa builds -// __WXGTK__ is for both gtk 1.2.x and gtk 2.x -#if defined(__WXMSW__) || defined(__WXMAC__) - handle_tmp = (long)this->GetHandle(); -#endif //__WXMSW__ - -// using above GetHandle() works fine with wxOSX 2.9.x -#if defined(__WXCOCOA__) && !wxCHECK_VERSION(2, 9, 0) - // Here is how to find the NSWindow - wxTopLevelWindow* toplevel = dynamic_cast(wxGetTopLevelParent( this ) ); - if (toplevel != NULL ) - { - handle_tmp = (long)toplevel->GetNSWindow(); - } - // The NSView will be deducted from - // [(NSWindow*)Handle contentView] - // if only I knew how to write that in c++ -#endif //__WXCOCOA__ && !wxCHECK_VERSION(2, 9, 0) - - // Find and return the actual X-Window. -#if defined(__WXGTK__) || defined(__WXX11__) - return (long)GetXWindow(this); -#endif - -//#ifdef __WXMOTIF__ -// handle_tmp = (long)this->GetXWindow(); -//#endif - - return handle_tmp; -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::OnPaint(wxPaintEvent& WXUNUSED(event)) -{ - //must always be here - wxPaintDC pDC(this); - - //do it here rather than in the cstor: this is safer. - if(!Handle) - { - Handle = GetHandleHack(); - RenderWindow->SetWindowId(reinterpret_cast(Handle)); -// Cocoa -// this->GetNSView() <-> DisplayId -// this->GetTopLevel()->GetNSWindow() <-> WindowId -#ifdef __WXMSW__ - RenderWindow->SetParentId(reinterpret_cast(this->GetParent()->GetHWND())); -#endif //__WXMSW__ - - // This is another hack to prevent the VTK Render Window from closing the display. - // If VTK closes the display, ~wxContext chashes while trying to destroy its - // glContext (because the display is closed). The Get -> Set makes this VTK - // object think someone else is responsible for the display. - #ifdef __WXCOCOA__ - // avoid "Method not implemented" messages in Console - #else - this->RenderWindow->SetDisplayId(this->RenderWindow->GetGenericDisplayId()); - #endif - } - // get vtk to render to the wxWindows - Render(); -#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 -#ifdef __WXCOCOA__ - #if !wxCHECK_VERSION(2, 9, 0) - // this doesn't seem necessary with wxOSX 2.9.x - vtkCocoaRenderWindow * rwin = vtkCocoaRenderWindow::SafeDownCast(RenderWindow); - if( rwin ) - { - rwin->UpdateContext(); - } - #endif -#else - vtkCarbonRenderWindow* rwin = vtkCarbonRenderWindow::SafeDownCast(RenderWindow); - if( rwin ) - { -#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 4) - // Must be somewhere after VTK 4.4 - rwin->UpdateGLRegion(); -#endif - } -#endif -#endif -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::OnEraseBackground(wxEraseEvent &event) -{ - //turn off background erase to reduce flickering on MSW - event.Skip(false); -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::OnSize(wxSizeEvent& WXUNUSED(event)) -{ - int w, h; - GetClientSize(&w, &h); - UpdateSize(w, h); - - if (!Enabled) - { - return; - } - -#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) - InvokeEvent(vtkCommand::ConfigureEvent, NULL); -#endif - //this will check for Handle - //Render(); -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::OnMotion(wxMouseEvent &event) -{ - if (!Enabled) - { - return; - } -#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); - - InvokeEvent(vtkCommand::MouseMoveEvent, NULL); -#else - InteractorStyle->OnMouseMove(event.ControlDown(), event.ShiftDown(), - event.GetX(), Size[1] - event.GetY() - 1); -#endif -} -//--------------------------------------------------------------------------- -#if !(VTK_MAJOR_VERSION == 3 && VTK_MINOR_VERSION == 1) -void wxVTKRenderWindowInteractor::OnEnter(wxMouseEvent &event) -{ - if (!Enabled) - { - return; - } - -#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); - - InvokeEvent(vtkCommand::EnterEvent, NULL); -#else - // old style - InteractorStyle->OnEnter(event.ControlDown(), event.ShiftDown(), - event.GetX(), Size[1] - event.GetY() - 1); -#endif -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::OnLeave(wxMouseEvent &event) -{ - if (!Enabled) - { - return; - } - -#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); - - InvokeEvent(vtkCommand::LeaveEvent, NULL); -#else - // old style - InteractorStyle->OnLeave(event.ControlDown(), event.ShiftDown(), - event.GetX(), Size[1] - event.GetY() - 1); -#endif -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::OnKeyDown(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::KeyPressEvent, NULL); -#else - InteractorStyle->OnKeyDown(event.ControlDown(), event.ShiftDown(), - event.GetKeyCode(), 1); -#endif - event.Skip(); -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::OnKeyUp(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::KeyReleaseEvent, NULL); -#else - InteractorStyle->OnKeyUp(event.ControlDown(), event.ShiftDown(), - event.GetKeyCode(), 1); -#endif - 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(); - - // 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 > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) - // new style - InvokeEvent(vtkCommand::RightButtonPressEvent, NULL); -#else - // old style - InteractorStyle->OnRightButtonDown(event.ControlDown(), event.ShiftDown(), - event.GetX(), Size[1] - event.GetY() - 1); -#endif - } - else if(event.LeftDown()) - { -#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) - // new style - InvokeEvent(vtkCommand::LeftButtonPressEvent, NULL); -#else - // old style - InteractorStyle->OnLeftButtonDown(event.ControlDown(), event.ShiftDown(), - event.GetX(), Size[1] - event.GetY() - 1); -#endif - } - else if(event.MiddleDown()) - { -#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) - // new style - InvokeEvent(vtkCommand::MiddleButtonPressEvent, NULL); -#else - // old style - InteractorStyle->OnMiddleButtonDown(event.ControlDown(), event.ShiftDown(), - event.GetX(), Size[1] - event.GetY() - 1); -#endif - } - //save the button and capture mouse until the button is released - //Only if : - //1. it is possible (WX_USE_X_CAPTURE) - //2. user decided to. - if ((ActiveButton != wxEVT_NULL) && WX_USE_X_CAPTURE && UseCaptureMouse) - { - CaptureMouse(); - } -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::OnButtonUp(wxMouseEvent &event) -{ - //EVT_xxx_DOWN == EVT_xxx_UP - 1 - //This is only needed if two mouse buttons are pressed at the same time. - //In wxWindows 2.4 and later: better use of wxMOUSE_BTN_RIGHT or - //wxEVT_COMMAND_RIGHT_CLICK - if (!Enabled || (ActiveButton != (event.GetEventType()-1))) - { - return; - } - - // See report by Shang Mu / Kerry Loux on wxVTK mailing list - 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(ActiveButton == wxEVT_RIGHT_DOWN) - { -#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) - // new style - InvokeEvent(vtkCommand::RightButtonReleaseEvent, NULL); -#else - // old style - InteractorStyle->OnRightButtonUp(event.ControlDown(), event.ShiftDown(), - event.GetX(), Size[1] - event.GetY() - 1); -#endif - } - else if(ActiveButton == wxEVT_LEFT_DOWN) - { -#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) - // new style - InvokeEvent(vtkCommand::LeftButtonReleaseEvent, NULL); -#else - // old style - InteractorStyle->OnLeftButtonUp(event.ControlDown(), event.ShiftDown(), - event.GetX(), Size[1] - event.GetY() - 1); -#endif - } - else if(ActiveButton == wxEVT_MIDDLE_DOWN) - { -#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 0) - // new style - InvokeEvent(vtkCommand::MiddleButtonReleaseEvent, NULL); -#else - // old style - InteractorStyle->OnMiddleButtonUp(event.ControlDown(), event.ShiftDown(), - event.GetX(), Size[1] - event.GetY() - 1); -#endif - } - //if the ActiveButton is realeased, then release mouse capture - if ((ActiveButton != wxEVT_NULL) && WX_USE_X_CAPTURE && UseCaptureMouse) - { - ReleaseMouse(); - } - ActiveButton = wxEVT_NULL; -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::OnMouseWheel(wxMouseEvent& event) -{ -// Mouse wheel was only added after VTK 4.4 (I think...) -#if VTK_MAJOR_VERSION > 4 || (VTK_MAJOR_VERSION == 4 && VTK_MINOR_VERSION > 4) - // new style - //Set vtk event information ... The numebr of wheel rotations is stored in - //the x varible. y varible is zero - SetEventInformationFlipY(event.GetX() , event.GetY(), - event.ControlDown(), event.ShiftDown(), '\0', 0, NULL); - if(event.GetWheelRotation() > 0) - { - //Send event to VTK - InvokeEvent(vtkCommand::MouseWheelForwardEvent, NULL); - } - else - { - //Send event to VTK - InvokeEvent(vtkCommand::MouseWheelBackwardEvent, NULL); - } -#endif - -} - -//--------------------------------------------------------------------------- -#if wxCHECK_VERSION(2, 8, 0) -void wxVTKRenderWindowInteractor::OnMouseCaptureLost(wxMouseCaptureLostEvent& event) -{ - if (ActiveButton != wxEVT_NULL) - { - //Maybe also invoke the button release event here - } - // Reset ActiveButton so that - // 1. we do not process mouse button up events any more, - // 2. the next button down event will be processed and call CaptureMouse(). - // Otherwise ReleaseMouse() will be called - // without a previous CaptureMouse(). - ActiveButton = wxEVT_NULL; -} -#endif - -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::Render() -{ -#if wxCHECK_VERSION(2, 8, 0) - int renderAllowed = !IsFrozen(); -#else - int renderAllowed = 1; -#endif - if (renderAllowed && !RenderWhenDisabled) - { - //the user doesn't want us to render when the toplevel frame - //is disabled - first find the top level parent - wxWindow *topParent = wxGetTopLevelParent(this); - if (topParent) - { - //if it exists, check whether it's enabled - //if it's not enabeld, renderAllowed will be false - renderAllowed = topParent->IsEnabled(); - } - } - - if (renderAllowed) - { -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - wxGLCanvas::SetCurrent(*(this->context)); -#endif - if(Handle && (Handle == GetHandleHack()) ) - { - RenderWindow->Render(); - } -#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 - Handle = GetHandleHack(); - RenderWindow->SetNextWindowId(reinterpret_cast(Handle)); - RenderWindow->WindowRemap(); - RenderWindow->Render(); - } -#endif - } -} -//--------------------------------------------------------------------------- -void wxVTKRenderWindowInteractor::SetRenderWhenDisabled(int newValue) -{ - //Change value of __RenderWhenDisabled ivar. - //If __RenderWhenDisabled is false (the default), this widget will not - //call Render() on the RenderWindow if the top level frame (i.e. the - //containing frame) has been disabled. - - //This prevents recursive rendering during wxSafeYield() calls. - //wxSafeYield() can be called during the ProgressMethod() callback of - //a VTK object to have progress bars and other GUI elements updated - - //it does this by disabling all windows (disallowing user-input to - //prevent re-entrancy of code) and then handling all outstanding - //GUI events. - - //However, this often triggers an OnPaint() method for wxVTKRWIs, - //resulting in a Render(), resulting in Update() being called whilst - //still in progress. - - RenderWhenDisabled = (bool)newValue; -} -//--------------------------------------------------------------------------- -// -// Set the variable that indicates that we want a stereo capable window -// be created. This method can only be called before a window is realized. -// -void wxVTKRenderWindowInteractor::SetStereo(int capable) -{ - if (Stereo != capable) - { - Stereo = capable; - RenderWindow->StereoCapableWindowOn(); - RenderWindow->SetStereoTypeToCrystalEyes(); - Modified(); - } -} - -//--------------------------------------------------------------------------- -// -// -void wxVTKRenderWindowInteractor::PrintSelf(ostream& os, vtkIndent indent) -{ - this->Superclass::PrintSelf(os, indent); -} - - -} -// LG : EO namespace bbwxvtk -//======================================================================= - - diff --git a/packages/wxvtk/src/wxVTKRenderWindowInteractor.h b/packages/wxvtk/src/wxVTKRenderWindowInteractor.h deleted file mode 100644 index c7f6051..0000000 --- a/packages/wxvtk/src/wxVTKRenderWindowInteractor.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - # --------------------------------------------------------------------- - # - # 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$ - Language: C++ - Date: $Date$ - Version: $Revision$ - - Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen - All rights reserved. - See Copyright.txt or http://www.kitware.com/Copyright.htm for details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notice for more information. - -=========================================================================*/ - -// .NAME wxVTKRenderWindowInteractor - class to enable VTK to render to -// and interact with wxWindow. -// .SECTION Description -// wxVTKRenderWindowInteractor provide a VTK widget for wxWindow. This class -// was completely rewrote to have the 'Look & Feel' of the python version: -// wxVTKRenderWindowInteractor.py -// .SECTION Caveats -// - There is a know bug that prevent this class to works for more info see -// WX_USE_X_CAPTURE. This bug only affect wxGTK from 2.3.2 to wxGTK 2.4.0. -// - Furthermore this class is tempated over either wxWindows or wxGLCanvas, -// in wxWindows 2.3.1 and earlier, the wxGLCanvas had scroll bars, you can avoid -// this effect by playing with WX_BASE_CLASS at your risk (you might end up with -// lot of flickering.) -// - This class might not be easily readable as it tried to work with VTK 3.2 -// and 4.x. This class doesn't support reparenting with VTK 4.2 and earlier. -// .SECTION see also -// wxVTKRenderWindowInteractor.py wxVTKRenderWindow.py - -#ifndef _wxVTKRenderWindowInteractor_h_ -#define _wxVTKRenderWindowInteractor_h_ - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ -# pragma hdrstop -#endif - -#ifndef WX_PRECOMP -#include -#endif - -#include -#include - -// vtk includes -#include "vtkRenderWindowInteractor.h" -#include "vtkRenderWindow.h" - -#define USE_WXGLCANVAS - -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) -# if wxUSE_GLCANVAS -# include -# else -# error "problem of wxGLCanvas, you need to build wxWidgets with opengl" -# endif //wxUSE_GLCANVAS -#endif //__WXGTK__ - -// Motif version (renamed into wxX11 for wxWindow 2.4 and newer) -#if defined(__WXMOTIF__) -# error This GUI is not supported by wxVTKRenderWindowInteractor for now -#endif - -// wx forward declarations -class wxPaintEvent; -class wxMouseEvent; -class wxTimerEvent; -class wxKeyEvent; -class wxSizeEvent; - -//======================================================================= -// LG : NAMESPACE IS NECESSARY TO AVOID CONFLICTING SYMBOLS IN DYN LIBS -namespace bbwxvtk -{ - - -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) -class wxVTKRenderWindowInteractor : public wxGLCanvas, public vtkRenderWindowInteractor -#else -class wxVTKRenderWindowInteractor : public wxWindow, public vtkRenderWindowInteractor -#endif //__WXGTK__ -{ -//EED 2017-09-16 Migration wxWidgets 2.8 to 3.0 -#if wxMAJOR_VERSION <= 2 - DECLARE_DYNAMIC_CLASS(wxVTKRenderWindowInteractor) -#else - wxDECLARE_DYNAMIC_CLASS(wxVTKRenderWindowInteractor); -#endif - - public: - //constructors - wxVTKRenderWindowInteractor(); - - wxVTKRenderWindowInteractor(wxWindow *parent, - wxWindowID id, - const wxPoint &pos = wxDefaultPosition, - const wxSize &size = wxDefaultSize, - long style = wxWANTS_CHARS | wxNO_FULL_REPAINT_ON_RESIZE, - const wxString &name = wxPanelNameStr); - vtkTypeRevisionMacro(wxVTKRenderWindowInteractor,vtkRenderWindowInteractor); - static wxVTKRenderWindowInteractor * New(); - void PrintSelf(ostream& os, vtkIndent indent); - - //destructor - ~wxVTKRenderWindowInteractor(); - - // vtkRenderWindowInteractor overrides - void Initialize(); - void Enable(); - bool Enable(bool enable); - void Disable(); - void Start(); - void UpdateSize(int x, int y); - int CreateTimer(int timertype); - int DestroyTimer(); - void TerminateApp() {}; - - // event handlers - void OnPaint(wxPaintEvent &event); - void OnEraseBackground (wxEraseEvent& event); - void OnMotion(wxMouseEvent &event); - - void OnButtonDown(wxMouseEvent &event); - void OnButtonUp(wxMouseEvent &event); -#if !(VTK_MAJOR_VERSION == 3 && VTK_MINOR_VERSION == 1) - void OnEnter(wxMouseEvent &event); - void OnLeave(wxMouseEvent &event); - void OnMouseWheel(wxMouseEvent& event); -#if wxCHECK_VERSION(2, 8, 0) - void OnMouseCaptureLost(wxMouseCaptureLostEvent& event); -#endif - void OnKeyDown(wxKeyEvent &event); - void OnKeyUp(wxKeyEvent &event); - void OnChar(wxKeyEvent &event); -#endif - void OnTimer(wxTimerEvent &event); - void OnSize(wxSizeEvent &event); - - void Render(); - void SetRenderWhenDisabled(int newValue); - - // Description: - // Prescribe that the window be created in a stereo-capable mode. This - // method must be called before the window is realized. Default if off. - vtkGetMacro(Stereo,int); - vtkBooleanMacro(Stereo,int); - virtual void SetStereo(int capable); - - // Description: - // As CaptureMouse could be a problem sometimes on a window box - // This method allow to set or not the CaptureMouse. - // This method actually will works only if WX_USE_X_CAPTURE was set to 1 - vtkSetMacro(UseCaptureMouse,int); - vtkBooleanMacro(UseCaptureMouse,int); - -#if VTK_MAJOR_VERSION > 5 || (VTK_MAJOR_VERSION == 5 && VTK_MINOR_VERSION >= 2) - protected: - virtual int InternalCreateTimer(int timerId, int timerType, unsigned long duration); - virtual int InternalDestroyTimer(int platformTimerId); -#endif - - protected: -#if defined(__WXGTK__) && defined(USE_WXGLCANVAS) - wxGLContext *context; -#endif - wxTimer timer; - int ActiveButton; - long GetHandleHack(); - int Stereo; - - private: - long Handle; - bool Created; - int RenderWhenDisabled; - int UseCaptureMouse; - - DECLARE_EVENT_TABLE() -}; - -} -// LG : EO namespace bbwxvtk -//====================================================================== - -#endif //_wxVTKRenderWindowInteractor_h_ -- 2.47.1