ctkTransferFunction.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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 __ctkTransferFunction_h
  11. #define __ctkTransferFunction_h
  12. /// Qt includes
  13. #include <QObject>
  14. #include <QtGlobal>
  15. #include <QSharedPointer>
  16. #include <QVariant>
  17. /// CTK includes
  18. #include "CTKCoreExport.h"
  19. //-----------------------------------------------------------------------------
  20. struct CTK_CORE_EXPORT ctkPoint
  21. {
  22. ctkPoint(){}
  23. ctkPoint(qreal x, const QVariant& v)
  24. :X(x),Value(v)
  25. {
  26. }
  27. qreal X;
  28. // QColor or qreal.
  29. QVariant Value;
  30. };
  31. //-----------------------------------------------------------------------------
  32. /// assumes the mapping is linear by default, if not, then subclasses must be
  33. /// used
  34. struct CTK_CORE_EXPORT ctkControlPoint
  35. {
  36. virtual ~ctkControlPoint();
  37. inline const qreal& x()const {return this->P.X;}
  38. inline const QVariant& value()const {return this->P.Value;}
  39. ctkPoint P;
  40. };
  41. //-----------------------------------------------------------------------------
  42. struct CTK_CORE_EXPORT ctkBezierControlPoint : public ctkControlPoint
  43. {
  44. virtual ~ctkBezierControlPoint();
  45. ctkPoint P1;
  46. ctkPoint P2;
  47. };
  48. //-----------------------------------------------------------------------------
  49. struct CTK_CORE_EXPORT ctkNonLinearControlPoint : public ctkControlPoint
  50. {
  51. virtual ~ctkNonLinearControlPoint();
  52. QList<ctkPoint> SubPoints;
  53. };
  54. //-----------------------------------------------------------------------------
  55. class CTK_CORE_EXPORT ctkTransferFunction: public QObject
  56. {
  57. Q_OBJECT
  58. public:
  59. ctkTransferFunction(QObject* parent = 0);
  60. virtual ~ctkTransferFunction();
  61. virtual ctkControlPoint* controlPoint(int index)const = 0;
  62. inline QVariant value(int index)const;
  63. virtual QVariant value(qreal pos)const = 0;
  64. virtual int count()const = 0;
  65. inline void range(qreal rangeValues[2])const;
  66. virtual void range(qreal& minRange, qreal& maxRange)const=0;
  67. virtual QVariant minValue()const = 0;
  68. virtual QVariant maxValue()const = 0;
  69. ///
  70. virtual int insertControlPoint(const ctkControlPoint& cp) = 0;
  71. ///
  72. /// be careful with it, as changing the value might require
  73. /// more changes to ctkControlPoint.
  74. virtual void setControlPointPos(int index, qreal pos)=0;
  75. ///
  76. /// be careful with it, as changing the value might require
  77. /// more changes to ctkControlPoint.
  78. virtual void setControlPointValue(int index, const QVariant& value)=0;
  79. virtual ctkBezierControlPoint* toto();
  80. signals:
  81. void changed();
  82. };
  83. //-----------------------------------------------------------------------------
  84. QVariant ctkTransferFunction::value(int index)const
  85. {
  86. QSharedPointer<ctkControlPoint> cp(this->controlPoint(index));
  87. return cp->P.Value;
  88. }
  89. //-----------------------------------------------------------------------------
  90. void ctkTransferFunction::range(qreal rangeValues[2])const
  91. {
  92. this->range(rangeValues[0], rangeValues[1]);
  93. }
  94. #endif