1 // Copyright (C) 2005 OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
19 // Author : OPEN CASCADE
22 // File: GLViewer_BaseObjects.h
23 // Created: November, 2004
25 #ifndef GLVIEWER_BASEOBJECTS_H
26 #define GLVIEWER_BASEOBJECTS_H
29 #include "GLViewer_Object.h"
32 #include <qvaluelist.h>
34 #include <TColStd_SequenceOfInteger.hxx>
37 #pragma warning( disable:4251 )
41 * Class GLViewer_MarkerSet
45 class GLVIEWER_API GLViewer_MarkerSet : public GLViewer_Object
49 GLViewer_MarkerSet( int number = 1, float size = 5.0, const QString& toolTip = "GLMarker" );
51 ~GLViewer_MarkerSet();
54 virtual void compute();
55 virtual GLViewer_Drawer* createDrawer();
57 virtual GLboolean highlight( GLfloat x, GLfloat y, GLfloat tol = 15.0, GLboolean isCircle = GL_FALSE );
58 virtual GLboolean unhighlight();
59 virtual GLboolean select( GLfloat x, GLfloat y, GLfloat tol, GLViewer_Rect rect, GLboolean isFull = GL_FALSE,
60 GLboolean isCircle = GL_FALSE, GLboolean isShift = GL_FALSE );
61 virtual GLboolean unselect();
63 virtual GLViewer_Rect* getUpdateRect();
65 virtual void moveObject( float, float, bool fromGroup = false );
67 virtual QByteArray getByteCopy();
68 virtual bool initializeFromByteCopy( QByteArray );
70 virtual bool translateToPS( QFile& hFile, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aPSCS );
71 virtual bool translateToHPGL( QFile& hFile, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aHPGLCS );
74 virtual bool translateToEMF( HDC dc, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aEMFCS );
77 //! Sets array of x coords of markers
78 void setXCoord( GLfloat* xCoord, int size );
79 //! Sets array of y coords of markers
80 void setYCoord( GLfloat* yCoord, int size );
82 GLfloat* getXCoord() const { return myXCoord; }
84 GLfloat* getYCoord() const { return myYCoord; }
86 //! Sets markers number
87 void setNumMarkers( GLint );
88 //! returns markers number
89 GLint getNumMarkers() const { return myNumber; };
90 //! Sets merker radius
91 void setMarkerSize( const float size ) { myMarkerSize = size; }
92 //! Returns merker radius
93 float getMarkerSize() const { return myMarkerSize; }
95 //! Export numbers of heghlighted/selected markers
96 void exportNumbers( QValueList<int>& high, QValueList<int>& unhigh,
97 QValueList<int>& sel, QValueList<int>& unsel );
99 //! Returns selected numbers
100 QValueList<int> getSelectedElements() { return mySelNumbers; }
101 //! Adds or remove selected number
102 bool addOrRemoveSelected( int index );
103 //! Adds selected numbers
104 void addSelected( const TColStd_SequenceOfInteger& );
105 //! Sets selected nembers
106 void setSelected( const TColStd_SequenceOfInteger& );
112 GLfloat myMarkerSize;
113 QValueList<int> myHNumbers;
114 QValueList<int> myUHNumbers;
115 QValueList<int> mySelNumbers;
116 QValueList<int> myCurSelNumbers;
117 QValueList<int> myUSelNumbers;
118 QValueList<int> myPrevHNumbers;
119 TColStd_SequenceOfInteger mySelectedIndexes;
123 * Class GLViewer_Polyline
127 class GLVIEWER_API GLViewer_Polyline: public GLViewer_Object
130 GLViewer_Polyline( int number = 1, float size = 5.0, const QString& toolTip = "GLPolyline" );
131 ~GLViewer_Polyline();
134 virtual void compute();
135 virtual GLViewer_Drawer* createDrawer();
137 virtual GLboolean highlight( GLfloat x, GLfloat y, GLfloat tol = 15.0, GLboolean isCircle = GL_FALSE );
138 virtual GLboolean unhighlight();
139 virtual GLboolean select( GLfloat x, GLfloat y, GLfloat tol, GLViewer_Rect rect, GLboolean isFull = GL_FALSE,
140 GLboolean isCircle = GL_FALSE, GLboolean isShift = GL_FALSE );
141 virtual GLboolean unselect();
143 virtual GLViewer_Rect* getUpdateRect();
145 virtual void moveObject( float, float, bool fromGroup = false );
147 virtual QByteArray getByteCopy();
148 virtual bool initializeFromByteCopy( QByteArray );
150 virtual bool translateToPS( QFile& hFile, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aPSCS );
151 virtual bool translateToHPGL( QFile& hFile, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aHPGLCS );
154 virtual bool translateToEMF( HDC dc, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aEMFCS );
157 //! Sets array of x coords of points
158 void setXCoord( GLfloat* xCoord, int size );
159 //! Sets array of y coords of points
160 void setYCoord( GLfloat* yCoord, int size );
162 GLfloat* getXCoord() const { return myXCoord; }
164 GLfloat* getYCoord() const { return myYCoord; }
166 //! SetS number of points
167 void setNumber( GLint );
168 //! Returns number of points
169 GLint getNumber() const { return myNumber; };
171 //! On/off closed status of polyline
172 void setClosed( GLboolean closed ) { myIsClosed = closed; }
173 //! Checks closed status of polyline
174 GLboolean isClosed() const { return myIsClosed; }
176 //! On/off highlight as whole object status
177 void setHighSelAll( GLboolean highSelAll ) { myHighSelAll = highSelAll; }
178 //! Checks highlight as whole object status
179 GLboolean isHighSelAll() const { return myHighSelAll; }
181 //! Export numbers of heghlighted/selected lines
182 void exportNumbers( QValueList<int>& high, QValueList<int>& unhigh,
183 QValueList<int>& sel, QValueList<int>& unsel );
185 //! Returns numbers of selected lines
186 QValueList<int> getSelectedElements() { return mySelNumbers; }
192 GLboolean myIsClosed;
193 GLboolean myHighSelAll;
195 QValueList<int> myHNumbers;
196 QValueList<int> myUHNumbers;
197 QValueList<int> mySelNumbers;
198 QValueList<int> myUSelNumbers;
199 QValueList<int> myCurSelNumbers;
200 QValueList<int> myPrevHNumbers;
201 TColStd_SequenceOfInteger mySelectedIndexes;
203 GLboolean myHighFlag;
206 // Class: GLViewer_TextObject
207 // Descr: Text as Object for OpenGL
209 class GLVIEWER_API GLViewer_TextObject : public GLViewer_Object
212 GLViewer_TextObject( const QString&, float xPos = 0, float yPos = 0,
213 const QColor& color = QColor( 0, 255, 0 ), const QString& toolTip = "GLText" );
214 ~GLViewer_TextObject();
216 virtual void compute();
217 virtual GLViewer_Drawer* createDrawer();
219 virtual void setDrawer( GLViewer_Drawer* theDrawer );
221 virtual GLboolean highlight( GLfloat x, GLfloat y, GLfloat tol, GLboolean isCircle = GL_FALSE );
222 virtual GLboolean unhighlight();
223 virtual GLboolean select( GLfloat x, GLfloat y, GLfloat tol, GLViewer_Rect rect, GLboolean isFull = GL_FALSE,
224 GLboolean isCircle = GL_FALSE, GLboolean isShift = GL_FALSE );
225 virtual GLboolean unselect();
227 virtual GLViewer_Rect* getUpdateRect();
229 virtual void moveObject( float, float, bool fromGroup = false );
231 virtual QByteArray getByteCopy();
232 virtual bool initializeFromByteCopy( QByteArray );
234 virtual bool translateToPS( QFile& hFile, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aPSCS );
235 virtual bool translateToHPGL( QFile& hFile, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aHPGLCS );
238 virtual bool translateToEMF( HDC dc, GLViewer_CoordSystem* aViewerCS, GLViewer_CoordSystem* aEMFCS );
241 int getWidth(){ return myWidth; }
242 int getHeight(){ return myWidth; }
243 void setWidth( int w ){ myWidth=w; }
244 void setHeight( int h ){ myHeight=h; }
253 #pragma warning ( default:4251 )