Browse Source

ENH: ctkTransferFunction: Don't do subpoints when the sharpness is 0 (->linear)

Julien Finet 15 years ago
parent
commit
aaba5d8aea

+ 11 - 0
Libs/Visualization/VTK/Core/ctkVTKColorTransferFunction.cpp

@@ -177,6 +177,11 @@ ctkControlPoint* ctkVTKColorTransferFunction::controlPoint(int index)const
   ctkNonLinearControlPoint* cp = new ctkNonLinearControlPoint();
   cp->P.X = values[0];
   cp->P.Value = rgb;
+  // Optimization: don't use SubPoints when the sharpness is 0.
+  if (values[5] == 0.)
+    {
+    cp->SubPoints << ctkPoint(values[0], rgb);
+    } 
   d->ColorTransferFunction->GetNodeValue(index + 1, values);
   Q_ASSERT(values[0] >= d->ColorTransferFunction->GetRange()[0] &&
            values[0] <= d->ColorTransferFunction->GetRange()[1] &&
@@ -185,6 +190,12 @@ ctkControlPoint* ctkVTKColorTransferFunction::controlPoint(int index)const
            values[3] >= 0. && values[3] <= 1. &&  // Blue
            values[4] >= 0. && values[4] <= 1. &&  // MidPoint
            values[5] >= 0. && values[5] <= 1.);   // Sharpness
+  // Optimization: don't use SubPoints when the sharpness is 0.
+  if (values[5] == 0.)
+    {
+    cp->SubPoints << ctkPoint(values[0], rgb);
+    return cp;
+    } 
   double subPoints[30];
   d->ColorTransferFunction->GetTable(cp->x(), values[0], 10, subPoints);
   qreal interval = (values[0] - cp->x()) / 9.;

+ 11 - 2
Libs/Visualization/VTK/Core/ctkVTKPiecewiseFunction.cpp

@@ -163,14 +163,23 @@ ctkControlPoint* ctkVTKPiecewiseFunction::controlPoint(int index)const
   ctkNonLinearControlPoint* cp = new ctkNonLinearControlPoint();
   cp->P.X = values[0];
   cp->P.Value = values[1];
+  // Optimization: don't use Subpoints if sharpness == 0
+  if (values[3] == 0.)
+    {
+    cp->SubPoints << ctkPoint(values[0], values[1]);
+    } 
   d->PiecewiseFunction->GetNodeValue(index + 1, values);
 
-
   Q_ASSERT(values[0] >= range[0] && values[0] <= range[1]  &&  // X
            values[1] >= rangeY[0].toDouble() && values[1] <= rangeY[1].toDouble()  &&  // Y
            values[2] >= 0. && values[2] <= 1. &&                // Midpoint
            values[3] >= 0. && values[3] <= 1. );                // Sharpness
-
+  // Optimization: Don't use Subpoints if sharpness == 0
+  if (values[3] == 0.)
+    {
+    cp->SubPoints << ctkPoint(values[0], values[1]);
+    return cp;
+    }
   double subPoints[100];
   d->PiecewiseFunction->GetTable(cp->x(), values[0], 100, subPoints);
   qreal interval = (values[0] - cp->x()) / 99.;