Quantum GIS API Documentation  1.7.4
src/core/qgsrectangle.h
Go to the documentation of this file.
00001 /***************************************************************************
00002                           qgsrectangle.h  -  description
00003                              -------------------
00004     begin                : Sat Jun 22 2002
00005     copyright            : (C) 2002 by Gary E.Sherman
00006     email                : sherman at mrcc.com
00007 ***************************************************************************/
00008 
00009 /***************************************************************************
00010  *                                                                         *
00011  *   This program is free software; you can redistribute it and/or modify  *
00012  *   it under the terms of the GNU General Public License as published by  *
00013  *   the Free Software Foundation; either version 2 of the License, or     *
00014  *   (at your option) any later version.                                   *
00015  *                                                                         *
00016  ***************************************************************************/
00017 /* $Id$ */
00018 
00019 #ifndef QGSRECT_H
00020 #define QGSRECT_H
00021 
00022 #include <iosfwd>
00023 
00024 class QString;
00025 
00026 #include "qgspoint.h"
00027 
00028 
00035 class CORE_EXPORT QgsRectangle
00036 {
00037   public:
00039     QgsRectangle( double xmin = 0, double ymin = 0, double xmax = 0, double ymax = 0 );
00041     QgsRectangle( QgsPoint const & p1, QgsPoint const & p2 );
00043     QgsRectangle( const QgsRectangle &other );
00045     ~QgsRectangle();
00047     //normalised after construction.
00048     void set( const QgsPoint& p1, const QgsPoint& p2 );
00050     //  normalised after construction.
00051     void set( double xmin, double ymin, double xmax, double ymax );
00053     void setXMinimum( double x );
00055     void setXMaximum( double x );
00057     void setYMinimum( double y );
00059     void setYMaximum( double y );
00061     // and max corner is at min. It is NOT normalized.
00062     void setMinimal();
00064     double xMaximum() const;
00066     double xMinimum() const;
00068     double yMaximum() const;
00070     double yMinimum() const;
00072     void normalize();
00074     double width() const;
00076     double height() const;
00078     QgsPoint center() const;
00080     void scale( double, const QgsPoint *c = 0 );
00082     void expand( double, const QgsPoint *c = 0 );
00084     QgsRectangle intersect( const QgsRectangle *rect ) const;
00086     bool intersects( const QgsRectangle& rect ) const;
00089     bool contains( const QgsRectangle& rect ) const;
00092     bool contains( const QgsPoint &p ) const;
00094     void combineExtentWith( QgsRectangle *rect );
00096     void combineExtentWith( double x, double y );
00098     bool isEmpty() const;
00100     QString asWktCoordinates() const;
00102     QString toString( bool automaticPrecision = false ) const;
00104     QString toString( int thePrecision ) const;
00106     QString asPolygon() const;
00110     bool operator==( const QgsRectangle &r1 ) const;
00114     bool operator!=( const QgsRectangle &r1 ) const;
00118     QgsRectangle & operator=( const QgsRectangle &r1 );
00119 
00121     void unionRect( const QgsRectangle& rect );
00122 
00125     bool isFinite() const;
00126 
00127   protected:
00128 
00129     // These are protected instead of private so that things like
00130     // the QgsPostGisBox3d can get at them.
00131 
00132     double xmin;
00133     double ymin;
00134     double xmax;
00135     double ymax;
00136 
00137 };
00138 
00139 
00140 inline QgsRectangle::~QgsRectangle()
00141 {
00142 }
00143 
00144 inline void QgsRectangle::setXMinimum( double x )
00145 {
00146   xmin = x;
00147 }
00148 
00149 inline void QgsRectangle::setXMaximum( double x )
00150 {
00151   xmax = x;
00152 }
00153 
00154 inline void QgsRectangle::setYMinimum( double y )
00155 {
00156   ymin = y;
00157 }
00158 
00159 inline void QgsRectangle::setYMaximum( double y )
00160 {
00161   ymax = y;
00162 }
00163 
00164 inline double QgsRectangle::xMaximum() const
00165 {
00166   return xmax;
00167 }
00168 
00169 inline double QgsRectangle::xMinimum() const
00170 {
00171   return xmin;
00172 }
00173 
00174 inline double QgsRectangle::yMaximum() const
00175 {
00176   return ymax;
00177 }
00178 
00179 inline double QgsRectangle::yMinimum() const
00180 {
00181   return ymin;
00182 }
00183 
00184 inline double QgsRectangle::width() const
00185 {
00186   return xmax - xmin;
00187 }
00188 
00189 inline double QgsRectangle::height() const
00190 {
00191   return ymax - ymin;
00192 }
00193 
00194 inline QgsPoint QgsRectangle::center() const
00195 {
00196   return QgsPoint( xmin + width() / 2,  ymin + height() / 2 );
00197 }
00198 inline std::ostream& operator << ( std::ostream& os, const QgsRectangle &r )
00199 {
00200   return os << r.toString().toLocal8Bit().data();
00201 }
00202 
00203 #endif // QGSRECT_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines