ctkTransferFunctionItems.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. #include "ctkTransferFunction.h"
  18. class ctkControlPoint;
  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& value)const;
  40. inline qreal y(const ctkPoint& point)const;
  41. QColor color(const QVariant& value)const;
  42. inline QColor color(const ctkPoint& point)const;
  43. QList<ctkPoint> bezierParams(ctkControlPoint* start, ctkControlPoint* end)const;
  44. QList<ctkPoint> nonLinearPoints(ctkControlPoint* start, ctkControlPoint* end)const;
  45. protected slots:
  46. virtual void onTransferFunctionChanged();
  47. private:
  48. CTK_DECLARE_PRIVATE(ctkTransferFunctionItem);
  49. };
  50. void ctkTransferFunctionItem::setRect(qreal x, qreal y, qreal width, qreal height)
  51. {
  52. this->setRect(QRectF(x,y,width,height));
  53. }
  54. qreal ctkTransferFunctionItem::y(const ctkPoint& p)const
  55. {
  56. return this->y(p.Value);
  57. }
  58. QColor ctkTransferFunctionItem::color(const ctkPoint& p)const
  59. {
  60. return this->color(p.Value);
  61. }
  62. //-----------------------------------------------------------------------------
  63. class CTK_WIDGETS_EXPORT ctkTransferFunctionGradientItem: public ctkTransferFunctionItem
  64. {
  65. Q_OBJECT
  66. public:
  67. ctkTransferFunctionGradientItem(QGraphicsItem* parent = 0);
  68. ctkTransferFunctionGradientItem(ctkTransferFunction* transferFunction,
  69. QGraphicsItem* parent = 0);
  70. virtual ~ctkTransferFunctionGradientItem();
  71. virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0);
  72. };
  73. //-----------------------------------------------------------------------------
  74. class CTK_WIDGETS_EXPORT ctkTransferFunctionControlPointsItem: public ctkTransferFunctionItem
  75. {
  76. Q_OBJECT
  77. public:
  78. explicit ctkTransferFunctionControlPointsItem(QGraphicsItem* parent = 0);
  79. ctkTransferFunctionControlPointsItem(ctkTransferFunction* transferFunction,
  80. QGraphicsItem* parent = 0);
  81. virtual ~ctkTransferFunctionControlPointsItem();
  82. virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0);
  83. protected:
  84. virtual void mousePressEvent(QGraphicsSceneMouseEvent* e);
  85. virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* e);
  86. virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* e);
  87. private:
  88. CTK_DECLARE_PRIVATE(ctkTransferFunctionControlPointsItem);
  89. };
  90. #endif