소스 검색

Merge pull request #762 from finetjul/fix-discretizable-transfer-function-widget

Fix discretizable transfer function widget
Julien Finet 7 년 전
부모
커밋
91f7f74c9c

+ 7 - 0
Libs/Visualization/VTK/Core/vtkDiscretizableColorTransferChart.cpp

@@ -454,6 +454,13 @@ double* vtkDiscretizableColorTransferChart::GetCurrentRange()
 void vtkDiscretizableColorTransferChart::CenterRange(double center)
 void vtkDiscretizableColorTransferChart::CenterRange(double center)
 {
 {
   double width = this->CurrentRange[1] - this->CurrentRange[0];
   double width = this->CurrentRange[1] - this->CurrentRange[0];
+  double limitRange[2];
+  limitRange[0] = std::min(this->OriginalRange[0], this->DataRange[0]);
+  limitRange[1] = std::max(this->OriginalRange[1], this->DataRange[1]);
+  double limitWidth = 2.0 * std::min(center - limitRange[0], limitRange[1] - center);
+
+  width = width < limitWidth ? width : limitWidth;
+
   double newMin = center - width / 2;
   double newMin = center - width / 2;
   double newMax = newMin + width;
   double newMax = newMin + width;
 
 

+ 9 - 3
Libs/Visualization/VTK/Widgets/ctkVTKDiscretizableColorTransferWidget.cpp

@@ -260,6 +260,9 @@ void
 ctkVTKDiscretizableColorTransferWidgetPrivate::colorTransferFunctionModifiedCallback(
 ctkVTKDiscretizableColorTransferWidgetPrivate::colorTransferFunctionModifiedCallback(
   vtkObject *caller, unsigned long eid, void *clientdata, void *calldata)
   vtkObject *caller, unsigned long eid, void *clientdata, void *calldata)
 {
 {
+  Q_UNUSED(caller);
+  Q_UNUSED(eid);
+  Q_UNUSED(calldata);
   ctkVTKDiscretizableColorTransferWidgetPrivate* self =
   ctkVTKDiscretizableColorTransferWidgetPrivate* self =
     reinterpret_cast<ctkVTKDiscretizableColorTransferWidgetPrivate*>(
     reinterpret_cast<ctkVTKDiscretizableColorTransferWidgetPrivate*>(
       clientdata);
       clientdata);
@@ -514,7 +517,11 @@ void ctkVTKDiscretizableColorTransferWidget::setColorTransferFunctionRange(
   double minValue, double maxValue)
   double minValue, double maxValue)
 {
 {
   Q_D(ctkVTKDiscretizableColorTransferWidget);
   Q_D(ctkVTKDiscretizableColorTransferWidget);
-
+  if (minValue == d->scalarsToColorsContextItem->GetCurrentRange()[0] &&
+      maxValue == d->scalarsToColorsContextItem->GetCurrentRange()[1])
+  {
+    return;
+  }
   d->scalarsToColorsContextItem->SetCurrentRange(minValue, maxValue);
   d->scalarsToColorsContextItem->SetCurrentRange(minValue, maxValue);
 }
 }
 
 
@@ -544,8 +551,7 @@ void ctkVTKDiscretizableColorTransferWidget::resetColorTransferFunctionRange()
   Q_D(ctkVTKDiscretizableColorTransferWidget);
   Q_D(ctkVTKDiscretizableColorTransferWidget);
   if (d->dataRange[0] <= d->dataRange[1])
   if (d->dataRange[0] <= d->dataRange[1])
   {
   {
-    d->scalarsToColorsContextItem->SetCurrentRange(
-      d->dataRange[0], d->dataRange[1]);
+    setColorTransferFunctionRange(d->dataRange[0], d->dataRange[1]);
   }
   }
 }
 }
 
 

+ 4 - 0
Libs/Widgets/ctkRangeSlider.cpp

@@ -625,12 +625,16 @@ void ctkRangeSlider::paintEvent( QPaintEvent* )
   //
   //
   if (this->isMinimumSliderDown())
   if (this->isMinimumSliderDown())
     {
     {
+    painter.setClipRect(ur);
     d->drawMaximumSlider( &painter );
     d->drawMaximumSlider( &painter );
+    painter.setClipRect(lr);
     d->drawMinimumSlider( &painter );
     d->drawMinimumSlider( &painter );
     }
     }
   else
   else
     {
     {
+    painter.setClipRect(lr);
     d->drawMinimumSlider( &painter );
     d->drawMinimumSlider( &painter );
+    painter.setClipRect(ur);
     d->drawMaximumSlider( &painter );
     d->drawMaximumSlider( &painter );
     }
     }
 }
 }