ctkTransferFunctionItems.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*=========================================================================
  2. Library: ctk
  3. Copyright (c) Kitware Inc.
  4. All rights reserved.
  5. Distributed under a BSD License. See LICENSE.txt file.
  6. This software is distributed "AS IS" WITHOUT ANY WARRANTY; without even
  7. the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  8. See the above copyright notice for more information.
  9. =========================================================================*/
  10. #ifndef __ctkTransferFunctionItems_h
  11. #define __ctkTransferFunctionItems_h
  12. /// Qt includes
  13. #include <QGraphicsObject>
  14. /// CTK includes
  15. #include "CTKWidgetsExport.h"
  16. #include "ctkPimpl.h"
  17. class ctkControlPoint;
  18. class ctkTransferFunction;
  19. class ctkTransferFunctionItemPrivate;
  20. //class ctkTransferFunctionGradientItemPrivate;
  21. class ctkTransferFunctionControlPointsItemPrivate;
  22. ///
  23. /// TODO: should probably derive from QGraphicsItem or QAbstractGraphicsShapeItem
  24. class CTK_WIDGETS_EXPORT ctkTransferFunctionItem: public QGraphicsObject
  25. {
  26. Q_OBJECT
  27. public:
  28. ctkTransferFunctionItem(QGraphicsItem* parent = 0);
  29. ctkTransferFunctionItem(ctkTransferFunction* transferFunction,
  30. QGraphicsItem* parent = 0);
  31. virtual ~ctkTransferFunctionItem();
  32. void setTransferFunction(ctkTransferFunction* transferFunction);
  33. ctkTransferFunction* transferFunction()const;
  34. inline void setRect(qreal x, qreal y, qreal width, qreal height);
  35. void setRect(const QRectF& rectangle);
  36. QRectF rect()const;
  37. virtual QRectF boundingRect()const;
  38. protected:
  39. qreal y(const QVariant& v)const;
  40. QColor color(const QVariant& v)const;
  41. QList<QPointF> bezierParams(ctkControlPoint* start, ctkControlPoint* end)const;
  42. protected slots:
  43. virtual void onTransferFunctionChanged();
  44. private:
  45. CTK_DECLARE_PRIVATE(ctkTransferFunctionItem);
  46. };
  47. void ctkTransferFunctionItem::setRect(qreal x, qreal y, qreal width, qreal height)
  48. {
  49. this->setRect(QRectF(x,y,width,height));
  50. }
  51. //-----------------------------------------------------------------------------
  52. class CTK_WIDGETS_EXPORT ctkTransferFunctionGradientItem: public ctkTransferFunctionItem
  53. {
  54. Q_OBJECT
  55. public:
  56. ctkTransferFunctionGradientItem(QGraphicsItem* parent = 0);
  57. ctkTransferFunctionGradientItem(ctkTransferFunction* transferFunction,
  58. QGraphicsItem* parent = 0);
  59. virtual ~ctkTransferFunctionGradientItem();
  60. virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0);
  61. };
  62. //-----------------------------------------------------------------------------
  63. class CTK_WIDGETS_EXPORT ctkTransferFunctionControlPointsItem: public ctkTransferFunctionItem
  64. {
  65. Q_OBJECT
  66. public:
  67. explicit ctkTransferFunctionControlPointsItem(QGraphicsItem* parent = 0);
  68. ctkTransferFunctionControlPointsItem(ctkTransferFunction* transferFunction,
  69. QGraphicsItem* parent = 0);
  70. virtual ~ctkTransferFunctionControlPointsItem();
  71. virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0);
  72. protected:
  73. virtual void mousePressEvent(QGraphicsSceneMouseEvent* e);
  74. virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* e);
  75. virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* e);
  76. private:
  77. CTK_DECLARE_PRIVATE(ctkTransferFunctionControlPointsItem);
  78. };
  79. #endif