From 4aad4d9ffd3efbcb18bfdb28f8832cf776c41b2c Mon Sep 17 00:00:00 2001 From: Pat Marion Date: Sun, 11 Jun 2017 18:42:56 -0700 Subject: [PATCH] work in progress to integrate QVTKOpenGLWidget from VTK 8 --- distro/superbuild/cmake/externals.cmake | 4 +- src/app/CMakeLists.txt | 11 +++++ src/app/ddQVTKWidgetView.cpp | 59 +++++++++++++++---------- src/app/ddQVTKWidgetView.h | 9 +++- src/app/drakeVisualizerApp.cpp | 15 ++++++- src/app/wrapped_methods.txt | 1 - 6 files changed, 70 insertions(+), 29 deletions(-) diff --git a/distro/superbuild/cmake/externals.cmake b/distro/superbuild/cmake/externals.cmake index f45688007..9e21a1e44 100644 --- a/distro/superbuild/cmake/externals.cmake +++ b/distro/superbuild/cmake/externals.cmake @@ -367,7 +367,7 @@ else() ExternalProject_Add(vtk GIT_REPOSITORY git://vtk.org/VTK.git - GIT_TAG v7.1.1 + GIT_TAG 28deb5620e56f535fc92ff8c73ef00f54923839b CMAKE_CACHE_ARGS ${default_cmake_args} ${python_args} @@ -375,7 +375,7 @@ else() -DBUILD_SHARED_LIBS:BOOL=ON -DBUILD_TESTING:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF - -DVTK_RENDERING_BACKEND:STRING=OpenGL + -DVTK_RENDERING_BACKEND:STRING=OpenGL2 -DVTK_QT_VERSION:STRING=${DD_QT_VERSION} -DVTK_PYTHON_VERSION=2 -DModule_vtkGUISupportQt:BOOL=ON diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 62a831675..d32c55b8f 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -34,8 +34,19 @@ include_directories(${PYTHON_INCLUDE_DIRS}) set(decorator_file ${CMAKE_CURRENT_BINARY_DIR}/ddPythonQtDecorators.h) +if(DD_QT_VERSION EQUAL 4) + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/wrapped_methods_qvtk.txt + "QVTKWidget* ddQVTKWidgetView::vtkWidget() const;" + ) +else() + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/wrapped_methods_qvtk.txt + "QVTKOpenGLWidget* ddQVTKWidgetView::vtkWidget() const;" + ) +endif() + set(wrap_files wrapped_methods.txt + ${CMAKE_CURRENT_BINARY_DIR}/wrapped_methods_qvtk.txt ) qt_wrap_cpp(moc_srcs diff --git a/src/app/ddQVTKWidgetView.cpp b/src/app/ddQVTKWidgetView.cpp index c1cc69225..345a6c4e1 100644 --- a/src/app/ddQVTKWidgetView.cpp +++ b/src/app/ddQVTKWidgetView.cpp @@ -1,33 +1,39 @@ #include "ddQVTKWidgetView.h" #include "ddFPSCounter.h" -#include "vtkTDxInteractorStyleCallback.h" #include "vtkSimpleActorInteractor.h" +#include "vtkTDxInteractorStyleCallback.h" +#include +#include #include -#include -#include -#include +#include +#include +#include +#include #include +#include +#include #include -#include #include +#include #include -#include -#include -#include #include -#include -#include +#include +#include #include -#include -#include -#include +#include +#include #include -#include -#include #include +#include + +#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) + #include +#else + #include +#endif //----------------------------------------------------------------------------- class vtkCustomRubberBandStyle : public vtkInteractorStyleRubberBand3D @@ -43,7 +49,7 @@ class vtkCustomRubberBandStyle : public vtkInteractorStyleRubberBand3D { this->Interaction = ZOOMING; this->FindPokedRenderer( - this->Interactor->GetEventPosition()[0], + this->Interactor->GetEventPosition()[0], this->Interactor->GetEventPosition()[1]); this->InvokeEvent(vtkCommand::StartInteractionEvent); } @@ -69,7 +75,7 @@ class ddQVTKWidgetView::ddInternal this->RenderTimer.setInterval(1000/timerFramesPerSeconds); } - QVTKWidget* VTKWidget; + QVTKOpenGLWidget* VTKWidget; vtkSmartPointer Renderer; vtkSmartPointer RendererBase; @@ -98,25 +104,32 @@ ddQVTKWidgetView::ddQVTKWidgetView(QWidget* parent) : ddViewBase(parent) QVBoxLayout* layout = new QVBoxLayout(this); layout->setMargin(0); - this->Internal->VTKWidget = new QVTKWidget; + this->Internal->VTKWidget = new QVTKOpenGLWidget; layout->addWidget(this->Internal->VTKWidget); +#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) + this->Internal->RenderWindow = + vtkSmartPointer::New(); +#else this->Internal->VTKWidget->SetUseTDx(true); - this->Internal->RenderWindow = vtkSmartPointer::New(); + this->Internal->VTKWidget->SetRenderWindow(this->Internal->RenderWindow); +#endif + this->Internal->VTKWidget->SetRenderWindow(this->Internal->RenderWindow); this->Internal->RenderWindow->SetMultiSamples(8); this->Internal->RenderWindow->StereoCapableWindowOn(); this->Internal->RenderWindow->SetStereoTypeToRedBlue(); this->Internal->RenderWindow->StereoRenderOff(); this->Internal->RenderWindow->StereoUpdate(); - this->Internal->VTKWidget->SetRenderWindow(this->Internal->RenderWindow); this->Internal->LightKit = vtkSmartPointer::New(); this->Internal->LightKit->SetKeyLightWarmth(0.5); this->Internal->LightKit->SetFillLightWarmth(0.5); - this->Internal->TDxInteractor = vtkSmartPointer::New(); - vtkInteractorStyle::SafeDownCast(this->Internal->RenderWindow->GetInteractor()->GetInteractorStyle())->SetTDxStyle(this->Internal->TDxInteractor); + this->Internal->TDxInteractor = + vtkSmartPointer::New(); + vtkInteractorStyle::SafeDownCast(this->Internal->RenderWindow->GetInteractor( + )->GetInteractorStyle())->SetTDxStyle(this->Internal->TDxInteractor); //this->Internal->RenderWindow->SetNumberOfLayers(2); @@ -192,7 +205,7 @@ vtkLightKit* ddQVTKWidgetView::lightKit() const } //----------------------------------------------------------------------------- -QVTKWidget* ddQVTKWidgetView::vtkWidget() const +QVTKOpenGLWidget* ddQVTKWidgetView::vtkWidget() const { return this->Internal->VTKWidget; } diff --git a/src/app/ddQVTKWidgetView.h b/src/app/ddQVTKWidgetView.h index d3da6642c..38fceadbf 100644 --- a/src/app/ddQVTKWidgetView.h +++ b/src/app/ddQVTKWidgetView.h @@ -10,7 +10,12 @@ class vtkOrientationMarkerWidget; class vtkRenderer; class vtkRenderWindow; class vtkLightKit; -class QVTKWidget; +#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) + class QVTKOpenGLWidget; +#else + class QVTKWidget; + using QVTKOpenGLWidget = QVTKWidget; +#endif class DD_APP_EXPORT ddQVTKWidgetView : public ddViewBase { @@ -29,7 +34,7 @@ class DD_APP_EXPORT ddQVTKWidgetView : public ddViewBase QList lastTDxMotion() const; - QVTKWidget* vtkWidget() const; + QVTKOpenGLWidget* vtkWidget() const; vtkOrientationMarkerWidget* orientationMarkerWidget() const; void installImageInteractor(); diff --git a/src/app/drakeVisualizerApp.cpp b/src/app/drakeVisualizerApp.cpp index ede7d8074..31d3888f1 100644 --- a/src/app/drakeVisualizerApp.cpp +++ b/src/app/drakeVisualizerApp.cpp @@ -1,9 +1,22 @@ -#include +// Qt includes #include + +// director includes +#include #include "ddPythonManager.h" +// VTK includes +#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) + #include + #include +#endif + int main(int argc, char **argv) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0) + // Set the default surface format for the OpenGL view + QSurfaceFormat::setDefaultFormat(QVTKOpenGLWidget::defaultFormat()); +#endif QApplication app(argc, argv); ddPythonManager* pythonManager = new ddPythonManager; pythonManager->setSysArgv(QApplication::instance()->arguments()); diff --git a/src/app/wrapped_methods.txt b/src/app/wrapped_methods.txt index 5a12057bd..925ce4bfd 100644 --- a/src/app/wrapped_methods.txt +++ b/src/app/wrapped_methods.txt @@ -9,7 +9,6 @@ vtkRenderWindow* ddQVTKWidgetView::renderWindow() const; vtkRenderer* ddQVTKWidgetView::renderer() const; vtkRenderer* ddQVTKWidgetView::backgroundRenderer() const; vtkLightKit* ddQVTKWidgetView::lightKit() const; -QVTKWidget* ddQVTKWidgetView::vtkWidget() const; vtkOrientationMarkerWidget* ddQVTKWidgetView::orientationMarkerWidget() const; QList ddQVTKWidgetView::lastTDxMotion() const; void ddQVTKWidgetView::installImageInteractor();