• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List

PrecisionModel.h

00001 /**********************************************************************
00002  * $Id: PrecisionModel.h 2556 2009-06-06 22:22:28Z strk $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2006 Refractions Research Inc.
00008  *
00009  * This is free software; you can redistribute and/or modify it under
00010  * the terms of the GNU Lesser General Public Licence as published
00011  * by the Free Software Foundation. 
00012  * See the COPYING file for more information.
00013  *
00014  **********************************************************************
00015  *
00016  * Last port: geom/PrecisionModel.java rev. 1.51 (JTS-1.7)
00017  *
00018  **********************************************************************/
00019 
00020 #ifndef GEOS_GEOM_PRECISIONMODEL_H
00021 #define GEOS_GEOM_PRECISIONMODEL_H
00022 
00023 #include <geos/export.h>
00024 #include <geos/inline.h>
00025 
00026 
00027 #include <string>
00028 
00029 // Forward declarations
00030 namespace geos {
00031         namespace io {
00032                 class Unload;
00033         }
00034         namespace geom {
00035                 class Coordinate;
00036         }
00037 }
00038 
00039 namespace geos {
00040 namespace geom { // geos::geom
00041 
00083 class GEOS_DLL PrecisionModel {
00084 friend class io::Unload;
00085 
00086 public:
00087 
00089         typedef enum {
00090 
00097                 FIXED,
00098 
00104                 FLOATING,
00105 
00111                 FLOATING_SINGLE
00112 
00113         } Type;
00114         
00116         PrecisionModel(void);
00117 
00119         //
00124         PrecisionModel(Type nModelType);
00125 
00142         PrecisionModel(double newScale, double newOffsetX, double newOffsetY);
00143 
00155         PrecisionModel(double newScale);
00156 
00157         // copy constructor
00158         PrecisionModel(const PrecisionModel &pm);
00159 
00161         ~PrecisionModel(void);
00162 
00163 
00165         //
00170         static const double maximumPreciseValue;
00171 
00182         double makePrecise(double val) const;
00183 
00185         void makePrecise(Coordinate& coord) const;
00186 
00187         void makePrecise(Coordinate* coord) const;
00188 
00190         //
00194         bool isFloating() const;
00195 
00199         //
00206         int getMaximumSignificantDigits() const;
00207 
00209         //
00212         Type getType() const;
00213 
00215         double getScale() const;
00216 
00218         //
00223         double getOffsetX() const;
00224 
00226         //
00231         double getOffsetY() const;
00232 
00242         //void toInternal(const Coordinate& external, Coordinate* internal) const;
00243 
00244         /*
00245          *  Returns the precise representation of <code>external</code>.
00246          *
00247          *@param  external  the original coordinate
00248          *@return
00249          *      the coordinate whose values will be changed to the precise
00250          *      representation of <code>external</code>
00251          * @deprecated use makePrecise instead
00252          */
00253         //Coordinate* toInternal(const Coordinate& external) const;
00254 
00255         /*
00256          *  Returns the external representation of <code>internal</code>.
00257          *
00258          *@param  internal  the original coordinate
00259          *@return           the coordinate whose values will be changed to the
00260          *      external representation of <code>internal</code>
00261          * @deprecated no longer needed, since internal representation is same as external representation
00262          */
00263         //Coordinate* toExternal(const Coordinate& internal) const;
00264 
00265         /*
00266          *  Sets <code>external</code> to the external representation of
00267          *  <code>internal</code>.
00268          *
00269          * @param  internal  the original coordinate
00270          * @param  external
00271          *      the coordinate whose values will be changed to the
00272          *      external representation of <code>internal</code>
00273          * @deprecated no longer needed, since internal representation is same as external representation
00274          */
00275         //void toExternal(const Coordinate& internal, Coordinate* external) const;
00276 
00277         std::string toString() const;
00278 
00282         //
00298         int compareTo(const PrecisionModel* other) const;
00299 
00300 private:
00301 
00309         void setScale(double newScale);
00310                         // throw IllegalArgumentException
00311 
00312         Type modelType;
00313 
00314         double scale;
00315 
00316 };
00317 
00318 // Equality operator for PrecisionModel, deprecate it ?
00319 //inline bool operator==(const PrecisionModel& a, const PrecisionModel& b);
00320 
00321 } // namespace geos::geom
00322 } // namespace geos
00323 
00324 #ifdef GEOS_INLINE
00325 # include "geos/geom/PrecisionModel.inl"
00326 #endif
00327 
00328 #endif // ndef GEOS_GEOM_PRECISIONMODEL_H
00329 
00330 /**********************************************************************
00331  * $Log$
00332  * Revision 1.6  2006/04/06 12:34:07  strk
00333  * Port info, more debugging lines, doxygen comments
00334  *
00335  * Revision 1.5  2006/04/03 14:07:32  strk
00336  * Commented out obsoleted toInternal() method
00337  *
00338  * Revision 1.4  2006/03/28 08:57:37  strk
00339  * Comments cleanup, system headers included after project headers
00340  *
00341  * Revision 1.3  2006/03/24 09:52:41  strk
00342  * USE_INLINE => GEOS_INLINE
00343  *
00344  * Revision 1.2  2006/03/22 16:58:35  strk
00345  * Removed (almost) all inclusions of geom.h.
00346  * Removed obsoleted .cpp files.
00347  * Fixed a bug in WKTReader not using the provided CoordinateSequence
00348  * implementation, optimized out some memory allocations.
00349  *
00350  * Revision 1.1  2006/03/09 16:46:49  strk
00351  * geos::geom namespace definition, first pass at headers split
00352  *
00353  **********************************************************************/

Generated on Thu Jul 22 2010 for GEOS by  doxygen 1.7.1