00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef GLBOX_H
00028 #define GLBOX_H
00029
00030 #ifdef WIN32
00031
00032 #endif
00033 #include <QtOpenGL>
00034 #include <cv.h>
00035
00036 #ifdef WITH_LIBVISION
00037 #include <image.h>
00038 #endif
00039
00041 class GLBox : public QGLWidget
00042 {
00043 Q_OBJECT
00044
00045 public:
00046
00047 GLBox(QWidget* parent=0, const char* name=0, const QGLWidget* shareWidget=0);
00048 GLBox(const QGLFormat &format, QWidget *parent=0, const char *name=0, const QGLWidget* shareWidget=0);
00049 ~GLBox();
00050
00051 void screenToImageCoord(int sx, int sy, float *imx, float *imy) const;
00052 void imageToScreenCoord(float x, float y, int *sx, int *sy) const;
00053
00054 bool reloadImage;
00055 bool allowCache;
00059 void translate(float dx, float dy) { this->dx=dx, this->dy=dy; setupTransform();}
00060 void zoom(float sx, float sy) { this->sx=sx; this->sy=sy; setupTransform(); }
00061 void setAxisUp(bool up) { yAxisUp = up; setupTransform(); }
00062
00063 void setImageSpace();
00064
00065 void setImage(IplImage *image );
00066
00067
00068
00069
00070
00071
00072
00073 static GLuint genGlTexture(int texWidth, int texHeight, bool smooth = false);
00074
00075
00076
00077 void loadGlTexture(IplImage *im);
00078
00079
00080 #ifdef WITH_LIBVISION
00081 void setImage(VL::RasterImage *im);
00082 #endif
00083
00091 bool renderAndSave(const char *filename, int w=720, int h=576);
00092
00093 float dx,dy;
00094 float sx,sy;
00095 void setupTransform();
00096 bool yAxisUp;
00097
00098 bool smooth;
00099
00100 protected:
00101
00102 virtual void initializeGL();
00103 virtual void paintGL();
00104 virtual void resizeGL( int w, int h );
00105
00106
00107 virtual void mouseMoveEvent ( QMouseEvent * e );
00108 virtual void wheelEvent( QWheelEvent *e );
00109 virtual void mousePressEvent(QMouseEvent *e);
00110
00111
00112 virtual void saveContext();
00113 virtual void restoreContext();
00114
00115 void loadTexture();
00116
00117 IplImage *image;
00118 GLuint texture, savedTexture;
00119 int textureWidth, textureHeight;
00120
00121 #ifdef WITH_LIBVISION
00122 IplImage iplIm;
00123 #endif
00124
00125 float affineTransf[2][3];
00126 float invAffineTransf[2][3];
00127
00128 void invertAffine();
00129
00130 private:
00131 void init();
00132 QPoint lastMousePos;
00133 };
00134
00135 #ifdef WITH_LIBVISION
00136 void iplShareRaster(VL::RasterImage *ri, IplImage *ipl);
00137 #endif
00138
00139 #endif // GLBOX_H