Browse Source

ENH: Add isEditable property to ctkTransferFunction

Julien Finet 15 years ago
parent
commit
8cfc6ddd02

+ 0 - 6
Libs/Core/ctkTransferFunction.cpp

@@ -51,9 +51,3 @@ ctkTransferFunction::~ctkTransferFunction()
   // this->ControlPoints->clear();
   // emit changed();
 }
-
-ctkBezierControlPoint*  ctkTransferFunction::toto()
-{
-  return new ctkBezierControlPoint();
-}
-

+ 1 - 1
Libs/Core/ctkTransferFunction.h

@@ -83,6 +83,7 @@ public:
   
   virtual int count()const = 0;
   virtual bool isDiscrete()const = 0;
+  virtual bool isEditable()const = 0;
 
   inline void range(qreal rangeValues[2])const;
   virtual void range(qreal& minRange, qreal& maxRange)const=0;
@@ -100,7 +101,6 @@ public:
   /// be careful with it, as changing the value might require
   /// more changes to ctkControlPoint.
   virtual void setControlPointValue(int index, const QVariant& value)=0;
-  virtual ctkBezierControlPoint* toto();
 signals:
   void changed();
 };

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

@@ -29,6 +29,7 @@
 #include <vtkColorTransferFunction.h>
 #include <vtkSmartPointer.h>
 
+//-----------------------------------------------------------------------------
 class ctkVTKColorTransferFunctionPrivate: public ctkPrivate<ctkVTKColorTransferFunction>
 {
 public:
@@ -75,6 +76,12 @@ bool ctkVTKColorTransferFunction::isDiscrete()const
 }
 
 //-----------------------------------------------------------------------------
+bool ctkVTKColorTransferFunction::isEditable()const
+{
+  return true;
+}
+
+//-----------------------------------------------------------------------------
 void ctkVTKColorTransferFunction::range(qreal& minRange, qreal& maxRange)const
 {
   CTK_D(const ctkVTKColorTransferFunction);

+ 1 - 0
Libs/Visualization/VTK/Core/ctkVTKColorTransferFunction.h

@@ -47,6 +47,7 @@ public:
   virtual QVariant value(qreal pos)const;
   virtual int count()const;
   virtual bool isDiscrete()const;
+  virtual bool isEditable()const;
 
   virtual void range(qreal& minRange, qreal& maxRange)const;
   virtual QVariant minValue()const;

+ 26 - 8
Libs/Visualization/VTK/Core/ctkVTKLookupTable.cpp

@@ -76,6 +76,12 @@ bool ctkVTKLookupTable::isDiscrete()const
 }
 
 //-----------------------------------------------------------------------------
+bool ctkVTKLookupTable::isEditable()const
+{
+  return true;
+}
+
+//-----------------------------------------------------------------------------
 void ctkVTKLookupTable::range(qreal& minRange, qreal& maxRange)const
 {
   CTK_D(const ctkVTKLookupTable);
@@ -127,12 +133,27 @@ QVariant ctkVTKLookupTable::maxValue()const
 }
 
 //-----------------------------------------------------------------------------
-ctkControlPoint* ctkVTKLookupTable::controlPoint(int index)const
+qreal ctkVTKLookupTable::indexToPos(int index)const
 {
   CTK_D(const ctkVTKLookupTable);
   double* range = d->LookupTable->GetRange();
+  return range[0] + index * ((range[1] - range[0]) / (d->LookupTable->GetNumberOfColors() - 1));
+}
+
+//-----------------------------------------------------------------------------
+int ctkVTKLookupTable::posToIndex(qreal pos)const
+{
+  CTK_D(const ctkVTKLookupTable);
+  double* range = d->LookupTable->GetRange();
+  return (pos - range[0]) / ((range[1] - range[0]) / (d->LookupTable->GetNumberOfColors() - 1));
+}
+
+//-----------------------------------------------------------------------------
+ctkControlPoint* ctkVTKLookupTable::controlPoint(int index)const
+{
+  CTK_D(const ctkVTKLookupTable);
   ctkControlPoint* cp = new ctkControlPoint();
-  cp->P.X = range[0] + index * (range[1] - range[0]) / (d->LookupTable->GetNumberOfColors() - 1);
+  cp->P.X = this->indexToPos(index);
   cp->P.Value = this->value(cp->P.X);
   return cp;
 }
