Browse Source

Merge branch 'ctkVTKScalarsToColorsWidget-crash-on-current-point'

* ctkVTKScalarsToColorsWidget-crash-on-current-point:
  Avoid assert when vtkControlPoints current point is changed
Julien Finet 13 years ago
parent
commit
8c018b81f4

+ 11 - 3
Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsWidget.cpp

@@ -281,7 +281,7 @@ void ctkVTKScalarsToColorsWidget::setCurrentPoint(vtkObject* caller, void* callD
     // When a new point is added, the modified event is fired later.
     // When a new point is added, the modified event is fired later.
     // however we need to update the max of the current spin box before
     // however we need to update the max of the current spin box before
     // setting the new value.
     // setting the new value.
-    this->updateCurrentPoint();
+    this->updateNumberOfPoints();
     }
     }
   this->setCurrentPoint(newPoint);
   this->setCurrentPoint(newPoint);
 }
 }
@@ -363,13 +363,21 @@ void ctkVTKScalarsToColorsWidget::onCurrentPointChanged(int currentPoint)
 }
 }
 
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
+void ctkVTKScalarsToColorsWidget::updateNumberOfPoints()
+{
+  Q_D(ctkVTKScalarsToColorsWidget);
+  const int numberOfPoints = d->CurrentControlPointsItem ?
+    d->CurrentControlPointsItem->GetNumberOfPoints() : 0;
+  d->PointIdSpinBox->setMaximum( numberOfPoints - 1 );
+}
+
+// ----------------------------------------------------------------------------
 void ctkVTKScalarsToColorsWidget::updateCurrentPoint()
 void ctkVTKScalarsToColorsWidget::updateCurrentPoint()
 {
 {
   Q_D(ctkVTKScalarsToColorsWidget);
   Q_D(ctkVTKScalarsToColorsWidget);
   Q_ASSERT(d->CurrentControlPointsItem);
   Q_ASSERT(d->CurrentControlPointsItem);
   Q_ASSERT(d->PointIdSpinBox->value() == d->CurrentControlPointsItem->GetCurrentPoint());
   Q_ASSERT(d->PointIdSpinBox->value() == d->CurrentControlPointsItem->GetCurrentPoint());
-  d->PointIdSpinBox->setMaximum((d->CurrentControlPointsItem ?
-                                 d->CurrentControlPointsItem->GetNumberOfPoints() : 0) - 1);
+  this->updateNumberOfPoints();
 
 
   int pointId = d->PointIdSpinBox->value();
   int pointId = d->PointIdSpinBox->value();
   if (pointId == -1)
   if (pointId == -1)

+ 1 - 0
Libs/Visualization/VTK/Widgets/ctkVTKScalarsToColorsWidget.h

@@ -85,6 +85,7 @@ protected Q_SLOTS:
   void onPlotAdded(vtkPlot*);
   void onPlotAdded(vtkPlot*);
   void onBoundsChanged();
   void onBoundsChanged();
   void setCurrentPoint(vtkObject* controlPointsItem, void* pointId);
   void setCurrentPoint(vtkObject* controlPointsItem, void* pointId);
+  void updateNumberOfPoints();
   void updateCurrentPoint();
   void updateCurrentPoint();
   void onCurrentPointChanged(int pointId);
   void onCurrentPointChanged(int pointId);
   void onColorChanged(const QColor& color);
   void onColorChanged(const QColor& color);