00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef SWEEPING_COMPARATORS_HH
00026 #define SWEEPING_COMPARATORS_HH
00027
00028 #include "math-extension.hh"
00029 #include "vertex.hh"
00030
00031
00032 namespace GMap3d
00033 {
00034 class CDartVertex;
00035 class CGMapVertex;
00036
00043
00044
00045 class CDartCompare
00046 {
00047 public:
00048
00049
00050
00064 CDartCompare(CGMapVertex* AMap,
00065 int ADirectVertex, int AExtremity1, const CVertex& AZVector);
00066
00067
00068
00069
00070
00083 void project(const CVertex& AVertex,
00084 TCoordinate& AX, TCoordinate& AY) const;
00085
00086
00087
00088 protected:
00089
00090
00091
00092 CGMapVertex* FMap;
00093
00094 int FDirectVertex;
00095 int FExtremity1;
00096
00097 int FCoord1, FCoord2;
00098
00099
00100 };
00101
00102 class CDartLexicoCompare : public CDartCompare
00103 {
00104 public:
00105
00106
00107
00122 CDartLexicoCompare(CGMapVertex* AMap,
00123 int ADirectVertex, int AExtremity1,
00124 const CVertex& AZVector, bool AExactComparison);
00125
00126
00127
00128
00129
00141 bool operator()(CDartVertex* ADart1, CDartVertex* ADart2) const;
00142
00143
00144
00145
00146
00147
00148 bool FExactComparison;
00149
00150
00151 };
00152
00153 class CDartVertexerticalCompare : public CDartCompare
00154 {
00155 public:
00156
00157
00158
00173 CDartVertexerticalCompare(CGMapVertex* AMap,
00174 int ADirectVertex, int AExtremity1,
00175 const CVertex& AZVector);
00176
00177
00178
00179
00180
00186 bool operator()(CDartVertex* ADart1, CDartVertex* ADart2) const;
00187
00194 void setCurrentPoint(const CVertex& AVertex);
00195
00196
00197
00198 private:
00199
00200
00201
00203 static TCoordinate FX;
00204
00205
00206 };
00207
00208 class CDartAngularCompare : public CDartCompare
00209 {
00210 public:
00211
00212
00213
00225 CDartAngularCompare(CGMapVertex* AMap, int ADirectVertex,
00226 const CVertex& AZVector);
00227
00228
00229
00230
00231
00237 bool operator()(CDartVertex* ADart1, CDartVertex* ADart2) const;
00238
00239
00240
00241
00242
00243 CVertex FZVector;
00244
00245
00246 };
00247
00248 class CIntersection
00249 {
00250 public:
00251
00252
00253
00258 TCoordinate FLambda;
00259
00261 int FIdentity;
00262
00263
00264
00265
00266
00276 CIntersection(const TCoordinate& ALambda, int AIdentity);
00277
00278
00279 };
00280
00281 class CDartLinearCompare
00282 {
00283 public:
00284
00285
00286
00291 CDartLinearCompare();
00292
00293
00294
00295
00296
00302 bool operator()(CIntersection* AIntersection1,
00303 CIntersection* AIntersection2) const;
00304
00305
00306 };
00307
00308
00309
00310 }
00311
00312 #endif // SWEEPING_COMPARATORS_HH
00313