00001
00028 #ifndef INC_RVC_OPBUFFERZONE_H
00029 #define INC_RVC_OPBUFFERZONE_H
00030
00031 #ifndef INC_MI32_LATLONFM_H
00032 #include <mi32/latlonfm.h>
00033 #endif
00034
00035 #ifndef INC_MI32_SPATREF_H
00036 #include <mi32/spatref.h>
00037 #endif
00038
00039 #ifndef INC_MI32_BITSET_H
00040 #include <mi32/bitset.h>
00041 #endif
00042
00043 #ifndef INC_MI32_RECT_H
00044 #include <mi32/rect.h>
00045 #endif
00046
00047 #ifndef INC_MI32_DOUBLEAR_H
00048 #include <mi32/doublear.h>
00049 #endif
00050
00051 #ifndef INC_RVC_OBJECTNAME_H
00052 #include <rvc/objectname.h>
00053 #endif
00054
00055 #ifndef GENERATING_DOXYGEN_OUTPUT
00056 class AUTOCOLORGEN;
00057 class MISTRING;
00058 #endif // GENERATING_DOXYGEN_OUTPUT
00059
00060 namespace RVC {
00061
00062 #ifndef GENERATING_DOXYGEN_OUTPUT
00063 class DBASE_ELEMENT;
00064 class OBJITEM;
00065 class OBJITEMLIST;
00066 #endif // GENERATING_DOXYGEN_OUTPUT
00067
00068 namespace OP {
00069
00071 class BUFFERZONE {
00072 public:
00073
00074 enum SOURCE {
00075 SOURCE_Vector = 0,
00076 SOURCE_CAD = 1,
00077 SOURCE_Shape = 2,
00078 SOURCE_Table = 3,
00079 SOURCE_Region = 4,
00080 SOURCE_Count = 5
00081 };
00082
00083 enum PROCESS {
00084 PROCESS_None = 0,
00085 PROCESS_All = 1,
00086 PROCESS_Selected = 2,
00087 PROCESS_ByQuery = 3
00088 };
00089
00090 enum DISTANCE {
00091 DISTANCE_AllSame = 0,
00092 DISTANCE_ByScript = 1
00093 };
00094
00095 enum SEPARATE {
00096 SEPARATE_None = 0,
00097 SEPARATE_ByAttribute = 1,
00098 SEPARATE_ByElement = 2
00099 };
00100
00101 enum TYPE {
00102 TYPE_Single = 0,
00103 TYPE_MultipleEqual = 1,
00104 TYPE_MultipleUnequal = 2
00105 };
00106
00107 enum DIRECTION {
00108 DIRECTION_Outside = 0,
00109 DIRECTION_Inside = 1
00110 };
00111
00112 enum METHOD {
00113 METHOD_Approximate = 0,
00114 METHOD_Accurate = 1
00115 };
00116
00118 class ELEMENT {
00119 public:
00120
00121 ELEMENT (
00122 );
00123
00124 ~ELEMENT (
00125 ) {}
00126
00127 ELEMENT (
00128 const ELEMENT& rhs
00129 );
00130
00131 ELEMENT& operator= (
00132 const ELEMENT& rhs
00133 );
00134
00135 void Clear (
00136 );
00137
00138 PROCESS GetProcess (
00139 ) const;
00140
00141 const BITSET& GetBitset (
00142 ) const;
00143
00144 DISTANCE GetDistance (
00145 ) const;
00146
00147 const MISTRING& GetDistanceScript (
00148 ) const;
00149
00150 const MISTRING& GetProcessQuery (
00151 ) const;
00152
00153 void GetSeparateAttribute (
00154 MISTRING& table,
00155 MISTRING& field
00156 ) const;
00157
00158 SEPARATE GetSeparate (
00159 ) const;
00160
00161 bool GetTransferAttributes (
00162 ) const;
00163
00164 void SetProcess (
00165 const PROCESS process
00166 );
00167
00168 void SetBitset (
00169 const BITSET& bitset
00170 );
00171
00172 void SetDistance (
00173 const DISTANCE distance
00174 );
00175
00176 void SetDistanceScript (
00177 const MISTRING& script
00178 );
00179
00180 void SetProcessQuery (
00181 const MISTRING& query
00182 );
00183
00184 void SetSeparate (
00185 const SEPARATE separate
00186 );
00187
00188 void SetSeparateAttribute (
00189 const MISTRING& table,
00190 const MISTRING& field
00191 );
00192
00193 void SetTransferAttributes (
00194 const bool transfer
00195 );
00196
00197 private:
00198 #ifndef GENERATING_DOXYGEN_OUTPUT
00199 PROCESS m_Process;
00200 MISTRING m_ProcessQuery;
00201 DISTANCE m_Distance;
00202 BITSET m_Bitset;
00203 MISTRING m_DistanceScript;
00204 SEPARATE m_Separate;
00205 bool m_TransferAttributes;
00206 MISTRING m_TableName;
00207 MISTRING m_FieldName;
00208 #endif // GENERATING_DOXYGEN_OUTPUT
00209 };
00210
00212 class SOURCE_PARAMETERS {
00213 public:
00214
00215 SOURCE_PARAMETERS (
00216 const SOURCE source
00217 );
00218
00219 virtual ~SOURCE_PARAMETERS (
00220 ) {}
00221
00222 SOURCE GetSource (
00223 ) const { return m_Source; }
00224
00225 private:
00226 #ifndef GENERATING_DOXYGEN_OUTPUT
00227 SOURCE_PARAMETERS (
00228 );
00229
00230 const SOURCE m_Source;
00231 #endif // GENERATING_DOXYGEN_OUTPUT
00232 };
00233
00235 class VECTOR_PARAMETERS : public SOURCE_PARAMETERS {
00236 public:
00237
00239 enum TYPE {
00240 TYPE_Point = 0,
00241 TYPE_Line = 1,
00242 TYPE_Polygon = 2
00243 };
00244
00245 VECTOR_PARAMETERS (
00246 );
00247
00248 ~VECTOR_PARAMETERS (
00249 ) {}
00250
00251 VECTOR_PARAMETERS& operator= (
00252 const VECTOR_PARAMETERS&
00253 );
00254
00255 const ELEMENT& GetElement (
00256 const TYPE type
00257 ) const;
00258
00259 void SetElement (
00260 const TYPE type,
00261 const ELEMENT& element
00262 );
00263
00264 private:
00265 #ifndef GENERATING_DOXYGEN_OUTPUT
00266 ELEMENT m_Point;
00267 ELEMENT m_Line;
00268 ELEMENT m_Polygon;
00269 #endif // GENERATING_DOXYGEN_OUTPUT
00270 };
00271
00273 class CAD_PARAMETERS : public SOURCE_PARAMETERS {
00274 public:
00275
00276 CAD_PARAMETERS (
00277 );
00278
00279 ~CAD_PARAMETERS (
00280 ) {}
00281
00282 CAD_PARAMETERS& operator= (
00283 const CAD_PARAMETERS&
00284 );
00285
00286 const ELEMENT& GetElement (
00287 ) const;
00288
00289 void SetElement (
00290 const ELEMENT& element
00291 );
00292
00293 private:
00294 #ifndef GENERATING_DOXYGEN_OUTPUT
00295 ELEMENT m_Element;
00296 #endif // GENERATING_DOXYGEN_OUTPUT
00297 };
00298
00300 class SHAPE_PARAMETERS : public SOURCE_PARAMETERS {
00301 public:
00302
00303 SHAPE_PARAMETERS (
00304 );
00305
00306 ~SHAPE_PARAMETERS (
00307 ) {}
00308
00309 SHAPE_PARAMETERS& operator= (
00310 const SHAPE_PARAMETERS&
00311 );
00312
00313 const ELEMENT& GetElement (
00314 ) const;
00315
00316 void SetElement (
00317 const ELEMENT& element
00318 );
00319
00320 private:
00321 #ifndef GENERATING_DOXYGEN_OUTPUT
00322 ELEMENT m_Element;
00323 #endif // GENERATING_DOXYGEN_OUTPUT
00324 };
00325
00327 class REGION_PARAMETERS : public SOURCE_PARAMETERS {
00328 public:
00329
00330 REGION_PARAMETERS (
00331 );
00332
00333 ~REGION_PARAMETERS (
00334 ) {}
00335
00336 REGION_PARAMETERS& operator= (
00337 const REGION_PARAMETERS&
00338 );
00339
00340 private:
00341 #ifndef GENERATING_DOXYGEN_OUTPUT
00342 #endif // GENERATING_DOXYGEN_OUTPUT
00343 };
00344
00346 class TABLE_PARAMETERS : public SOURCE_PARAMETERS {
00347 public:
00348
00350 enum NAME {
00351 NAME_XField = 0,
00352 NAME_YField = 1,
00353 NAME_Count = 2
00354 };
00355
00356 TABLE_PARAMETERS (
00357 );
00358
00359 ~TABLE_PARAMETERS (
00360 ) {}
00361
00362 TABLE_PARAMETERS& operator= (
00363 const TABLE_PARAMETERS&
00364 );
00365
00367 const SPATREF::COORDREFSYS& GetCoordRefSys (
00368 ) const;
00369
00370 const ELEMENT& GetElement (
00371 ) const;
00372
00373 const DRECT3D& GetExtents (
00374 ) const;
00375
00376 const DMSTYPE GetLatLonFormat (
00377 ) const;
00378
00380 const RVC::OBJECTNAME& GetName (
00381 const NAME id
00382 ) const;
00383
00385 const MISTRING& GetQuery (
00386 ) const;
00387
00389 UINT8 GetXUnitCode (
00390 ) const;
00391
00393 UINT8 GetYUnitCode (
00394 ) const;
00395
00397 void SetCoordRefSys (
00398 const SPATREF::COORDREFSYS& crs
00399 );
00400
00401 void SetElement (
00402 const ELEMENT& element
00403 );
00404
00405 void SetExtents (
00406 const DRECT3D& extents
00407 );
00408
00409 void SetLatLonFormat (
00410 const DMSTYPE format
00411 );
00412
00414 void SetName (
00415 const NAME id,
00416 const RVC::OBJECTNAME& name
00417 );
00418
00420 void SetQuery (
00421 const MISTRING& query
00422 );
00423
00425 void SetXUnitCode (
00426 const UINT8 unitcode
00427 );
00428
00430 void SetYUnitCode (
00431 const UINT8 unitcode
00432 );
00433
00434 private:
00435 #ifndef GENERATING_DOXYGEN_OUTPUT
00436 ELEMENT m_Pin;
00437 RVC::OBJECTNAME m_Names[NAME_Count];
00438 SPATREF::COORDREFSYS m_CoordRefSys;
00439 DRECT3D m_Extents;
00440 MISTRING m_Query;
00441 DMSTYPE m_LatLonFormat;
00442 UINT8 m_XUnitCode;
00443 UINT8 m_YUnitCode;
00444 #endif // GENERATING_DOXYGEN_OUTPUT
00445 };
00446
00447 class PARAMETERS {
00448 public:
00449
00450 PARAMETERS (
00451 );
00452
00453 ~PARAMETERS (
00454 ) {}
00455
00456 void Clear ();
00457
00458 int GetDistanceUnit (
00459 ) const;
00460
00461 DIRECTION GetDirection (
00462 ) const;
00463
00464 double GetDistance (
00465 ) const;
00466
00467 double GetStartingDistance (
00468 ) const;
00469
00470 double GetEndingDistance (
00471 ) const;
00472
00473 double GetInterval (
00474 ) const;
00475
00476 METHOD GetMethod (
00477 ) const;
00478
00479 const DOUBLE_ARRAY<double>& GetDistances (
00480 ) const;
00481
00482 TYPE GetType (
00483 ) const;
00484
00485 bool GetSaveInSingleObject (
00486 ) const;
00487
00488 bool GetUsePolygonsAsRegion (
00489 ) const;
00490
00491 void SetDirection (
00492 const DIRECTION direction
00493 );
00494
00495 void SetDistanceUnit (
00496 const int unit
00497 );
00498
00499 void SetDistance (
00500 const double distance
00501 );
00502
00503 void SetStartingDistance (
00504 const double distance
00505 );
00506
00507 void SetEndingDistance (
00508 const double distance
00509 );
00510
00511 void SetInterval (
00512 const double interval
00513 );
00514
00515 void SetMethod (
00516 const METHOD method
00517 );
00518
00519 void SetDistances (
00520 const DOUBLE_ARRAY<double>& distances
00521 );
00522
00523 void SetType (
00524 const TYPE type
00525 );
00526
00527 void SetSaveInSingleObject (
00528 const bool save
00529 );
00530
00531 void SetUsePolygonsAsRegion (
00532 const bool use
00533 );
00534
00535 private:
00536
00537 #ifndef GENERATING_DOXYGEN_OUTPUT
00538
00539 TYPE m_Type;
00540 double m_Distance;
00541 double m_StartingDistance;
00542 double m_EndingDistance;
00543 double m_Interval;
00544 DOUBLE_ARRAY<double> m_Distances;
00545 bool m_SaveInSingleObject;
00546 DIRECTION m_Direction;
00547 METHOD m_Method;
00548 bool m_UsePolygonsAsRegion;
00549 int m_DistanceUnit;
00550
00551 #endif // GENERATING_DOXYGEN_OUTPUT
00552
00553 };
00554
00556 static ERRVALUE Process (
00557 const RVC::OBJITEM& SrcObjItem,
00558 RVC::OBJITEM& DestObjItem,
00559 const SOURCE_PARAMETERS* SourceParameters,
00560 const PARAMETERS& Parameters
00561 );
00562
00563 private:
00564
00565 static ERRVALUE ProcessSingle (
00566 const RVC::OBJITEM& SrcObjItem,
00567 RVC::OBJITEM& DestObjItem,
00568 const SOURCE_PARAMETERS* SourceParameters,
00569 const PARAMETERS& Parameters,
00570 AUTOCOLORGEN& autocolor
00571 );
00572
00573 static ERRVALUE ProcessMultiple (
00574 const RVC::OBJITEM& SrcObjItem,
00575 RVC::OBJITEM& DestObjItem,
00576 const SOURCE_PARAMETERS* SourceParameters,
00577 const PARAMETERS& Parameters,
00578 AUTOCOLORGEN& autocolor
00579 );
00580
00581 static ERRVALUE AddBufferDistanceTable (
00582 const RVC::OBJITEM& objitem,
00583 const double prev,
00584 const double distance,
00585 const double next
00586 );
00587
00588 static ERRVALUE MakeVectorBufferTable (
00589 RVC::DBASE_ELEMENT& database,
00590 const BITSET& bitset,
00591 const double prev,
00592 const double distance,
00593 const double next
00594 );
00595
00596 static ERRVALUE MakeCADBufferTable (
00597 RVC::DBASE_ELEMENT& database,
00598 const INT32 numElements,
00599 const double distance
00600 );
00601
00602 static ERRVALUE CopyMultiple (
00603 const RVC::OBJITEM& SrcObjItem,
00604 RVC::OBJITEM& DestObjItem,
00605 const PARAMETERS& parameters,
00606 const RVC::OBJITEMLIST& objitems
00607 );
00608
00609 static ERRVALUE CopyVectorMultiple (
00610 const RVC::OBJITEM& SrcObjItem,
00611 RVC::OBJITEM& DestObjItem,
00612 const PARAMETERS& parameters,
00613 const RVC::OBJITEMLIST& objitems
00614 );
00615
00616 static ERRVALUE CopyCADMultiple (
00617 const RVC::OBJITEM& SrcObjItem,
00618 RVC::OBJITEM& DestObjItem,
00619 const PARAMETERS& parameters,
00620 const RVC::OBJITEMLIST& objitems
00621 );
00622
00623 static ERRVALUE CopyRegionMultiple (
00624 const RVC::OBJITEM& SrcObjItem,
00625 RVC::OBJITEM& DestObjItem,
00626 const PARAMETERS& parameters,
00627 const RVC::OBJITEMLIST& objitems
00628 );
00629
00630 };
00631
00632 }
00633 }
00634
00635
00636 #endif // INC_RVC_OPBUFFERZONE_H