Browse Source

Transfer functions points spread over a [-inf, inf] range

Julien Finet 13 years ago
parent
commit
bbe47dc38e

+ 31 - 2
Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsView.cpp

@@ -56,6 +56,8 @@ public:
   void init();
   void updateBounds();
   void showBorders(bool);
+
+  double ValidBounds[4];
 };
 
 // ----------------------------------------------------------------------------
@@ -65,6 +67,8 @@ public:
 ctkVTKScalarsToColorsViewPrivate::ctkVTKScalarsToColorsViewPrivate(ctkVTKScalarsToColorsView& object)
   :q_ptr(&object)
 {
+  this->ValidBounds[0] = this->ValidBounds[2] = 0.;
+  this->ValidBounds[1] = this->ValidBounds[3] = -1.;
 }
 
 // ----------------------------------------------------------------------------
@@ -222,9 +226,11 @@ vtkPlot* ctkVTKScalarsToColorsView
 vtkPlot* ctkVTKScalarsToColorsView
 ::addColorTransferFunctionControlPoints(vtkColorTransferFunction* colorTF)
 {
+  Q_D(ctkVTKScalarsToColorsView);
   vtkSmartPointer<vtkColorTransferControlPointsItem> controlPointsItem =
     vtkSmartPointer<vtkColorTransferControlPointsItem>::New();
   controlPointsItem->SetColorTransferFunction(colorTF);
+  controlPointsItem->SetValidBounds(d->ValidBounds);
   this->addPlot(controlPointsItem);
   return controlPointsItem;
 }
@@ -241,10 +247,12 @@ vtkPlot* ctkVTKScalarsToColorsView
 ::addCompositeFunctionControlPoints(vtkColorTransferFunction* colorTF,
                                     vtkPiecewiseFunction* opacityTF)
 {
+  Q_D(ctkVTKScalarsToColorsView);
   vtkSmartPointer<vtkCompositeControlPointsItem> controlPointsItem =
     vtkSmartPointer<vtkCompositeControlPointsItem>::New();
   controlPointsItem->SetColorTransferFunction(colorTF);
   controlPointsItem->SetOpacityFunction(opacityTF);
+  controlPointsItem->SetValidBounds(d->ValidBounds);
   this->addPlot(controlPointsItem);
   return controlPointsItem;
 }
@@ -253,9 +261,11 @@ vtkPlot* ctkVTKScalarsToColorsView
 vtkPlot* ctkVTKScalarsToColorsView
 ::addPiecewiseFunctionControlPoints(vtkPiecewiseFunction* piecewiseTF)
 {
+  Q_D(ctkVTKScalarsToColorsView);
   vtkSmartPointer<vtkPiecewiseControlPointsItem> controlPointsItem =
     vtkSmartPointer<vtkPiecewiseControlPointsItem>::New();
   controlPointsItem->SetPiecewiseFunction(piecewiseTF);
+  controlPointsItem->SetValidBounds(d->ValidBounds);
   this->addPlot(controlPointsItem);
   return controlPointsItem;
 }
@@ -495,6 +505,26 @@ void ctkVTKScalarsToColorsView
 
 // ----------------------------------------------------------------------------
 void ctkVTKScalarsToColorsView
+::validBounds(double* bounds)const
+{
+  Q_D(const ctkVTKScalarsToColorsView);
+  memcpy(bounds, d->ValidBounds, 4 * sizeof(double));
+}
+
+// ----------------------------------------------------------------------------
+void ctkVTKScalarsToColorsView
+::setValidBounds(double* bounds)
+{
+  Q_D(ctkVTKScalarsToColorsView);
+  foreach(vtkControlPointsItem* plot, this->controlPointsItems())
+    {
+    plot->SetValidBounds(bounds);
+    }
+  memcpy(d->ValidBounds, bounds, 4 * sizeof(double));
+}
+
+// ----------------------------------------------------------------------------
+void ctkVTKScalarsToColorsView
 ::setPlotsUserBounds(double* bounds)
 {
   double plotBounds[4];
@@ -504,8 +534,7 @@ void ctkVTKScalarsToColorsView
     {
     plot->SetUserBounds(plotBounds);
     }
-  foreach(vtkControlPointsItem* plot,
-          this->plots<vtkControlPointsItem>())
+  foreach(vtkControlPointsItem* plot, this->controlPointsItems())
     {
     plot->SetUserBounds(plotBounds);
     }

+ 4 - 0
Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsView.h

@@ -43,6 +43,7 @@ class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKScalarsToColorsView
   /// Add an empty space around the view to give space to the corner control
   /// points. False by default
   Q_PROPERTY(bool bordersVisible READ areBordersVisible WRITE setBordersVisible)
+
 public:
   typedef ctkVTKChartView Superclass;
   ctkVTKScalarsToColorsView(QWidget* parent = 0);
@@ -84,6 +85,9 @@ public:
   bool areBordersVisible()const;
   void setBordersVisible(bool show);
 
+  void validBounds(double bounds[4])const;
+  void setValidBounds(double bounds[4]);
+
   void setPlotsUserBounds(double* bounds);
 
   /// Reimplemented to set the bounds to the plots as well

+ 5 - 0
Libs/Visualization/VTK/Widgets/ctkVTKVolumePropertyWidget.cpp

@@ -82,6 +82,11 @@ void ctkVTKVolumePropertyWidgetPrivate::setupUi(QWidget* widget)
   Q_ASSERT(q == widget);
   this->Ui_ctkVTKVolumePropertyWidget::setupUi(widget);
 
+  double validBounds[4] = {VTK_DOUBLE_MIN, VTK_DOUBLE_MAX, 0., 1.};
+  this->ScalarOpacityWidget->view()->setValidBounds(validBounds);
+  this->ScalarColorWidget->view()->setValidBounds(validBounds);
+  this->GradientWidget->view()->setValidBounds(validBounds);
+
   this->ScalarOpacityWidget->view()->addCompositeFunction(0, 0, true, true);
   vtkCompositeControlPointsItem* composite = 
   vtkCompositeControlPointsItem::SafeDownCast(