Procházet zdrojové kódy

ENH: in ctkTransferFunctionWidget, remove points implemented for piecewise and color transfer function (no multiple selection)

Nicolas Rannou před 15 roky
rodič
revize
7faa94db5a

+ 2 - 0
Libs/Core/ctkTransferFunction.h

@@ -94,6 +94,8 @@ public:
   virtual int insertControlPoint(const ctkControlPoint& cp) = 0;
   virtual int insertControlPoint(const ctkControlPoint& cp) = 0;
   virtual int insertControlPoint(qreal pos) = 0;
   virtual int insertControlPoint(qreal pos) = 0;
 
 
+  virtual void removeControlPoint( qreal pos ) = 0;
+
   /// 
   /// 
   /// be careful with it, as changing the value might require
   /// be careful with it, as changing the value might require
   /// more changes to ctkControlPoint.
   /// more changes to ctkControlPoint.

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

@@ -304,3 +304,10 @@ vtkColorTransferFunction* ctkVTKColorTransferFunction::colorTransferFunction()co
   CTK_D(const ctkVTKColorTransferFunction);
   CTK_D(const ctkVTKColorTransferFunction);
   return d->ColorTransferFunction;
   return d->ColorTransferFunction;
 }
 }
+
+//-----------------------------------------------------------------------------
+void ctkVTKColorTransferFunction::removeControlPoint( qreal pos )
+{
+  CTK_D(ctkVTKColorTransferFunction);
+  d->ColorTransferFunction->RemovePoint( pos );
+}

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

@@ -59,6 +59,8 @@ public:
   virtual void setControlPointPos(int index, qreal pos);
   virtual void setControlPointPos(int index, qreal pos);
   virtual void setControlPointValue(int index, const QVariant& value);
   virtual void setControlPointValue(int index, const QVariant& value);
   
   
+  virtual void removeControlPoint( qreal pos );
+
   void setColorTransferFunction(vtkColorTransferFunction* colorTransferFunction);
   void setColorTransferFunction(vtkColorTransferFunction* colorTransferFunction);
   vtkColorTransferFunction* colorTransferFunction()const;
   vtkColorTransferFunction* colorTransferFunction()const;
 private:
 private:

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

@@ -387,9 +387,16 @@ vtkPiecewiseFunction* ctkVTKCompositeFunction::piecewiseFunction()const
   CTK_D(const ctkVTKCompositeFunction);
   CTK_D(const ctkVTKCompositeFunction);
   return d->PiecewiseFunction;
   return d->PiecewiseFunction;
 }
 }
+
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 vtkColorTransferFunction* ctkVTKCompositeFunction::colorTransferFunction()const
 vtkColorTransferFunction* ctkVTKCompositeFunction::colorTransferFunction()const
 {
 {
   CTK_D(const ctkVTKCompositeFunction);
   CTK_D(const ctkVTKCompositeFunction);
   return d->ColorTransferFunction;
   return d->ColorTransferFunction;
 }
 }
+
+//-----------------------------------------------------------------------------
+void ctkVTKCompositeFunction::removeControlPoint( qreal pos )
+{
+  // TO BE IMPLEMENTED
+}

+ 2 - 0
Libs/Visualization/VTK/Core/ctkVTKCompositeFunction.h

@@ -62,6 +62,8 @@ public:
   virtual void setControlPointPos(int index, qreal pos);
   virtual void setControlPointPos(int index, qreal pos);
   virtual void setControlPointValue(int index, const QVariant& value);
   virtual void setControlPointValue(int index, const QVariant& value);
 
 
+  virtual void removeControlPoint( qreal pos );
+
   void setPiecewiseFunction(vtkPiecewiseFunction* piecewiseFunction);
   void setPiecewiseFunction(vtkPiecewiseFunction* piecewiseFunction);
   void setColorTransferFunction(vtkColorTransferFunction* colorTansferFunction);
   void setColorTransferFunction(vtkColorTransferFunction* colorTansferFunction);
 
 

