GEOS  3.3.3
PrecisionModel.h
1 /**********************************************************************
2  * $Id: PrecisionModel.h 3292 2011-04-22 13:04:20Z strk $
3  *
4  * GEOS - Geometry Engine Open Source
5  * http://geos.refractions.net
6  *
7  * Copyright (C) 2011 Sandro Santilli <strk@keybit.net>
8  * Copyright (C) 2006 Refractions Research Inc.
9  *
10  * This is free software; you can redistribute and/or modify it under
11  * the terms of the GNU Lesser General Public Licence as published
12  * by the Free Software Foundation.
13  * See the COPYING file for more information.
14  *
15  **********************************************************************
16  *
17  * Last port: geom/PrecisionModel.java r378 (JTS-1.12)
18  *
19  **********************************************************************/
20 
21 #ifndef GEOS_GEOM_PRECISIONMODEL_H
22 #define GEOS_GEOM_PRECISIONMODEL_H
23 
24 #include <geos/export.h>
25 #include <geos/inline.h>
26 
27 
28 #include <string>
29 
30 // Forward declarations
31 namespace geos {
32  namespace io {
33  class Unload;
34  }
35  namespace geom {
36  class Coordinate;
37  }
38 }
39 
40 namespace geos {
41 namespace geom { // geos::geom
42 
88 class GEOS_DLL PrecisionModel {
89 friend class io::Unload;
90 
91 public:
92 
94  typedef enum {
95 
103 
110 
116  FLOATING_SINGLE
117 
118  } Type;
119 
121  PrecisionModel(void);
122 
124  //
129  PrecisionModel(Type nModelType);
130 
147  PrecisionModel(double newScale, double newOffsetX, double newOffsetY);
148 
160  PrecisionModel(double newScale);
161 
162  // copy constructor
163  PrecisionModel(const PrecisionModel &pm);
164 
166  ~PrecisionModel(void);
167 
168 
170  //
175  static const double maximumPreciseValue;
176 
187  double makePrecise(double val) const;
188 
190  void makePrecise(Coordinate& coord) const;
191 
192  void makePrecise(Coordinate* coord) const;
193 
195  //
199  bool isFloating() const;
200 
204  //
211  int getMaximumSignificantDigits() const;
212 
214  //
217  Type getType() const;
218 
220  double getScale() const;
221 
223  //
228  double getOffsetX() const;
229 
231  //
236  double getOffsetY() const;
237 
247  //void toInternal(const Coordinate& external, Coordinate* internal) const;
248 
249  /*
250  * Returns the precise representation of <code>external</code>.
251  *
252  *@param external the original coordinate
253  *@return
254  * the coordinate whose values will be changed to the precise
255  * representation of <code>external</code>
256  * @deprecated use makePrecise instead
257  */
258  //Coordinate* toInternal(const Coordinate& external) const;
259 
260  /*
261  * Returns the external representation of <code>internal</code>.
262  *
263  *@param internal the original coordinate
264  *@return the coordinate whose values will be changed to the
265  * external representation of <code>internal</code>
266  * @deprecated no longer needed, since internal representation is same as external representation
267  */
268  //Coordinate* toExternal(const Coordinate& internal) const;
269 
270  /*
271  * Sets <code>external</code> to the external representation of
272  * <code>internal</code>.
273  *
274  * @param internal the original coordinate
275  * @param external
276  * the coordinate whose values will be changed to the
277  * external representation of <code>internal</code>
278  * @deprecated no longer needed, since internal representation is same as external representation
279  */
280  //void toExternal(const Coordinate& internal, Coordinate* external) const;
281 
282  std::string toString() const;
283 
287  //
303  int compareTo(const PrecisionModel* other) const;
304 
305 private:
306 
314  void setScale(double newScale);
315  // throw IllegalArgumentException
316 
317  Type modelType;
318 
319  double scale;
320 
321 };
322 
323 // Equality operator for PrecisionModel, deprecate it ?
324 //inline bool operator==(const PrecisionModel& a, const PrecisionModel& b);
325 
326 } // namespace geos::geom
327 } // namespace geos
328 
329 #ifdef GEOS_INLINE
330 # include "geos/geom/PrecisionModel.inl"
331 #endif
332 
333 #endif // ndef GEOS_GEOM_PRECISIONMODEL_H
334 
335 /**********************************************************************
336  * $Log$
337  * Revision 1.6 2006/04/06 12:34:07 strk
338  * Port info, more debugging lines, doxygen comments
339  *
340  * Revision 1.5 2006/04/03 14:07:32 strk
341  * Commented out obsoleted toInternal() method
342  *
343  * Revision 1.4 2006/03/28 08:57:37 strk
344  * Comments cleanup, system headers included after project headers
345  *
346  * Revision 1.3 2006/03/24 09:52:41 strk
347  * USE_INLINE => GEOS_INLINE
348  *
349  * Revision 1.2 2006/03/22 16:58:35 strk
350  * Removed (almost) all inclusions of geom.h.
351  * Removed obsoleted .cpp files.
352  * Fixed a bug in WKTReader not using the provided CoordinateSequence
353  * implementation, optimized out some memory allocations.
354  *
355  * Revision 1.1 2006/03/09 16:46:49 strk
356  * geos::geom namespace definition, first pass at headers split
357  *
358  **********************************************************************/