Parcourir la source

Add ctkVTKAbstractView::useDepthPeeling

Julien Finet il y a 11 ans
Parent
commit
a428ac7a7c

+ 24 - 0
Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.cpp

@@ -29,6 +29,7 @@
 #include "ctkLogger.h"
 
 // VTK includes
+#include <vtkOpenGLRenderWindow.h>
 #include <vtkRendererCollection.h>
 #include <vtkRenderWindowInteractor.h>
 #include <vtkTextProperty.h>
@@ -434,3 +435,26 @@ void ctkVTKAbstractView::updateFPS()
   d->FPS = 0;
   d->CornerAnnotation->SetText(1, fpsString.toLatin1());
 }
+
+//----------------------------------------------------------------------------
+bool ctkVTKAbstractView::useDepthPeeling()const
+{
+  Q_D(const ctkVTKAbstractView);
+  vtkRenderer* renderer = d->firstRenderer();
+  return renderer ? static_cast<bool>(renderer->GetUseDepthPeeling()):0;
+}
+
+//----------------------------------------------------------------------------
+void ctkVTKAbstractView::setUseDepthPeeling(bool use)
+{
+  Q_D(ctkVTKAbstractView);
+  vtkRenderer* renderer = d->firstRenderer();
+  if (!renderer)
+    {
+    return;
+    }
+  this->renderWindow()->SetAlphaBitPlanes( use ? 1 : 0);
+  this->renderWindow()->SetMultiSamples(
+    use ? 0 : vtkOpenGLRenderWindow::GetGlobalMaximumNumberOfMultiSamples());
+  renderer->SetUseDepthPeeling(use ? 1 : 0);
+}

+ 13 - 1
Libs/Visualization/VTK/Widgets/ctkVTKAbstractView.h

@@ -48,9 +48,13 @@ class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKAbstractView : public QWidget
   Q_PROPERTY(bool gradientBackground READ gradientBackground WRITE setGradientBackground)
   Q_PROPERTY(bool renderEnabled READ renderEnabled WRITE setRenderEnabled)
   /// This property controls whether a corner annotation is visible with the
-  /// last FPS value.
+  /// last frames per second (FPS) value.
   /// false by default.
   Q_PROPERTY(bool fpsVisible READ isFPSVisible WRITE setFPSVisible)
+  /// This property controls whether the render window uses depth peeling or
+  /// not.
+  /// false by default.
+  Q_PROPERTY(bool useDepthPeeling READ useDepthPeeling WRITE setUseDepthPeeling)
 public:
 
   typedef QWidget Superclass;
@@ -89,6 +93,10 @@ public Q_SLOTS:
   /// Show/Hide the FPS annotation
   void setFPSVisible(bool show);
 
+  /// Set the useDepthPeeling property value.
+  /// \sa useDepthPeeling
+  void setUseDepthPeeling(bool use);
+
 public:
   /// Get underlying RenderWindow
   Q_INVOKABLE vtkRenderWindow* renderWindow()const;
@@ -129,6 +137,10 @@ public:
   /// Return the current FPS
   double fps()const;
 
+  /// Return the useDepthPeeling property value.
+  /// \sa useDepthPeeling
+  bool useDepthPeeling()const;
+
   virtual QSize minimumSizeHint()const;
   virtual QSize sizeHint()const;
   virtual bool hasHeightForWidth()const;