From: abd Date: Fri, 1 Jul 2005 10:16:14 +0000 (+0000) Subject: Update comments X-Git-Tag: V3_0_1~97 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=db4f3a2c934f44335bca0e70fec9aed00c8c29fd;p=modules%2Fgui.git Update comments --- diff --git a/src/GLViewer/GLViewer_Widget.cxx b/src/GLViewer/GLViewer_Widget.cxx index 2f35e0819..b430332e1 100644 --- a/src/GLViewer/GLViewer_Widget.cxx +++ b/src/GLViewer/GLViewer_Widget.cxx @@ -3,14 +3,11 @@ // Author: OCC team // Copyright (C) CEA 2004 -/*************************************************************************** -** Class: GLViewer_Widget -** Descr: OpenGL QWidget for GLViewer -** Module: GLViewer -** Created: UI team, 27.03.03 -****************************************************************************/ - -//#include +//================================================================ +// Class : GLViewer_Widget +// Description : OpenGL QWidget for GLViewer +//================================================================ + #include "GLViewer_Widget.h" #include "GLViewer_ViewPort2d.h" #include "GLViewer_Viewer2d.h" @@ -21,9 +18,6 @@ #include using namespace std; -//#include -//#include -//#include #include #include @@ -36,106 +30,10 @@ using namespace std; #include #include -//----------- -#include -#include -#include -//----------- - -//static GLuint texFont; -//static int fontW; -//static int fontH; - -/* -static void genFont() -{ - bool ok; - QFont aFont = QFontDialog::getFont( &ok ); - QFontMetrics aFM( aFont ); - QString aStr; - for( int k = 32; k <= 127; k++ ) - { - char aLetter = (char)k; - aStr += aLetter; - } - - int pixelsWidth = aFM.width( aStr ); - int pixelsHigh = aFM.height(); - int aFontX = 64; - int aFontY = 64; - - while( aFontX < pixelsWidth ) - aFontX = aFontX * 2; - while( aFontY < pixelsHigh ) - aFontY = aFontY * 2; - - QPixmap* aPixmap = new QPixmap( aFontX, aFontY ); - aPixmap->fill( QColor( 255, 255, 255) ); - QPainter aPainter( aPixmap ); - aPainter.setFont( aFont ); - aPainter.drawText ( 0, pixelsHigh, aStr ); - QImage aImage = aPixmap->convertToImage(); - - aImage.save( "W:\\Temp\\pic.jpg", "JPEG" ); - - char* pixels = new char[aFontX * aFontY * 2]; - - for( int i = 0; i < aFontY; i++ ) - { - for( int j = 0; j < aFontX; j++ ) - { - if( qRed( aImage.pixel( j, aFontY - i - 1 ) ) == 0 ) - { - pixels[i * aFontX * 2 + j * 2] = (char) 255; - pixels[i * aFontX * 2 + j * 2 + 1]= (char) 255; - } - else - { - pixels[i * aFontX * 2 + j * 2] = (char) 0; - pixels[i * aFontX * 2 + j * 2 + 1]= (char) 0; - } - } - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glGenTextures(1, &texFont); - glBindTexture(GL_TEXTURE_2D, texFont); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexImage2D(GL_TEXTURE_2D, 0, 2, aFontX, - aFontY, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, pixels); - - fontW = aFontX; - fontH = aFontY; - - delete[] pixels; -} - -static void showFont() -{ - glEnable(GL_TEXTURE_2D); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glAlphaFunc(GL_GEQUAL, 0.005F); - glEnable(GL_ALPHA_TEST); - glColor3f( 1.0, 1.0, 1.0); - glBindTexture(GL_TEXTURE_2D, texFont); - glBegin(GL_QUADS); - - glTexCoord2f( 0.0, 0.0 ); glVertex3f( -fontW/2, -fontH/2, 1.0 ); - glTexCoord2f( 0.0, 1.0 ); glVertex3f( -fontW/2, fontH/2, 1.0 ); - glTexCoord2f( 1.0, 1.0 ); glVertex3f( fontW/2, fontH/2, 1.0 ); - glTexCoord2f( 1.0, 0.0 ); glVertex3f( fontW/2, -fontH/2, 1.0 ); - - glEnd(); - glFlush(); - glDisable(GL_ALPHA_TEST); - glDisable(GL_TEXTURE_2D); -} -*/ - +//======================================================================= +// Function: GLViewer_Widget +// Purpose : +//======================================================================= GLViewer_Widget::GLViewer_Widget( QWidget* parent, const char* name ): QGLWidget( parent, 0/*, WRepaintNoErase | WResizeNoErase*/ ) { @@ -161,10 +59,18 @@ QGLWidget( parent, 0/*, WRepaintNoErase | WResizeNoErase*/ ) setMouseTracking( true ); } +//======================================================================= +// Function: GLViewer_Widget +// Purpose : +//======================================================================= GLViewer_Widget::~GLViewer_Widget() { } +//======================================================================= +// Function: ~GLViewer_Widget +// Purpose : +//======================================================================= void GLViewer_Widget::getPan( GLfloat& xPan, GLfloat& yPan, GLfloat& zPan ) { xPan = myXPan; @@ -172,6 +78,10 @@ void GLViewer_Widget::getPan( GLfloat& xPan, GLfloat& yPan, GLfloat& zPan ) zPan = myZPan; } +//======================================================================= +// Function: setPan +// Purpose : +//======================================================================= void GLViewer_Widget::setPan( GLfloat xPan, GLfloat yPan, GLfloat zPan ) { myXPan = xPan; @@ -179,6 +89,10 @@ void GLViewer_Widget::setPan( GLfloat xPan, GLfloat yPan, GLfloat zPan ) myZPan = zPan; } +//======================================================================= +// Function: getScale +// Purpose : +//======================================================================= void GLViewer_Widget::getScale( GLfloat& xScale, GLfloat& yScale, GLfloat& zScale ) { xScale = myXScale; @@ -186,6 +100,10 @@ void GLViewer_Widget::getScale( GLfloat& xScale, GLfloat& yScale, GLfloat& zScal zScale = myZScale; } +//======================================================================= +// Function: setScale +// Purpose : +//======================================================================= void GLViewer_Widget::setScale( GLfloat xScale, GLfloat yScale, GLfloat zScale ) { if ( xScale > 0 && yScale > 0 && zScale > 0 ) @@ -196,24 +114,40 @@ void GLViewer_Widget::setScale( GLfloat xScale, GLfloat yScale, GLfloat zScale ) } } -void GLViewer_Widget::getRotationStart( GLfloat& rotationStartX, GLfloat& rotationStartY, - GLfloat& rotationStartZ ) +//======================================================================= +// Function: getRotationStart +// Purpose : +//======================================================================= +void GLViewer_Widget::getRotationStart( GLfloat& rotationStartX, + GLfloat& rotationStartY, + GLfloat& rotationStartZ ) { rotationStartX = myRotationStartX; rotationStartY = myRotationStartY; rotationStartZ = myRotationStartZ; } -void GLViewer_Widget::setRotationStart( GLfloat rotationStartX, GLfloat rotationStartY, - GLfloat rotationStartZ ) +//======================================================================= +// Function: setRotationStart +// Purpose : +//======================================================================= +void GLViewer_Widget::setRotationStart( GLfloat rotationStartX, + GLfloat rotationStartY, + GLfloat rotationStartZ ) { myRotationStartX = rotationStartX; myRotationStartY = rotationStartY; myRotationStartZ = rotationStartZ; } -void GLViewer_Widget::getRotation( GLfloat& rotationAngle, GLfloat& rotationCenterX, - GLfloat& rotationCenterY, GLfloat& rotationCenterZ ) +//======================================================================= +// Function: getRotation +// Purpose : +//======================================================================= +void GLViewer_Widget::getRotation( GLfloat& rotationAngle, + GLfloat& rotationCenterX, + GLfloat& rotationCenterY, + GLfloat& rotationCenterZ ) { rotationAngle = myRotationAngle; rotationCenterX = myRotationCenterX; @@ -221,8 +155,14 @@ void GLViewer_Widget::getRotation( GLfloat& rotationAngle, GLfloat& rotationCent rotationCenterZ = myRotationCenterZ; } -void GLViewer_Widget::setRotation( GLfloat rotationAngle, GLfloat rotationCenterX, - GLfloat rotationCenterY, GLfloat rotationCenterZ ) +//======================================================================= +// Function: setRotation +// Purpose : +//======================================================================= +void GLViewer_Widget::setRotation( GLfloat rotationAngle, + GLfloat rotationCenterX, + GLfloat rotationCenterY, + GLfloat rotationCenterZ ) { myRotationAngle = rotationAngle; myRotationCenterX = rotationCenterX; @@ -230,6 +170,10 @@ void GLViewer_Widget::setRotation( GLfloat rotationAngle, GLfloat rotationCenter myRotationCenterZ = rotationCenterZ; } +//======================================================================= +// Function: setBackground +// Purpose : +//======================================================================= void GLViewer_Widget::setBackground( QString filename ) { @@ -273,8 +217,6 @@ void GLViewer_Widget::setBackground( QString filename ) glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1, &texName); glBindTexture(GL_TEXTURE_2D, texName); - //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, myBackgroundSize , myBackgroundSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, @@ -282,28 +224,35 @@ void GLViewer_Widget::setBackground( QString filename ) delete[] pixels; } - } +//======================================================================= +// Function: addToolTip +// Purpose : +//======================================================================= void GLViewer_Widget::addToolTip( QString theString, QRect theRect ) { myToolTipRect = theRect; QToolTip::add( this, myToolTipRect, theString ); } +//======================================================================= +// Function: removeToolTip +// Purpose : +//======================================================================= void GLViewer_Widget::removeToolTip() { QToolTip::remove( this, myToolTipRect ); } +//======================================================================= +// Function: initializeGL +// Purpose : +//======================================================================= void GLViewer_Widget::initializeGL() { setAutoBufferSwap( true ); -// cout << "GLViewer_Widget::initializeGL" << endl; - - //glClearColor( 0.0, 0.0, 0.0, 0.0 ); - //----------------- glShadeModel(GL_FLAT); //get image @@ -313,134 +262,20 @@ void GLViewer_Widget::initializeGL() if ( !aPicturePath.isEmpty() && buf.load( aPicturePath ) ) { // Load first image from file isLoadBackground = true; - setBackground( aPicturePath ); - - // for test texture font - //genFont(); -/* - bool ok; - QFont aFont = QFontDialog::getFont( &ok, this ); - QFontMetrics aFM( aFont ); - int pixelsWidth = aFM.width( "What's the width of this text?" ); - int pixelsHigh = aFM.height(); - int aFontX = 64; - int aFontY = 64; - - while( aFontX < pixelsWidth ) - aFontX = aFontX * 2; - while( aFontY < pixelsHigh ) - aFontY = aFontY * 2; - - myIW = aFontX; - myIH = aFontY; - - QPixmap* aPixmap = new QPixmap( aFontX, aFontY ); - aPixmap->fill( QColor( 255, 255, 255) ); - QPainter aPainter( aPixmap ); - aPainter.setFont( aFont ); - //Painter.setPen( QColor( 0, 0, 0 ) ); - aPainter.drawText ( 0, pixelsHigh, "A" ); - QImage aImage = aPixmap->convertToImage(); - - aImage.save( "W:\\Temp\\pic.jpg", "JPEG" ); - - GLubyte* pixels = new GLubyte[aFontX * aFontY * 2]; - - for( int i = 0; i < aFontY; i++ ) - { - for( int j = 0; j < aFontX; j++ ) - { - if( qRed( aImage.pixel( j, myIH - i - 1 ) ) == 0 ) - { - pixels[i * aFontX * 2 + j * 2] = (GLubyte) 255; - pixels[i * aFontX * 2 + j * 2 + 1]= (GLubyte) 255; - } - else - { - pixels[i * aFontX * 2 + j * 2] = (GLubyte) 0; - pixels[i * aFontX * 2 + j * 2 + 1]= (GLubyte) 0; - } - } - } - - - glBindTexture(GL_TEXTURE_2D, texName); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexImage2D(GL_TEXTURE_2D, 0, 2, aFontX, - aFontY, 0, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, pixels); - - delete[] pixels; -*/ - - //tex2 = buf.convertDepth( 32, 0 ); - - //tex1 = QGLWidget::convertToGLFormat( tex2 ); // flipped 32bit RGBA - - /*myIW = buf.width(); - myIH = buf.height(); - - myBackgroundSize = 64; - while( myBackgroundSize < myIW || myBackgroundSize < myIH) - myBackgroundSize = myBackgroundSize * 2; - - GLubyte* pixels = new GLubyte[myBackgroundSize * myBackgroundSize * 4]; - - //GLubyte pixels[512][512][3]; - for( int i = 0; i < myBackgroundSize; i++ ) - { - for( int j = 0; j < myBackgroundSize; j++ ) - { - if( j < myIW && i < myIH ) - { - pixels[i * myBackgroundSize * 4 + j * 4] = (GLubyte)qRed( buf.pixel(j,myIH - i - 1) ); - pixels[i * myBackgroundSize * 4 + j * 4 + 1]= (GLubyte)qGreen( buf.pixel(j,myIH - i - 1) ); - pixels[i * myBackgroundSize * 4 + j * 4 + 2] = (GLubyte)qBlue( buf.pixel(j,myIH - i - 1) ); - } - else - { - pixels[i * myBackgroundSize * 4 + j * 4] = (GLubyte)0; - pixels[i * myBackgroundSize * 4 + j * 4 + 1] = (GLubyte)0; - pixels[i * myBackgroundSize * 4 + j * 4 + 2] = (GLubyte)0; - } - pixels[i * myBackgroundSize* 4 + j * 4 + 3] = (GLubyte)255; - //cout << "RED = " << qRed( buf.pixel(i,j) ) << " GREEN = " << qGreen( buf.pixel(i,j) ) << - // " BLUE = " << qBlue( buf.pixel(i,j) ) << endl; - } - } - - //initialize texture - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glGenTextures(1, &texName); - glBindTexture(GL_TEXTURE_2D, texName); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, myBackgroundSize , myBackgroundSize, 0, GL_RGBA, GL_UNSIGNED_BYTE, - pixels); - - delete[] pixels; - */ + setBackground( aPicturePath ); } else isLoadBackground = false; - - //GLViewer_TexFont aTexFont; - //aTexFont.generateTexture(); - //aTexFont.drawString( "hello" ); - //----------------- } +//======================================================================= +// Function: paintGL +// Purpose : +//======================================================================= void GLViewer_Widget::paintGL() { -// cout << "GLViewer_Widget::paintGL" << endl; - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode( GL_MODELVIEW ); @@ -449,9 +284,8 @@ void GLViewer_Widget::paintGL() glRotatef( myRotationAngle, myRotationCenterX, myRotationCenterY, myRotationCenterZ ); glScalef( myXScale, myYScale, myZScale ); glTranslatef( myXPan, myYPan, myZPan ); - //glRotatef( myRotationAngle, myRotationCenterX, myRotationCenterY, myRotationCenterZ ); - if( isLoadBackground ) + if( isLoadBackground ) { glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); @@ -467,8 +301,6 @@ void GLViewer_Widget::paintGL() glFlush(); glDisable(GL_TEXTURE_2D); - // for test texture font - // showFont(); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); } @@ -476,27 +308,20 @@ void GLViewer_Widget::paintGL() GLViewer_Grid* grid = myViewPort->getGrid(); if( grid ) grid->draw(); - //myViewPort->drawCompass(); - - //glEnable( GL_POLYGON_OFFSET_FILL ); - //glPolygonOffset( 0, 1 ); GLViewer_Viewer2d* v = ( GLViewer_Viewer2d* )getViewPort()->getViewFrame()->getViewer(); if( !isExportMode ) v->updateDrawers( GL_FALSE, myXScale, myYScale ); else v->repaintView( getViewPort()->getViewFrame() ); - - //glDisable( GL_POLYGON_OFFSET_FILL ); - -// GLViewer_TexFont aTexFont; -// aTexFont.generateTexture(); -// aTexFont.drawString( "hello" ); } +//======================================================================= +// Function: resizeGL +// Purpose : +//======================================================================= void GLViewer_Widget::resizeGL( int w, int h ) { -// cout << "GLViewer_Widget::resizeGL " << w << " " << h << endl; if( h < 1 ) h = 1; if( w < 1 ) w = 1; @@ -511,9 +336,6 @@ void GLViewer_Widget::resizeGL( int w, int h ) myViewPort->initResize( w, h ); - //GLViewer_Viewer2d* v = ( GLViewer_Viewer2d* )getViewPort()->getViewFrame()->getViewer(); - //v->updateDrawers( GL_FALSE, myXScale, myYScale ); - glMatrixMode( GL_PROJECTION ); glLoadIdentity(); GLfloat w_c = w / 2., h_c = h / 2.; @@ -524,16 +346,10 @@ void GLViewer_Widget::resizeGL( int w, int h ) glLoadIdentity(); } -void GLViewer_Widget::copyBuffers() -{ -// cout << "GLViewer_Widget::copyBuffers" << endl; - - GLint val[4]; - glGetIntegerv( GL_VIEWPORT, val ); - glReadBuffer( GL_FRONT ); - glCopyPixels( val[0], val[1], val[2], val[3], GL_COLOR ); -} - +//======================================================================= +// Function: exportRepaint +// Purpose : +//======================================================================= void GLViewer_Widget::exportRepaint() { isExportMode = true; @@ -543,39 +359,57 @@ void GLViewer_Widget::exportRepaint() isExportMode = false; } - +//======================================================================= +// Function: paintEvent +// Purpose : +//======================================================================= void GLViewer_Widget::paintEvent( QPaintEvent* e ) { -// cout << "GLViewer_Widget::paintEvent" << endl; QApplication::sendEvent( myViewPort, e ); } +//======================================================================= +// Function: mouseMoveEvent +// Purpose : +//======================================================================= void GLViewer_Widget::mouseMoveEvent( QMouseEvent* e ) { -// cout << "GLViewer_Widget::mouseMoveEvent" << endl; QApplication::sendEvent( myViewPort, e ); } +//======================================================================= +// Function: mousePressEvent +// Purpose : +//======================================================================= void GLViewer_Widget::mousePressEvent( QMouseEvent* e ) { -// cout << "GLViewer_Widget::mousePressEvent" << endl; QApplication::sendEvent( myViewPort, e ); } +//======================================================================= +// Function: mouseReleaseEvent +// Purpose : +//======================================================================= void GLViewer_Widget::mouseReleaseEvent( QMouseEvent* e ) { -// cout << "GLViewer_Widget::mouseReleaseEvent" << endl; QApplication::sendEvent( myViewPort, e ); } +//======================================================================= +// Function: enterEvent +// Purpose : +//======================================================================= void GLViewer_Widget::enterEvent( QEvent* e ) { -// cout << "GLViewer_Widget::enterEvent" << endl; updateGL(); } + +//======================================================================= +// Function: leaveEvent +// Purpose : +//======================================================================= void GLViewer_Widget::leaveEvent( QEvent* e ) { -// cout << "GLViewer_Widget::leaveEvent" << endl; updateGL(); } @@ -587,6 +421,10 @@ inline char hex( uchar c ) return 'a' + c - 10; } +//======================================================================= +// Function: AddImagePart +// Purpose : +//======================================================================= void AddImagePart( QFile& hFile, QImage& image, int w1, int w2, int h1, int h2, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aPSCS, double a, double b, double c, double d, double dw, double dh ) @@ -628,12 +466,20 @@ void AddImagePart( QFile& hFile, QImage& image, int w1, int w2, int h1, int h2, } } +//======================================================================= +// Function: getBackgroundRectInViewerCS +// Purpose : +//======================================================================= void GLViewer_Widget::getBackgroundRectInViewerCS( double& left, double& top, double& right, double& bottom ) { left = -myIW/2; right = myIW/2; top = myIH/2; bottom = -myIH/2; } +//======================================================================= +// Function: translateBackgroundToPS +// Purpose : +//======================================================================= void GLViewer_Widget::translateBackgroundToPS( QFile& hFile, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aPSCS ) { QImage buf; @@ -680,6 +526,10 @@ void GLViewer_Widget::translateBackgroundToPS( QFile& hFile, GLViewer_CoordSyste } } +//======================================================================= +// Function: DecodeScanLine +// Purpose : +//======================================================================= void DecodeScanLine( int width, uchar* dest, int dest_depth, uchar* source, int source_depth ) { #ifndef WIN32 @@ -743,6 +593,10 @@ typedef unsigned int WORD; } } +//======================================================================= +// Function: translateBackgroundToEMF +// Purpose : +//======================================================================= #ifdef WIN32 void GLViewer_Widget::translateBackgroundToEMF( HDC dc, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aEMFCS ) { diff --git a/src/GLViewer/GLViewer_Widget.h b/src/GLViewer/GLViewer_Widget.h index 4571c7c74..4e48852b6 100644 --- a/src/GLViewer/GLViewer_Widget.h +++ b/src/GLViewer/GLViewer_Widget.h @@ -9,6 +9,11 @@ ** Module: GLViewer ** Created: UI team, 27.03.03 ****************************************************************************/ + +/*! Class GLViewer_Widget + * Class for visualization OpenGL scene (widget) for GLViewer + * + */ #ifndef GLVIEWER_WIDGET_H #define GLVIEWER_WIDGET_H @@ -25,91 +30,169 @@ class GLVIEWER_API GLViewer_Widget : public QGLWidget Q_OBJECT public: - GLViewer_Widget( QWidget*, const char* = 0 ); - ~GLViewer_Widget(); - - GLViewer_ViewPort2d* getViewPort() const { return myViewPort; } - GLint getWidth() const { return myWidth; } - GLint getHeight() const { return myHeight; } - - void getScale( GLfloat&, GLfloat&, GLfloat& ); - void setScale( GLfloat, GLfloat, GLfloat ); - - void getPan( GLfloat&, GLfloat&, GLfloat& ); - void setPan( GLfloat, GLfloat, GLfloat ); - - GLfloat getRotationAngle() const { return myRotationAnglePrev; } - void setRotationAngle( GLfloat a ) { myRotationAnglePrev = a; } - void getRotationStart( GLfloat&, GLfloat&, GLfloat& ); - void setRotationStart( GLfloat, GLfloat, GLfloat ); - void getRotation( GLfloat&, GLfloat&, GLfloat&, GLfloat& ); - void setRotation( GLfloat, GLfloat, GLfloat, GLfloat ); - void setBackground( QString ); - - void addToolTip( QString, QRect ); - void removeToolTip(); - - void copyBuffers(); - virtual void translateBackgroundToPS( QFile& hFile, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aPSCS ); - - void exportRepaint(); + //! A constructor + /*! Parameters using for QOGLWidget as is + */ + GLViewer_Widget( QWidget* theParent, const char* theName = 0 ); + + //! A destructor + ~GLViewer_Widget(); + + //! Returns parent GLViewer_ViewPort2d + /*! ViewPort2d because this class is not use for 3D Viewer */ + GLViewer_ViewPort2d* getViewPort() const { return myViewPort; } + //! Returns width of OpenGl Window + GLint getWidth() const { return myWidth; } + //! Returns height of OpenGl Window + GLint getHeight() const { return myHeight; } + + //! Returns scales on OpenGL scene along 3 directions + /*! in 2d scene zScale = 1.0 */ + void getScale( GLfloat& xScale, + GLfloat& yScale, + GLfloat& zScale ); + //! A function for installing the scales of OpenGL scene + void setScale( GLfloat xScale, + GLfloat yScale, + GLfloat zScaleGLfloat ); + + //! Returns offset parameters of Window in OpenGL global scene + void getPan( GLfloat& xPan, GLfloat& yPan, GLfloat& zPan ); + //! A function for installing the offset parameters of Window in OpenGL global scene + void setPan( GLfloat xPan, GLfloat yPan, GLfloat zPan ); + + //! Returns rotation angle of Window in OpenGL global scene in degree + /*! Only in 2D */ + GLfloat getRotationAngle() const { return myRotationAnglePrev; } + //! A function for installing the rotation angle of Window in OpenGL global scene in degree + /*! Only in 2D */ + void setRotationAngle( GLfloat a ) { myRotationAnglePrev = a; } + + //! Returns start point of curren rotation of Window in OpenGL global scene + void getRotationStart( GLfloat& rotationStartX, + GLfloat& rotationStartY, + GLfloat& rotationStartZ ); + //! A function for installing the start point of curren rotation of Window in OpenGL global scene + void setRotationStart( GLfloat rotationStartX, + GLfloat rotationStartY, + GLfloat rotationStartZ ); + //! Returns parameters of current rotation + void getRotation( GLfloat& rotationAngle, + GLfloat& rotationCenterX, + GLfloat& rotationCenterY, + GLfloat& rotationCenterZ ); + //! A function for installing the parameters of current rotation + void setRotation( GLfloat, GLfloat, GLfloat, GLfloat ); + + //! A function load picture from file with name theFileName and post it in center of global OpenGL scene + void setBackground( QString theFileName ); + + //! A function add the tool tip with text theTTText on theTTRect rect to the widget window + void addToolTip( QString theTTText, QRect theTTRect ); + //! A function remove tool tip form widget window + void removeToolTip(); + + //! A function translate background of window in to PostScript file on disk + /*! + *\param hFile the name of PostScript file chosen by user + *\param aViewerCS the GLViewer_CoordSystem of window + *\param aPSCS the GLViewer_CoordSystem of PostScript page + */ + virtual void translateBackgroundToPS( QFile& hFile, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aPSCS ); + + //! A function repaints OpenGL scene in export mode + /* Repaints all objects in only current view */ + void exportRepaint(); #ifdef WIN32 - virtual void translateBackgroundToEMF( HDC dc, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aEMFCS ); + //! A function translate background of window in to EMF file on disk + //! + /*! + *\warning WIN32 only + * + *\param dc the name of HDC associated with file chosen by user + *\param aViewerCS the GLViewer_CoordSystem of window + *\param aEMFCS the GLViewer_CoordSystem of EMF page + */ + virtual void translateBackgroundToEMF( HDC dc, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aEMFCS ); #endif private: - void getBackgroundRectInViewerCS( double& left, double& top, double& right, double& bottom ); - + //! Auxiliary function. Returns rect of window background in viewer coordinate system + void getBackgroundRectInViewerCS( double& left, double& top, double& right, double& bottom ); + protected: - virtual void initializeGL(); - virtual void paintGL(); - virtual void resizeGL( int, int ); - - virtual void paintEvent( QPaintEvent* ); - virtual void mouseMoveEvent( QMouseEvent* ); - virtual void mousePressEvent( QMouseEvent* ); - virtual void mouseReleaseEvent( QMouseEvent* ); - virtual void enterEvent( QEvent* ); - virtual void leaveEvent( QEvent* ); - + /* Redefined QT methods */ + //! A function is called before first display of window (create OpenGL scene) + virtual void initializeGL(); + //! A function is called in earch paint event of window + /* Calling by public method repaint() */ + virtual void paintGL(); + //! A function is called in earch resize event of window + virtual void resizeGL( int, int ); + + + virtual void paintEvent( QPaintEvent* ); + virtual void mouseMoveEvent( QMouseEvent* ); + virtual void mousePressEvent( QMouseEvent* ); + virtual void mouseReleaseEvent( QMouseEvent* ); + + /* Needs to redefine because Window must be updated highlight presentation when mouse enter window */ + virtual void enterEvent( QEvent* ); + /* Needs to redefine because Window must be updated highlight presentation when mouse leave window */ + virtual void leaveEvent( QEvent* ); + private: - GLint myWidth; - GLint myHeight; - - GLfloat myXScale; - GLfloat myYScale; - GLfloat myZScale; - - GLfloat myXPan; - GLfloat myYPan; - GLfloat myZPan; - - GLfloat myRotationStartX; - GLfloat myRotationStartY; - GLfloat myRotationStartZ; - GLfloat myRotationAngle; - GLfloat myRotationCenterX; - GLfloat myRotationCenterY; - GLfloat myRotationCenterZ; - GLfloat myRotationAnglePrev; - - GLboolean myStart; - GLViewer_ViewPort2d* myViewPort; - - //new code - bool isLoadBackground; - QString myBackgroundFile; - GLuint texName; - int myIW; - int myIH; - int myBackgroundSize; - - //GLubyte*** pixels; - QRect myToolTipRect; - - //for export repaint - bool isExportMode; + //! width of window + GLint myWidth; + //! height of window + GLint myHeight; + + //! Scale along X direction + GLfloat myXScale; + //! Scale along Y direction + GLfloat myYScale; + //! Scale along Z direction + /* equals 1 in 2D */ + GLfloat myZScale; + + //! Window offset along X direction + GLfloat myXPan; + //! Window offset along Y direction + GLfloat myYPan; + //! Window offset along Z direction + /* equals 0 in 2D */ + GLfloat myZPan; + + GLfloat myRotationStartX; + GLfloat myRotationStartY; + GLfloat myRotationStartZ; + GLfloat myRotationAngle; + GLfloat myRotationCenterX; + GLfloat myRotationCenterY; + GLfloat myRotationCenterZ; + GLfloat myRotationAnglePrev; + + GLboolean myStart; + GLViewer_ViewPort2d* myViewPort; + + //! True if background is loaded + bool isLoadBackground; + //! File name of background image + QString myBackgroundFile; + //! Texture id of loaded background image + GLuint texName; + //! Width of background image + int myIW; + //! Height of background image + int myIH; + //! Size of background image + int myBackgroundSize; + + QRect myToolTipRect; + + //! Needs for export repaint + bool isExportMode; }; #endif // GLVIEWER_WIDGET_H