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