@@ -141,13 +162,10 @@ ctkControlPoint* ctkVTKLookupTable::controlPoint(int index)const
 QVariant ctkVTKLookupTable::value(qreal pos)const
 {
   CTK_D(const ctkVTKLookupTable);
-  Q_ASSERT(d->LookupTable.GetPointer());
-  double rgb[3];
-  d->LookupTable->GetColor(pos, rgb);
-  double alpha = d->LookupTable->GetOpacity(pos);
-  return QColor::fromRgbF(rgb[0], rgb[1], rgb[2], alpha);;
+  QSharedPointer<ctkControlPoint> point = 
+    QSharedPointer<ctkControlPoint>(this->controlPoint(this->posToIndex(pos)));
+  return point->P.Value;
 }
-
 //-----------------------------------------------------------------------------
 int ctkVTKLookupTable::insertControlPoint(const ctkControlPoint& cp)
 {

+ 4 - 0
Libs/Visualization/VTK/Core/ctkVTKLookupTable.h

@@ -46,6 +46,7 @@ public:
   virtual QVariant value(qreal pos)const;
   virtual int count()const;
   virtual bool isDiscrete()const;
+  virtual bool isEditable()const;
 
   virtual void range(qreal& minRange, qreal& maxRange)const;
   virtual QVariant minValue()const;
@@ -59,6 +60,9 @@ public:
 
   void setLookupTable(vtkLookupTable* lookupTable);
   vtkLookupTable* lookupTable()const;
+protected:
+  qreal indexToPos(int index)const;
+  int posToIndex(qreal pos)const;
 private:
   CTK_DECLARE_PRIVATE(ctkVTKLookupTable);
 };

+ 10 - 10
Libs/Visualization/VTK/Core/ctkVTKPiecewiseFunction.cpp

@@ -68,6 +68,12 @@ bool ctkVTKPiecewiseFunction::isDiscrete()const
 }
 
 //-----------------------------------------------------------------------------
+bool ctkVTKPiecewiseFunction::isEditable()const
+{
+  return true;
+}
+
+//-----------------------------------------------------------------------------
 void ctkVTKPiecewiseFunction::range(qreal& minRange, qreal& maxRange)const
 {
   CTK_D(const ctkVTKPiecewiseFunction);
@@ -95,15 +101,12 @@ QVariant ctkVTKPiecewiseFunction::minValue()const
     }
   //Initialize to max value
   /// TODO initialize with max value
-  double minValue = 9999.99;
+  double minValue = VTK_DOUBLE_MAX;
   for (int i = 0; i < this->count(); ++i)
     {
     double value[4];
     d->PiecewiseFunction->GetNodeValue(i, value);
-    if ( value[1] < minValue)
-      {
-      minValue = value[1];
-      }
+    minValue = qMin(value[1], minValue);
     }
   return minValue;
 }
@@ -119,15 +122,12 @@ QVariant ctkVTKPiecewiseFunction::maxValue()const
     }
   //Initialize to max value
   /// TODO initialize with max value
-  qreal maxValue = 0.;
+  qreal maxValue = VTK_DOUBLE_MIN;
   for (int i = 0; i < this->count(); ++i)
     {
     double value[4];
     d->PiecewiseFunction->GetNodeValue(i, value);
-    if ( maxValue < value[1])
-      {
-      maxValue = value[1];
-      }
+    maxValue = qMax(maxValue, value[1]);
     }
   return maxValue;
 }

+ 1 - 0
Libs/Visualization/VTK/Core/ctkVTKPiecewiseFunction.h

@@ -46,6 +46,7 @@ public:
   virtual QVariant value(qreal pos)const;
   virtual int count()const;
   virtual bool isDiscrete()const;
+  virtual bool isEditable()const;
 
   virtual void range(qreal& minRange, qreal& maxRange)const;
   virtual QVariant minValue()const;