Browse Source

Merge pull request #830 from commontk/support-qvtkopennativewidget-work-with-pythonqt

Support qvtkopennativewidget work with pythonqt
Jean-Christophe Fillion-Robin 6 years ago
parent
commit
a7987ef65a

+ 1 - 1
CMakeLists.txt

@@ -18,7 +18,7 @@
 #
 ###########################################################################
 
-cmake_minimum_required(VERSION 2.8.9)
+cmake_minimum_required(VERSION 3.0)
 
 foreach(p
   CMP0054 # CMake 3.1

+ 31 - 0
Libs/Visualization/VTK/Widgets/CMakeLists.txt

@@ -206,10 +206,33 @@ if(CTK_QT_VERSION VERSION_LESS "5"
   OR (NOT VTK_RENDERING_BACKEND STREQUAL "OpenGL2"))
   set(_use_qvtkopenglwidget 0)
 endif()
+
 if(_use_qvtkopenglwidget)
   add_definitions(-DCTK_USE_QVTKOPENGLWIDGET)
 endif()
 
+# Detect if QVTKOpenGLNativeWidget.h is available
+set(_has_QVTKOpenGLNativeWidget_h 0)
+if(_use_qvtkopenglwidget)
+  set(_msg "Checking if QVTKOpenGLNativeWidget.h exists")
+  message(STATUS "${_msg}")
+  foreach(include_dir IN ITEMS ${vtkGUISupportQt_INCLUDE_DIRS})
+    if(EXISTS "${include_dir}/QVTKOpenGLNativeWidget.h")
+      set(_has_QVTKOpenGLNativeWidget_h 1)
+      break()
+    endif()
+  endforeach()
+  if(_has_QVTKOpenGLNativeWidget_h)
+    message(STATUS "${_msg} - found")
+  else()
+    message(STATUS "${_msg} - not found")
+  endif()
+endif()
+
+if(_has_QVTKOpenGLNativeWidget_h)
+  add_definitions(-DCTK_HAS_QVTKOPENGLNATIVEWIDGET_H)
+endif()
+
 ctkMacroBuildLib(
   NAME ${PROJECT_NAME}
   EXPORT_DIRECTIVE ${KIT_export_directive}
@@ -229,6 +252,14 @@ if(_use_qvtkopenglwidget)
     )
 endif()
 
+if(_has_QVTKOpenGLNativeWidget_h)
+  target_compile_definitions(
+    ${PROJECT_NAME}
+    INTERFACE
+      CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+    )
+endif()
+
 if(CTK_WRAP_PYTHONQT_LIGHT)
   ctkMacroBuildLibWrapper(
     TARGET ${PROJECT_NAME}

+ 12 - 4
Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.cpp

@@ -48,7 +48,7 @@ int ctkVTKAbstractViewPrivate::MultiSamples = 0;  // Default for static var
 ctkVTKAbstractViewPrivate::ctkVTKAbstractViewPrivate(ctkVTKAbstractView& object)
   : q_ptr(&object)
 {
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
   this->RenderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
 #else
   this->RenderWindow = vtkSmartPointer<vtkRenderWindow>::New();
@@ -69,8 +69,12 @@ void ctkVTKAbstractViewPrivate::init()
 
   this->setParent(q);
 
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+  this->VTKWidget = new QVTKOpenGLNativeWidget;
+# else
   this->VTKWidget = new QVTKOpenGLWidget;
+# endif
   this->VTKWidget->setEnableHiDPI(true);
   QObject::connect(this->VTKWidget, SIGNAL(resized()),
                    q, SLOT(forceRender()));
@@ -296,8 +300,12 @@ vtkCornerAnnotation* ctkVTKAbstractView::cornerAnnotation() const
 }
 
 //----------------------------------------------------------------------------
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+QVTKOpenGLNativeWidget * ctkVTKAbstractView::VTKWidget() const
+# else
 QVTKOpenGLWidget * ctkVTKAbstractView::VTKWidget() const
+# endif
 #else
 QVTKWidget * ctkVTKAbstractView::VTKWidget() const
 #endif
@@ -480,7 +488,7 @@ void ctkVTKAbstractView::setUseDepthPeeling(bool useDepthPeeling)
     }
   this->renderWindow()->SetMultiSamples(useDepthPeeling ? 0 : nSamples);
   renderer->SetUseDepthPeeling(useDepthPeeling ? 1 : 0);
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
   renderer->SetUseDepthPeelingForVolumes(useDepthPeeling);
 #endif
 }

+ 11 - 3
Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.h

@@ -25,8 +25,12 @@
 #include <QWidget>
 
 // VTK includes
-#if CTK_USE_QVTKOPENGLWIDGET
-#include <QVTKOpenGLWidget.h>
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+#  include <QVTKOpenGLNativeWidget.h>
+# else
+#  include <QVTKOpenGLWidget.h>
+# endif
 #else
 #include <QVTKWidget.h>
 #endif
@@ -149,8 +153,12 @@ public:
   Q_INVOKABLE vtkCornerAnnotation* cornerAnnotation()const;
 
   /// Get the underlying QVTKWidget
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+  Q_INVOKABLE QVTKOpenGLNativeWidget * VTKWidget() const;
+# else
   Q_INVOKABLE QVTKOpenGLWidget * VTKWidget() const;
