00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef GEOS_NODING_SCALEDNODER_H
00021 #define GEOS_NODING_SCALEDNODER_H
00022
00023 #include <geos/export.h>
00024
00025 #include <cassert>
00026 #include <vector>
00027
00028 #include <geos/inline.h>
00029 #include <geos/noding/Noder.h>
00030
00031 #include <geos/util.h>
00032
00033
00034 namespace geos {
00035 namespace geom {
00036 class Coordinate;
00037 class CoordinateSequence;
00038 }
00039 namespace noding {
00040 class SegmentString;
00041 }
00042 }
00043
00044 namespace geos {
00045 namespace noding {
00046
00057 class GEOS_DLL ScaledNoder : public Noder {
00058
00059 public:
00060
00061 bool isIntegerPrecision() { return (scaleFactor == 1.0); }
00062
00063 ScaledNoder(Noder& n, double nScaleFactor,
00064 double nOffsetX=0.0, double nOffsetY=0.0)
00065 :
00066 noder(n),
00067 scaleFactor(nScaleFactor),
00068 offsetX(nOffsetX),
00069 offsetY(nOffsetY),
00070 isScaled(nScaleFactor!=1.0)
00071 {}
00072
00073 ~ScaledNoder();
00074
00075 std::vector<SegmentString*>* getNodedSubstrings() const;
00076
00077 void computeNodes(std::vector<SegmentString*>* inputSegStr);
00078
00079
00080
00081 void filter_ro(const geom::Coordinate* c)
00082 {
00083 ::geos::ignore_unused_variable_warning(c);
00084 assert(0);
00085 }
00086
00087 void filter_rw(geom::Coordinate* c) const;
00088
00089 private:
00090
00091 Noder& noder;
00092
00093 double scaleFactor;
00094
00095 double offsetX;
00096
00097 double offsetY;
00098
00099 bool isScaled;
00100
00101 void rescale(std::vector<SegmentString*>& segStrings) const;
00102
00103 void scale(std::vector<SegmentString*>& segStrings) const;
00104
00105 class Scaler;
00106
00107 class ReScaler;
00108
00109 friend class ScaledNoder::Scaler;
00110
00111 friend class ScaledNoder::ReScaler;
00112
00113 mutable std::vector<geom::CoordinateSequence*> newCoordSeq;
00114
00115
00116 ScaledNoder(const ScaledNoder& other);
00117 ScaledNoder& operator=(const ScaledNoder& rhs);
00118 };
00119
00120 }
00121 }
00122
00123
00124
00125
00126
00127
00128 #endif // GEOS_NODING_SCALEDNODER_H
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158