+ 6 - 0
Libs/Visualization/VTK/Core/ctkVTKHistogram.cpp

@@ -336,3 +336,9 @@ void ctkVTKHistogram::build()
     }
     }
   emit changed();
   emit changed();
 }
 }
+
+//-----------------------------------------------------------------------------
+void ctkVTKHistogram::removeControlPoint( qreal pos )
+{
+  // TO BE IMPLEMENTED
+}

+ 2 - 0
Libs/Visualization/VTK/Core/ctkVTKHistogram.h

@@ -58,6 +58,8 @@ public:
 
 
   void setNumberOfBins(int number);
   void setNumberOfBins(int number);
 
 
+  virtual void removeControlPoint( qreal pos );
+
   virtual void build();
   virtual void build();
 protected:
 protected:
   qreal indexToPos(int index)const;
   qreal indexToPos(int index)const;

+ 6 - 0
Libs/Visualization/VTK/Core/ctkVTKLookupTable.cpp

@@ -220,3 +220,9 @@ vtkLookupTable* ctkVTKLookupTable::lookupTable()const
   CTK_D(const ctkVTKLookupTable);
   CTK_D(const ctkVTKLookupTable);
   return d->LookupTable;
   return d->LookupTable;
 }
 }
+
+//-----------------------------------------------------------------------------
+void ctkVTKLookupTable::removeControlPoint( qreal pos )
+{
+  // TO BE IMPLEMENTED
+}

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

@@ -58,6 +58,8 @@ public:
   virtual void setControlPointPos(int index, qreal pos);
   virtual void setControlPointPos(int index, qreal pos);
   virtual void setControlPointValue(int index, const QVariant& value);
   virtual void setControlPointValue(int index, const QVariant& value);
 
 
+  virtual void removeControlPoint( qreal pos );
+
   void setLookupTable(vtkLookupTable* lookupTable);
   void setLookupTable(vtkLookupTable* lookupTable);
   vtkLookupTable* lookupTable()const;
   vtkLookupTable* lookupTable()const;
 protected:
 protected:

+ 12 - 0
Libs/Visualization/VTK/Core/ctkVTKPiecewiseFunction.cpp

@@ -284,3 +284,15 @@ vtkPiecewiseFunction* ctkVTKPiecewiseFunction::piecewiseFunction()const
   CTK_D(const ctkVTKPiecewiseFunction);
   CTK_D(const ctkVTKPiecewiseFunction);
   return d->PiecewiseFunction;
   return d->PiecewiseFunction;
 }
 }
+
+//-----------------------------------------------------------------------------
+void ctkVTKPiecewiseFunction::removeControlPoint( qreal pos )
+{
+  CTK_D(ctkVTKPiecewiseFunction);
+  int index = -1;
+  if (d->PiecewiseFunction.GetPointer() == 0)
+  {
+  return;
+  }
+  d->PiecewiseFunction->RemovePoint( pos );
+}

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

@@ -58,6 +58,8 @@ public:
   virtual void setControlPointPos(int index, qreal pos);
   virtual void setControlPointPos(int index, qreal pos);
   virtual void setControlPointValue(int index, const QVariant& value);
   virtual void setControlPointValue(int index, const QVariant& value);
 
 
+  virtual void removeControlPoint( qreal pos );
+
   void setPiecewiseFunction(vtkPiecewiseFunction* piecewiseFunction);
   void setPiecewiseFunction(vtkPiecewiseFunction* piecewiseFunction);
   vtkPiecewiseFunction* piecewiseFunction()const;
   vtkPiecewiseFunction* piecewiseFunction()const;
 private:
 private:

+ 22 - 1
Libs/Widgets/ctkTransferFunctionControlPointsItem.cpp

@@ -26,6 +26,7 @@
 #include <QPainter>
 #include <QPainter>
 #include <QtGlobal>
 #include <QtGlobal>
 #include <QVariant>
 #include <QVariant>
