00001 #ifndef SKYTEXTURE_H
00002 #define SKYTEXTURE_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include <vector>
00014 #include <map>
00015 #include <qtimer.h>
00016 #include <qthread.h>
00017 #include <QGLViewer/qglviewer.h>
00018 #include "healpixmap.h"
00019 #include "enums.h"
00020
00021 class ColorTable;
00022 class RangeControl;
00023
00024
00025
00026 typedef std::vector<long> PixLUT;
00027 typedef std::map<int, PixLUT > PixLUTCache;
00028
00029
00030
00031
00032
00033
00034 class SkyTexture : public QThread
00035 {
00036 Q_OBJECT
00037 private:
00038 unsigned char hilite_level;
00039 unsigned char select_level;
00040 unsigned char *texture;
00041 int texture_res;
00042 int nside;
00043 HealpixMap::PixOrder order;
00044 PixLUT *lut;
00045 PixLUTCache lut_cache_ring;
00046 PixLUTCache lut_cache_nest;
00047 HealpixMap *skymap;
00048 ColorTable *ct;
00049 int dpyfieldold;
00050 Field dpyfield;
00051 double minv;
00052 double maxv;
00053 bool restart;
00054
00055 QTimer *timer;
00056 bool update;
00057
00058 bool buildLUT(const int ns, HealpixMap::PixOrder ordering);
00059 PixLUTCache::iterator getLUT(const int ns, HealpixMap::PixOrder ordering);
00060
00061 protected:
00062 void run();
00063
00064 protected slots:
00065 void reTexture(void);
00066
00067 public :
00068 SkyTexture();
00069 virtual ~SkyTexture();
00070
00071 void set(HealpixMap *skymap, RangeControl *rangecontrol);
00072
00073 void glTexture();
00074 void highlite (const int pix, float alpha = 1.);
00075
00076 signals:
00077 void retextured();
00078 };
00079 #endif