X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGLViewer%2FGLViewer_Drawer.h;h=f936da990d91b8e0f573060db9b0ab5d3f288767;hb=797f7c8b3ebf8d8a1eabc9082f8bd79f6f7ea413;hp=22ca4842a7d4f8eed3cb3a438728a0bd710345ef;hpb=1315eaf2d7e6a45d893dd74fd598798440a6ee0a;p=modules%2Fgui.git diff --git a/src/GLViewer/GLViewer_Drawer.h b/src/GLViewer/GLViewer_Drawer.h index 22ca4842a..f936da990 100644 --- a/src/GLViewer/GLViewer_Drawer.h +++ b/src/GLViewer/GLViewer_Drawer.h @@ -1,31 +1,56 @@ +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// Author : OPEN CASCADE // File: GLViewer_Drawer.h // Created: November, 2004 -// Author: OCC team -// Copyright (C) CEA 2004 - +// #ifndef GLVIEWER_DRAWER_H #define GLVIEWER_DRAWER_H -#ifdef WNT +#ifdef WIN32 #include "windows.h" #endif -#include -#include -#include -#include -#include +#include +#include +class QFile; + +#ifdef __APPLE__ +#include +#else #include +#endif #include "GLViewer.h" #include "GLViewer_Defs.h" +#include "GLViewer_Geom.h" class GLViewer_Object; class GLViewer_Rect; class GLViewer_CoordSystem; -#ifdef WNT +#ifdef WIN32 #pragma warning( disable:4251 ) #endif /*! @@ -48,29 +73,41 @@ struct GLVIEWER_API GLViewer_TexIdStored */ struct GLVIEWER_API GLViewer_TexFindId { - //! Font description - QString myFontString; - //! View POrt ID - int myViewPortId; + //! Font family description + QString myFontFamily; + //! Bold parameter + bool myIsBold; + //! Italic parameter + bool myIsItal; + //! Underline parameter + bool myIsUndl; + //! Font Size + int myPointSize; + //! View Port ID + long myViewPortId; //! Overloaded operator for using struct as MAP key bool operator < (const GLViewer_TexFindId theStruct) const { - if ( myViewPortId != theStruct.myViewPortId ) return myViewPortId < theStruct.myViewPortId; - else return myFontString < theStruct.myFontString; + if ( myViewPortId != theStruct.myViewPortId ) + return myViewPortId < theStruct.myViewPortId; + else if ( myPointSize != theStruct.myPointSize ) + return myPointSize < theStruct.myPointSize; + else if ( myIsBold != theStruct.myIsBold ) + return myIsBold < theStruct.myIsBold; + else if ( myIsItal != theStruct.myIsItal ) + return myIsItal < theStruct.myIsItal; + else if ( myIsUndl != theStruct.myIsUndl ) + return myIsUndl < theStruct.myIsUndl; + else + return myFontFamily < theStruct.myFontFamily; } }; -/*************************************************************************** -** Class: GLViewer_TexFont -** Descr: Font for GLViewer_Drawer -** Module: GLViewer -** Created: UI team, 03.10.01 -****************************************************************************/ +/*! + \class GLViewer_TexFont + Font for GLViewer_Drawer, Drawing bitmap and texture fonts in GLViewer +*/ -/*! - * Class GLViewer_TexFont - * Drawing bitmap and texture fonts in GLViewer - */ class GLVIEWER_API GLViewer_TexFont { public: @@ -78,17 +115,25 @@ public: GLViewer_TexFont(); //! A constructor /* - * \param theFont - a base font - * \param theSeparator - separator between letters + * \param theFont - a base font + * \param theSeparator - separator between letters + * \param theIsResizeable - specifies whether text drawn by this object can be scaled along with the scene + * \param theMinMagFilter - min/mag filter, affects text sharpness */ - GLViewer_TexFont( QFont* theFont, int theSeparator = 2 ); + GLViewer_TexFont( QFont* theFont, + int theSeparator = 2, + bool theIsResizeable = false, + GLuint theMinMagFilter = GL_LINEAR/*_ATTENUATION*/ ); //! A destructor ~GLViewer_TexFont(); //! Generating font texture - void generateTexture(); + bool generateTexture(); //! Drawing string theStr in point with coords theX and theY - void drawString( QString theStr, GLdouble theX = 0.0, GLdouble theY = 0.0 ); + void drawString( QString theStr, + GLdouble theX = 0.0, + GLdouble theY = 0.0, + GLfloat theScale = 1.0 ); //! Returns separator between letters int getSeparator(){ return mySeparator; } @@ -107,8 +152,14 @@ public: static QMap TexFontBase; //! Map for strorage generated bitmaps fonts static QMap BitmapFontCache; + +private: + //! Initializes font parameters + void init(); -protected: +private: + //! Number of characters in the font texture + int myNbSymbols; //! Array of letter width int* myWidths; //! Array of letter positions in texture @@ -123,19 +174,21 @@ protected: int myTexFontHeight; //! Separator between letters int mySeparator; + //! Flag controlling scalability of this texmapped font + bool myIsResizeable; + //! Min/mag filter + GLuint myMinMagFilter; + //! Font height + int myFontHeight; + //! Diagnostic information + int myMaxRowWidth; }; -/*************************************************************************** -** Class: GLViewer_Drawer -** Descr: Drawer for GLObject -** Module: GLViewer -** Created: UI team, 03.10.01 -****************************************************************************/ /*! - * Class GLViewer_Drawer - * Drawer for GLViewer_Objects. - * Drawer creates only one times per one type of object - */ + \class GLViewer_Drawer + Drawer for GLViewer_Objects. + Drawer creates only one times per one type of object +*/ class GLVIEWER_API GLViewer_Drawer { public: @@ -187,6 +240,9 @@ public: //! Returns object priority int getPriority() const { return myPriority; } + + //! The function enables and disables antialiasing in Open GL (for points, lines and polygons). + void setAntialiasing(const bool on); //! Clears all generated textures static void destroyAllTextures(); @@ -220,16 +276,64 @@ public: #endif //! Loads texture from file - static GLuint loadTexture( const QString& fileName ); + /*! + *\param fileName - the name of texture file + *\param x_size - the horizontal size of picture ( less or equal texture horizontal size ) + *\param y_size - the vertical size of picture ( less or equal texture vertical size ) + *\param t_size - the size of texture ( texture vertical size equals texture horizontal size ) + */ + static GLuint loadTexture( const QString& fileName, + GLint* x_size = 0, + GLint* y_size = 0, + GLint* t_size = 0); //! Draw square texture /*! *\param texture - the texture ID - *\param size - the size of texture + *\param size - the size of square texture + *\param x - x coord + *\param y - y coord + */ + void drawTexture( GLuint texture, + GLint size, + GLfloat x, + GLfloat y ); + + //! Draw texture + /*! + *\param texture - the texture ID + *\param x_size - the horizontal size of texture + *\param y_size - the vertical size of texture + *\param x - x coord + *\param y - y coord + */ + void drawTexture( GLuint texture, + GLint x_size, + GLint y_size, + GLfloat x, + GLfloat y ); + + //! Draw texture part + /*! + *\param texture - the texture ID + *\param x_ratio - the horizontal ratio of texture part + *\param y_ratio - the vertical ratio of texture part + *\param x_size - the horizontal size of texture + *\param y_size - the vertical size of texture *\param x - x coord *\param y - y coord + *\param scale - common scale factor ( if = 0, use drawer scales ) */ - void drawTexture( GLuint texture, GLint size, GLfloat x, GLfloat y ); + void drawTexturePart( GLuint texture, + GLfloat x_ratio, + GLfloat y_ratio, + GLfloat x_size, + GLfloat y_size, + GLfloat x, + GLfloat y, + GLfloat scale = 0 ); + + //! Draw text string /*! @@ -243,7 +347,7 @@ public: */ void drawText( const QString& text, GLfloat xPos, - GLfloat yPos, + GLfloat yPos, const QColor& color, QFont* aFont, int theSeparator, @@ -260,17 +364,62 @@ public: *\param smallFont - font format */ void drawGLText( QString text, - float x, - float y, + float x, + float y, int hPosition = GLText_Center, int vPosition = GLText_Center, QColor color = Qt::black, bool smallFont = false ); + //! Sets a default font to be used by drawGLText method + /*! + *\param font - the default font + */ + inline void setFont( const QFont& font ) { myFont = font; } + + //! Returns a default font used by drawGLText method + inline QFont font() const { return myFont; } + + //! Sets a default text displaying format to be used by drawGLText method + /*! + *\param format - the default text displaying format + */ + inline void setTextFormat( const DisplayTextFormat format ) { myTextFormat = format; } + + //! Returns a default text displaying format used by drawGLText method + inline DisplayTextFormat textFormat() const { return myTextFormat; } + + //! Sets a text string displaying scale factor (used only with text format DTF_TEXTURE_SCALABLE) + /*! + *\param factor - scale factor + */ + inline void setTextScale( const GLfloat factor ) { myTextScale = factor; } + + //! Returns a text string displaying scale factor + inline GLfloat textScale() const { return myTextScale; } + + //! Returns a rectangle of text (without viewer scale) + GLViewer_Rect textRect( const QString& ) const; + + //! Draw rectangle with predefined color static void drawRectangle( GLViewer_Rect* theRect, QColor = Qt::black ); protected: + //! Draw basic primitives: rectangle, contour, polygon, vertex, cross, arrow + //* with predefined color + static void drawRectangle( GLViewer_Rect*, GLfloat, GLfloat = 0, QColor = Qt::black, + bool = false, QColor = Qt::white ); + static void drawContour( GLViewer_Rect*, QColor, GLfloat, GLushort, bool ); + static void drawContour( const GLViewer_PntList&, QColor, GLfloat ); + static void drawPolygon( GLViewer_Rect*, QColor, GLushort, bool ); + static void drawPolygon( const GLViewer_PntList&, QColor ); + static void drawVertex( GLfloat, GLfloat, QColor ); + static void drawCross( GLfloat, GLfloat, QColor ); + static void drawArrow( const GLfloat red, const GLfloat green, const GLfloat blue, + GLfloat, GLfloat, GLfloat, GLfloat, + GLfloat, GLfloat, GLfloat, GLboolean = GL_FALSE ); + //! Draw object text virtual void drawText( GLViewer_Object* theObject ); @@ -280,7 +429,7 @@ protected: float myYScale; //! List of objects - QValueList myObjects; + QList myObjects; //! List generated textures GLuint myTextList; @@ -288,9 +437,18 @@ protected: QString myObjectType; //! Dislay priority int myPriority; + + //! Default font for drawGLText() method + QFont myFont; + //! Default text displaying format for drawGLText() method + DisplayTextFormat myTextFormat; + + //! Scale factor for text string draw, by default 0.125 + //! (used only with text format DTF_TEXTURE_SCALABLE) + GLfloat myTextScale; }; -#ifdef WNT +#ifdef WIN32 #pragma warning ( default:4251 ) #endif