+#include <QKeyEvent>
 
 
 /// CTK includes
 /// CTK includes
 #include "ctkTransferFunctionControlPointsItem.h"
 #include "ctkTransferFunctionControlPointsItem.h"
@@ -280,11 +281,12 @@ void ctkTransferFunctionControlPointsItem::updatePointPosition( QPointF iPoint )
   this->transferFunction()->setControlPointPos(d->SelectedPoint, iPoint.x());
   this->transferFunction()->setControlPointPos(d->SelectedPoint, iPoint.x());
 
 
   // TEST NOT WORKING IN COMPOSITE TRANSFER FUNCTION
   // TEST NOT WORKING IN COMPOSITE TRANSFER FUNCTION
-  if (!QSharedPointer<ctkControlPoint>(this->transferFunction()->controlPoint(d->SelectedPoint))->value().canConvert<QColor>())
+  if ( ! QSharedPointer<ctkControlPoint>(this->transferFunction()->controlPoint(d->SelectedPoint))->value().canConvert<QColor>() )
   {
   {
   this->transferFunction()->setControlPointValue(d->SelectedPoint, iPoint.y());
   this->transferFunction()->setControlPointValue(d->SelectedPoint, iPoint.y());
   }
   }
 }
 }
+
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 void ctkTransferFunctionControlPointsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* e)
 void ctkTransferFunctionControlPointsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* e)
 {
 {
@@ -296,3 +298,22 @@ void ctkTransferFunctionControlPointsItem::mouseReleaseEvent(QGraphicsSceneMouse
     }
     }
   d->SelectedPoint = -1;
   d->SelectedPoint = -1;
 }
 }
+
+//-----------------------------------------------------------------------------
+void ctkTransferFunctionControlPointsItem::keyPressEvent ( QKeyEvent * keyEvent )
+{
+    CTK_D(ctkTransferFunctionControlPointsItem);
+
+    // if a point is selected, "d" and "D" = delete the point
+    if (d->SelectedPoint >= 0)
+      {
+      if ( ! QString::compare(keyEvent->text(), "d") || ! QString::compare(keyEvent->text(), "D") )
+        {
+        // Get value of selected point
+        qreal xValue = this->transferFunction()->controlPoint( d->SelectedPoint )->x();
+        // remove point using value ( can't use point ID because it could engender
+        // problems when multiple points selection implemented)
+        this->transferFunction()->removeControlPoint( xValue );
+        }
+      }
+}

+ 1 - 0
Libs/Widgets/ctkTransferFunctionControlPointsItem.h

@@ -55,6 +55,7 @@ protected:
   virtual void mousePressEvent(QGraphicsSceneMouseEvent* e);
   virtual void mousePressEvent(QGraphicsSceneMouseEvent* e);
   virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* e);
   virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* e);
   virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* e);
   virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* e);
+  virtual void keyPressEvent (QKeyEvent * keyEvent);
 private:
 private:
   CTK_DECLARE_PRIVATE(ctkTransferFunctionControlPointsItem);
   CTK_DECLARE_PRIVATE(ctkTransferFunctionControlPointsItem);
 
 

+ 2 - 0
Libs/Widgets/ctkTransferFunctionWidget.cpp

@@ -108,6 +108,8 @@ void ctkTransferFunctionWidget::setTransferFunction(ctkTransferFunction* transfe
     {
     {
     ctkTransferFunctionControlPointsItem* controlPoints = 
     ctkTransferFunctionControlPointsItem* controlPoints = 
       new ctkTransferFunctionControlPointsItem(transferFunction);
       new ctkTransferFunctionControlPointsItem(transferFunction);
+    // Useful for key events
+    controlPoints->setFlags(QGraphicsItem::ItemIsFocusable);
     //controlPoints->setRect(tfScene->sceneRect());
     //controlPoints->setRect(tfScene->sceneRect());
     this->scene()->addItem(controlPoints);
     this->scene()->addItem(controlPoints);
     } 
     }