+# endif
 #else
   Q_INVOKABLE QVTKWidget * VTKWidget() const;
 #endif

+ 5 - 1
Libs/Visualization/VTK/Widgets/ctkVTKAbstractView_p.h

@@ -57,8 +57,12 @@ public:
   QList<vtkRenderer*> renderers()const;
   vtkRenderer* firstRenderer()const;
 
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+  QVTKOpenGLNativeWidget*                       VTKWidget;
+# else
   QVTKOpenGLWidget*                             VTKWidget;
+# endif
   vtkSmartPointer<vtkGenericOpenGLRenderWindow> RenderWindow;
 #else
   QVTKWidget*                                   VTKWidget;

+ 3 - 3
Libs/Visualization/VTK/Widgets/ctkVTKChartView.cpp

@@ -52,7 +52,7 @@ public:
   void init();
   void chartBounds(double* bounds)const;
 
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
   vtkSmartPointer<vtkGenericOpenGLRenderWindow> RenderWindow;
 #endif
   vtkSmartPointer<vtkContextView> ContextView;
@@ -69,7 +69,7 @@ ctkVTKChartViewPrivate::ctkVTKChartViewPrivate(ctkVTKChartView& object)
   :q_ptr(&object)
 {
   this->ContextView = vtkSmartPointer<vtkContextView>::New();
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
   this->RenderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
 #endif
   this->Chart = vtkSmartPointer<vtkChartXY>::New();
@@ -84,7 +84,7 @@ ctkVTKChartViewPrivate::ctkVTKChartViewPrivate(ctkVTKChartView& object)
 void ctkVTKChartViewPrivate::init()
 {
   Q_Q(ctkVTKChartView);
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
   q->SetRenderWindow(this->RenderWindow);
   this->ContextView->SetRenderWindow(this->RenderWindow);
 #endif

+ 16 - 4
Libs/Visualization/VTK/Widgets/ctkVTKChartView.h

@@ -27,8 +27,12 @@
 class ctkVTKChartViewPrivate;
 
 // VTK includes
-#if CTK_USE_QVTKOPENGLWIDGET
-#include <QVTKOpenGLWidget.h>
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+#  include <QVTKOpenGLNativeWidget.h>
+# else
+#  include <QVTKOpenGLWidget.h>
+# endif
 #else
 #include <QVTKWidget.h>
 #endif
@@ -38,8 +42,12 @@ class vtkContextScene;
 class vtkPlot;
 
 /// \ingroup Visualization_VTK_Widgets
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKChartView : public QVTKOpenGLNativeWidget
+# else
 class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKChartView : public QVTKOpenGLWidget
+# endif
 #else
 class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKChartView : public QVTKWidget
 #endif
@@ -49,8 +57,12 @@ class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKChartView : public QVTKWidget
   Q_PROPERTY(QString title READ title WRITE setTitle)
 
 public:
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+  typedef QVTKOpenGLNativeWidget Superclass;
+# else
   typedef QVTKOpenGLWidget Superclass;
+# endif
 #else
   typedef QVTKWidget Superclass;
 #endif

+ 17 - 5
Libs/Visualization/VTK/Widgets/ctkVTKDiscretizableColorTransferWidget.cpp

@@ -46,8 +46,12 @@
 #include <QWidgetAction>
 
 // VTK includes
-#if CTK_USE_QVTKOPENGLWIDGET
-#include <QVTKOpenGLWidget.h>
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+#  include <QVTKOpenGLNativeWidget.h>
+# else
+#  include <QVTKOpenGLWidget.h>
+# endif
 #else
 #include <QVTKWidget.h>
 #endif
@@ -93,8 +97,12 @@ public:
   bool popRangesFromHistory(double* currentRange, double* visibleRange);
   void clearUndoHistory();
 
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+  QVTKOpenGLNativeWidget* ScalarsToColorsView;
+# else
   QVTKOpenGLWidget* ScalarsToColorsView;
+# endif
 #else
   QVTKWidget* ScalarsToColorsView;
 #endif
@@ -160,8 +168,12 @@ void ctkVTKDiscretizableColorTransferWidgetPrivate::setupUi(QWidget* widget)
 
   this->Ui_ctkVTKDiscretizableColorTransferWidget::setupUi(widget);
 
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
+# ifdef CTK_HAS_QVTKOPENGLNATIVEWIDGET_H
+  this->ScalarsToColorsView = new QVTKOpenGLNativeWidget;
+# else
   this->ScalarsToColorsView = new QVTKOpenGLWidget;
+# endif
 #else
   this->ScalarsToColorsView = new QVTKWidget;
 #endif
@@ -173,7 +185,7 @@ void ctkVTKDiscretizableColorTransferWidgetPrivate::setupUi(QWidget* widget)
 
   this->scalarsToColorsContextView = vtkSmartPointer<vtkContextView> ::New();
 
-#if CTK_USE_QVTKOPENGLWIDGET
+#ifdef CTK_USE_QVTKOPENGLWIDGET
   vtkSmartPointer<vtkGenericOpenGLRenderWindow> renwin =
     vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
   this->ScalarsToColorsView->SetRenderWindow(renwin);