00001
00030 #ifndef INC_RVC_OPTRIANGULATION_H
00031 #define INC_RVC_OPTRIANGULATION_H
00032
00033 #ifndef INC_RVC_OPCOMPONENT_H
00034 #include <rvc/opcomponent.h>
00035 #endif
00036
00037 #ifndef INC_MI32_SPATREF_H
00038 #include <mi32/spatref.h>
00039 #endif
00040
00041 #ifndef INC_RVC_OBJITEM_H
00042 #include <rvc/objitem.h>
00043 #endif
00044
00045 #include <float.h>
00046
00047
00048 namespace RVC {
00049 namespace OP {
00050
00052 class TRIANGULATION {
00053 public:
00054
00056 enum SOURCE {
00057 SOURCE_Invalid = -1,
00058 SOURCE_First = 0,
00059 SOURCE_Raster = 0,
00060 SOURCE_Table = 1,
00061 SOURCE_Vector = 2,
00062 SOURCE_Shape = 3,
00063 SOURCE_Last = 3,
00064 SOURCE_Count = 4
00065 };
00066
00068 enum METHOD {
00069 METHOD_Invalid = -1,
00070 METHOD_First = 0,
00071 METHOD_Delaunay = 0,
00072 METHOD_AdaptiveDensification = 1,
00073 METHOD_Last = 1,
00074 METHOD_Count = 2
00075 };
00076
00078 class SOURCE_PARAMETERS {
00079 public:
00080
00081 SOURCE_PARAMETERS (
00082 const SOURCE source
00083 );
00084
00085 virtual ~SOURCE_PARAMETERS (
00086 );
00087
00088 SOURCE GetSource (
00089 ) const { return m_Source; }
00090
00091 private:
00092 #ifndef GENERATING_DOXYGEN_OUTPUT
00093 SOURCE_PARAMETERS (
00094 );
00095
00096 const SOURCE m_Source;
00097 #endif // GENERATING_DOXYGEN_OUTPUT
00098 };
00099
00101 class RASTER_PARAMETERS : public SOURCE_PARAMETERS {
00102 public:
00103
00104 RASTER_PARAMETERS (
00105 );
00106
00107 ~RASTER_PARAMETERS (
00108 );
00109
00110 private:
00111 };
00112
00114 class TABLE_PARAMETERS : public SOURCE_PARAMETERS {
00115 public:
00116
00118 enum NAME {
00119 NAME_XField = 0,
00120 NAME_YField = 1,
00121 NAME_ZField = 2,
00122 NAME_Count = 3
00123 };
00124
00125 TABLE_PARAMETERS (
00126 );
00127
00128 ~TABLE_PARAMETERS (
00129 );
00130
00132 const SPATREF::COORDREFSYS& GetCoordRefSys (
00133 ) const { return (m_CoordRefSys); }
00134
00135 const COMPONENT& GetComponent (
00136 ) const { return (m_Pin); }
00137
00139 void GetName (
00140 const NAME id,
00141 RVC::OBJECTNAME& name
00142 ) const;
00143
00145 const MISTRING& GetQuery (
00146 ) const { return (m_Query); }
00147
00149 UINT8 GetXUnitCode (
00150 ) const { return (m_XUnitCode); }
00151
00153 UINT8 GetYUnitCode (
00154 ) const { return (m_YUnitCode); }
00155
00157 UINT8 GetZUnitCode (
00158 ) const { return (m_ZUnitCode); }
00159
00161 void SetCoordRefSys (
00162 const SPATREF::COORDREFSYS& crs
00163 ) { m_CoordRefSys = crs; }
00164
00165 void SetComponent (
00166 const COMPONENT& component
00167 ) { m_Pin = component; }
00168
00170 void SetName (
00171 const NAME id,
00172 const RVC::OBJECTNAME& name
00173 );
00174
00176 void SetQuery (
00177 const MISTRING& query
00178 ) { m_Query = query; }
00179
00181 void SetXUnitCode (
00182 const UINT8 unitcode
00183 ) { m_XUnitCode = unitcode; }
00184
00186 void SetYUnitCode (
00187 const UINT8 unitcode
00188 ) { m_YUnitCode = unitcode; }
00189
00191 void SetZUnitCode (
00192 const UINT8 unitcode
00193 ) { m_ZUnitCode = unitcode; }
00194
00195 private:
00196 #ifndef GENERATING_DOXYGEN_OUTPUT
00197 COMPONENT m_Pin;
00198 RVC::OBJECTNAME m_Names[NAME_Count];
00199 SPATREF::COORDREFSYS m_CoordRefSys;
00200 MISTRING m_Query;
00201 UINT8 m_XUnitCode;
00202 UINT8 m_YUnitCode;
00203 UINT8 m_ZUnitCode;
00204 #endif // GENERATING_DOXYGEN_OUTPUT
00205 };
00206
00208 class VECTOR_PARAMETERS : public SOURCE_PARAMETERS {
00209 public:
00210
00212 enum TYPE {
00213 TYPE_Point = 0,
00214 TYPE_Line = 1
00215 };
00216
00217 VECTOR_PARAMETERS (
00218 );
00219
00220 ~VECTOR_PARAMETERS (
00221 );
00222
00223 bool GetComponent (
00224 const TYPE type,
00225 COMPONENT& component
00226 ) const;
00227
00228 const OP::COMPONENT& GetComponentLine (
00229 ) const { return (m_Line); }
00230
00231 const OP::COMPONENT& GetComponentPoint (
00232 ) const { return (m_Point); }
00233
00234 void SetComponent (
00235 const TYPE type,
00236 const COMPONENT& component
00237 );
00238
00239 void SetComponentLine (
00240 const OP::COMPONENT& component
00241 ) { m_Line = component; }
00242
00243 void SetComponentPoint (
00244 const OP::COMPONENT& component
00245 ) { m_Point = component; }
00246
00247 private:
00248 #ifndef GENERATING_DOXYGEN_OUTPUT
00249 COMPONENT m_Point;
00250 COMPONENT m_Line;
00251 #endif // GENERATING_DOXYGEN_OUTPUT
00252 };
00253
00254
00256 class SHAPE_PARAMETERS : public SOURCE_PARAMETERS {
00257 public:
00258
00259 SHAPE_PARAMETERS (
00260 );
00261
00262 ~SHAPE_PARAMETERS (
00263 );
00264
00265 const COMPONENT& GetComponent (
00266 ) const { return (m_Component); }
00267
00268 void SetComponent (
00269 const COMPONENT& component
00270 ) { m_Component = component; }
00271
00272 private:
00273 #ifndef GENERATING_DOXYGEN_OUTPUT
00274 COMPONENT m_Component;
00275 #endif // GENERATING_DOXYGEN_OUTPUT
00276 };
00277
00278
00280 class DESTINATION_PARAMETERS {
00281 public:
00282
00283 DESTINATION_PARAMETERS (
00284 );
00285
00286 ~DESTINATION_PARAMETERS (
00287 );
00288
00290 bool GetApplyBreaklines (
00291 ) const;
00292
00294 bool GetApplyClipping (
00295 ) const;
00296
00298 const RVC::OBJITEM& GetBreaklinesObjItem (
00299 ) const;
00300
00302 INT32 GetClipMethod (
00303 ) const;
00304
00306 const RVC::OBJITEM& GetClipObjItem (
00307 ) const;
00308
00310 bool GetComputeStatistics (
00311 ) const;
00312
00314 double GetMaximumEdgeLength (
00315 ) const;
00316
00318 bool GetOptimize (
00319 ) const;
00320
00322 double GetMinimumEdgeLength (
00323 ) const;
00324
00325 double GetZTolerance (
00326 ) const;
00327
00329 void SetApplyBreaklines (
00330 const bool apply
00331 ) ;
00332
00334 void SetApplyClipping (
00335 const bool apply
00336 );
00337
00339 void SetBreaklinesObjItem (
00340 const RVC::OBJITEM& ObjItem
00341 ) ;
00342
00344 void SetClipMethod (
00345 const INT32 method
00346 );
00347
00349 void SetClipObjItem (
00350 const RVC::OBJITEM& ObjItem
00351 );
00352
00354 void SetComputeStatistics (
00355 const bool compute
00356 );
00357
00359 void SetMaximumEdgeLength (
00360 const double length
00361 );
00362
00364 void SetOptimize (
00365 const bool optimize
00366 );
00367
00369 void SetMinimumEdgeLength (
00370 const double length
00371 );;
00372
00373 void SetZTolerance (
00374 const double tolerance
00375 ); ;
00376
00377
00378 private:
00379
00380 #ifndef GENERATING_DOXYGEN_OUTPUT
00381
00382 bool m_Optimize;
00383 double m_ZTolerance;
00384 double m_MinimumEdgeLength;
00385 double m_MaximumEdgeLength;
00386
00387 bool m_ApplyBreaklines;
00388 RVC::OBJITEM m_BreaklinesObjItem;
00389
00390 bool m_ApplyClipping;
00391 RVC::OBJITEM m_ClipObjItem;
00392 INT32 m_ClipMethod;
00393
00394 bool m_ComputeStatistics;
00395
00396 #endif // GENERATING_DOXYGEN_OUTPUT
00397 };
00398
00400 class METHOD_PARAMETERS {
00401 public:
00402
00403 METHOD_PARAMETERS (
00404 const METHOD method
00405 );
00406
00407 virtual ~METHOD_PARAMETERS (
00408 );
00409
00411 METHOD GetMethod (
00412 ) const;
00413
00414 private:
00415 #ifndef GENERATING_DOXYGEN_OUTPUT
00416
00417 const METHOD m_Method;
00418
00419 METHOD_PARAMETERS ();
00420
00421 static METHOD Check (
00422 const METHOD method
00423 );
00424
00425 #endif // GENERATING_DOXYGEN_OUTPUT
00426 };
00427
00429 class DELAUNAY_PARAMETERS : public METHOD_PARAMETERS {
00430 public:
00431
00433 DELAUNAY_PARAMETERS ();
00434
00436 ~DELAUNAY_PARAMETERS ();
00437
00439 double GetTolerance (
00440 ) const { return (m_Tolerance); }
00441
00443 double GetZScale (
00444 ) const { return (m_ZScale); }
00445
00447 double GetZOffset (
00448 ) const { return (m_ZOffset); }
00449
00451 double GetMaximumMemory (
00452 ) const { return (m_MaximumMemory); }
00453
00455 double SetTolerance (
00456 const double tolerance
00457 );
00458
00460 double SetZScale (
00461 const double ZScale
00462 );
00463
00465 void SetZOffset (
00466 const double ZOffset
00467 ) { m_ZOffset = ZOffset; }
00468
00470 void SetMaximumMemory (
00471 const double MaximumMemory
00472 ) { m_MaximumMemory = MaximumMemory; }
00473
00474 private:
00475
00476 #ifndef GENERATING_DOXYGEN_OUTPUT
00477
00478 double m_Tolerance;
00479 double m_ZScale;
00480 double m_ZOffset;
00481 double m_MaximumMemory;
00482
00483 #endif // GENERATING_DOXYGEN_OUTPUT
00484 };
00485
00487 class ADAPTIVEDENSIFICATION_PARAMETERS : public METHOD_PARAMETERS {
00488 public:
00489
00490 ADAPTIVEDENSIFICATION_PARAMETERS (
00491 );
00492
00493 ~ADAPTIVEDENSIFICATION_PARAMETERS (
00494 );
00495
00497 double GetAccuracy (
00498 ) const { return (m_Accuracy); }
00499
00501 INT32 GetNodeLimit (
00502 ) const { return (m_NodeLimit); }
00503
00505 double SetAccuracy (
00506 const double accuracy
00507 );
00508
00510 INT32 SetNodeLimit (
00511 const INT32 NodeLimit
00512 );
00513
00514 private:
00515 #ifndef GENERATING_DOXYGEN_OUTPUT
00516
00517 double m_Accuracy;
00518 INT32 m_NodeLimit;
00519
00520 #endif // GENERATING_DOXYGEN_OUTPUT
00521 };
00522
00524 static ERRVALUE Process (
00525 const RVC::OBJITEM& SrcObjItem,
00526 RVC::OBJITEM& DestObjItem,
00527 const SOURCE_PARAMETERS* SrcParameters,
00528 const METHOD_PARAMETERS* MethodParameters,
00529 const DESTINATION_PARAMETERS& DestParameters
00530 );
00531
00533 static ERRVALUE ProcessDelaunay (
00534 const RVC::OBJITEM& SrcObjItem,
00535 RVC::OBJITEM& DestObjItem,
00536 const SOURCE_PARAMETERS* SrcParameters,
00537 const DELAUNAY_PARAMETERS& MethodParameters,
00538 const DESTINATION_PARAMETERS& DestParameters
00539 );
00540
00542 static ERRVALUE ProcessAdaptiveDensification (
00543 const RVC::OBJITEM& SrcObjItem,
00544 RVC::OBJITEM& DestObjItem,
00545 const SOURCE_PARAMETERS* SrcParameters,
00546 const ADAPTIVEDENSIFICATION_PARAMETERS& MethodParameters,
00547 const DESTINATION_PARAMETERS& DestParameters
00548 );
00549
00550 private:
00551
00552 static ERRVALUE ProcessDestination (
00553 RVC::OBJITEM& DestObjItem,
00554 const DESTINATION_PARAMETERS& DestParameters
00555 );
00556
00557 };
00558
00559 }
00560 }
00561
00562
00563 #endif // INC_RVC_OPTRIANGULATION_H