00001 #ifndef __TRANSFER_FUNCTION_DISPLAY_WIDGET__
00002 #define __TRANSFER_FUNCTION_DISPLAY_WIDGET__
00003
00004 #include <QBrush>
00005 #include <QPen>
00006 #include <QPixmap>
00007 #include <QWidget>
00008 #include <QtGui>
00009
00010 #include <windows.h>
00011 #include <gl/gl.h>
00012
00013 #include <cmath>
00014
00015 #include "histogram.h"
00016 #include "logger.h"
00017 #include "interpolateData.h"
00018
00021 class TransferFunctionDisplayWidget : public QWidget
00022 {
00023 Q_OBJECT
00024
00025 public:
00026 TransferFunctionDisplayWidget(QWidget *parent = 0, Histogram *histogram = NULL);
00027
00028 ~TransferFunctionDisplayWidget();
00029
00030 QSize minimumSizeHint() const;
00031 QSize sizeHint() const;
00032
00033 void setHistogram(Histogram *histogram);
00034
00035 static int getWidth() {return width;}
00036 static int getHeight() {return height;}
00037
00038 unsigned char *getData();
00039
00040 void writeData(FILE *fp);
00041 void readData(FILE *fp);
00042
00043 signals:
00044 void transferFunctionChanged();
00045
00046 protected:
00047 void paintEvent(QPaintEvent *event);
00048 void mousePressEvent(QMouseEvent *event);
00049 void mouseMoveEvent(QMouseEvent *event);
00050 void mouseReleaseEvent(QMouseEvent *event);
00051
00052 private:
00053 unsigned char *textureData;
00054
00055 static double triggerDistance;
00056
00057 Histogram *histogram;
00058
00059 static const int width;
00060 static const int height;
00061 static const int densityRange;
00062
00063 static const int histogramHeight;
00064 static const int gapHeight;
00065 static const int gradientHeight;
00066
00067 bool leftMouseButtonHeld;
00068 int selected;
00069
00070 QPen *graphPen;
00071 QPen *functionPen;
00072 QBrush *graphBrush;
00073 QLinearGradient *alphaGradient;
00074
00075 QPoint *linePoints;
00076 int noPoints;
00077
00078 int addPoint(int x, int y);
00079 void removePoint(int x, int y);
00080 int findPoint(int x, int y, int triggerDistance);
00081 void removePointWithIndex(int index);
00082
00083 void updateAll();
00084 void updateData();
00085
00086 int genColorValueFromHeight(int height);
00087 void createGradientStops();
00088 };
00089
00090 #endif