diff options
Diffstat (limited to 'kpovmodeler/pmline.h')
-rw-r--r-- | kpovmodeler/pmline.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/kpovmodeler/pmline.h b/kpovmodeler/pmline.h new file mode 100644 index 00000000..399555ea --- /dev/null +++ b/kpovmodeler/pmline.h @@ -0,0 +1,102 @@ +//-*-C++-*- +/* +************************************************************************** + description + -------------------- + copyright : (C) 2000-2001 by Andreas Zehender + email : [email protected] +************************************************************************** + +************************************************************************** +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +**************************************************************************/ + + +#ifndef PMLINES_H +#define PMLINES_H + +#include <qptrlist.h> +#include <GL/gl.h> +#include "pmdebug.h" + +/** + * Line to display with index of start and end point. + * + * Line of a @ref PMViewStructure. Only the indices in a @ref PMPointArray + * are stored. + * + * Optimized for OpenGL + */ +class PMLine +{ +public: + /** + * Default constructor + */ + PMLine( ) + { + m_start = 0; + m_end = 0; + } + /** + * Creates a line with start point si and end point ei. If si is greater + * than ei, si and ei are swapped. + */ + PMLine( const GLuint si, const GLuint ei ) + { m_start = si; m_end = ei; checkPoints( ); } + + /** + * Sets the start point. + */ + void setStartPoint( GLuint si ) { m_start = si; checkPoints( ); } + /** + * Sets the end point. + */ + void setEndPoint( GLuint ei ) { m_end = ei; checkPoints( ); } + /** + * Returns the start point. + */ + GLuint startPoint( ) const { return m_start; } + /** + * Returns the end point. + */ + GLuint endPoint( ) const { return m_end; } + +private: + /** + * Swaps the two points. + */ + void swapPoints( ) { GLuint help = m_start; m_start = m_end; m_end = help; } + /** + * Checks, if si < ei and swaps the two points if necessary + */ + void checkPoints( ) + { + if( m_start == m_end ) kdError( PMArea ) << "Start index = end index in PMLine" << "\n"; + if( m_start > m_end ) swapPoints( ); + } + /** + * The start and end points (indices!) + * + * THESE MEMBERS HAVE TO BE THE ONLY ONE (for rendering with OpenGl) + */ + GLuint m_start, m_end; +}; + +typedef QPtrListIterator<PMLine> PMLineListIterator; + +/** + * A list of @ref PMLine objects. + * + * This class stores all lines of a @ref PMViewStructure. A line is + * described by a start and end point. Only the indices in a @ref PMPointArray + * are stored. + */ +typedef QMemArray<PMLine> PMLineArray; + +#endif |