mi32/rgngen.h

Go to the documentation of this file.
00001 /**
00002  * \file rgngen.h <mi32/rgngen.h>
00003  * \brief Region generation functions and structures
00004  *
00005  * \if NODOC
00006  * $Id: rgngen.h_v 1.11 2004/07/20 14:05:25 scowan Exp $
00007  *
00008  * $Log: rgngen.h_v $
00009  * Revision 1.11  2004/07/20 14:05:25  scowan
00010  * Removed region from vector polygon prototype.
00011  *
00012  * Revision 1.10  2004/07/16 15:27:14  scowan
00013  * Added forward declaration.
00014  *
00015  * Revision 1.9  2004/07/15 19:28:31  mju
00016  * Use region2d for all region generation functions.
00017  *
00018  * Revision 1.8  2004/07/14 23:14:43  scowan
00019  * Removed prototypes from archived source module.
00020  *
00021  * Revision 1.7  2004/07/14 21:50:34  dwilliss
00022  * removed prototype for a function that's no longer public
00023  *
00024  * Revision 1.6  2004/07/02 21:32:36  scowan
00025  * Removed cad region prototype.
00026  *
00027  * Revision 1.5  2004/07/02 17:07:33  dwilliss
00028  * Marked some things as deprecated
00029  *
00030  * Revision 1.4  2003/09/15 13:49:56  fileserver!dwilliss
00031  * Doxygen
00032  *
00033  * Revision 1.3  2003/08/05 20:48:43  vdronov
00034  * remove buffzone.h
00035  *
00036  * Revision 1.2  2002/03/20 16:06:51  vdronov
00037  * mofidied MregionFromBufferZone
00038  *
00039  * Revision 1.1  2000/11/15 15:02:55  mju
00040  * Initial revision
00041  *
00042  * \endif
00043 **/
00044 
00045 #ifndef  INC_MI32_RGNGEN_H
00046 #define  INC_MI32_RGNGEN_H
00047 
00048 #ifndef  INC_MI32_STDDEFNS_H
00049 #include <mi32/stddefns.h>
00050 #endif
00051 
00052 #ifndef GENERATING_DOXYGEN_OUTPUT
00053 class REGION2D;      // Forward declaration
00054 #endif //!< GENERATING_DOXYGEN_OUTPUT
00055 
00056 /***
00057 *  Structure and defines for polygon fitting functions to a region
00058 ***/
00059 
00060 #define MP_sign_default    TRUE
00061 
00062 #define MP_iter_min        2
00063 #define MP_iter_default    5
00064 #define MP_iter_max        100
00065 
00066 #define MP_weight_min      0.010
00067 #define MP_weight_default  0.618
00068 #define MP_weight_max      1.000
00069 
00070 #define MP_factor_min      0.01
00071 #define MP_factor_default  0.50
00072 #define MP_factor_max      1.00
00073 
00074 
00075 #define HM_sign_default    TRUE
00076 
00077 #define HM_iter_min        2
00078 #define HM_iter_default    5
00079 #define HM_iter_max        100
00080 
00081 #define HM_weight_min      0.010
00082 #define HM_weight_default  0.618
00083 #define HM_weight_max      1.000
00084 
00085 #define HM_horiz_min       15
00086 #define HM_horiz_default   15
00087 #define HM_horiz_max       120
00088 
00089 #define HM_vert_min        15
00090 #define HM_vert_default    15
00091 #define HM_vert_max        120
00092 
00093 #define HM_percent_min     10.00
00094 #define HM_percent_default 95.00
00095 #define HM_percent_max     100.0
00096 
00097 
00098 #define FT_horiz_min       15
00099 #define FT_horiz_default   15
00100 #define FT_horiz_max       120
00101 
00102 #define FT_vert_min        15
00103 #define FT_vert_default    15
00104 #define FT_vert_max        120
00105 
00106 #define FT_height_min      0.01
00107 #define FT_height_default  0.50
00108 #define FT_height_max      1.00
00109 
00110 
00111 #define TS_sign_default    TRUE
00112 
00113 #define TS_iter_min        2
00114 #define TS_iter_default    5
00115 #define TS_iter_max        100
00116 
00117 #define TS_weight_min      0.010
00118 #define TS_weight_default  0.618
00119 #define TS_weight_max      1.000
00120 
00121 #define TS_percent_min     10.00
00122 #define TS_percent_default 95.00
00123 #define TS_percent_max     100.0
00124 
00125 #define MC_sign_default    TRUE
00126 
00127 #define MC_iter_min        2
00128 #define MC_iter_default    5
00129 #define MC_iter_max        100
00130 
00131 #define MC_weight_min      0.010
00132 #define MC_weight_default  0.618
00133 #define MC_weight_max      1.000
00134 
00135 #define MC_percent_min     10.00
00136 #define MC_percent_default 95.00
00137 #define MC_percent_max     100.0
00138 
00139 #define KN_mode_fixed      0
00140 #define KN_mode_adaptive   1
00141 
00142 #define KN_grid_manual     0
00143 #define KN_grid_simple     1
00144 #define KN_grid_lscv       2
00145 
00146 #define KN_horiz_min       4
00147 #define KN_horiz_default   15
00148 #define KN_horiz_max       120
00149 
00150 #define KN_vert_min        4
00151 #define KN_vert_default    15
00152 #define KN_vert_max        120
00153 
00154 #define KN_height_min      0.001
00155 #define KN_height_default  0.50
00156 #define KN_height_max      1.00
00157 
00158 
00159 struct MINPOLYPARM {
00160    INT32   sign;                       //!<  use or not eliminate outliers 
00161    UINT32  iter;                       //!<  number of iteration in removing outliers 
00162    double weight;                      //!<  threshold for removing outliers 
00163    double factor;                      //!<  from 0 to 1. 1 = concave poly 
00164    };
00165 
00166 struct HARMONPARM {
00167    INT32   sign;                       //!<  use or not eliminate outliers 
00168    UINT32  iter;                       //!<  number of iteration in removing outliers 
00169    double weight;                      //!<  threshold for removing outliers 
00170    UINT32  horiz;                      //!<  number of horizontal/vertical grids 
00171    UINT32  vert;
00172    double percent;                     //!<  % of points to include 
00173    };
00174 
00175 struct FOURIERPARM {
00176    UINT32 horiz;
00177    UINT32 vert;
00178    double height;                      //!<  slice height in computing fourier 
00179    };
00180 
00181 struct TESSELPARM {
00182    INT32  sign;                        //!<  use or not eliminate outliers 
00183    UINT32 iter;                        //!<  number of iteration in removing outliers 
00184    double weight;                      //!<  threshold for removing outliers 
00185    double percent;
00186    };
00187 
00188 struct MINCONVEXPARM {
00189    INT32  sign;                        //!<  use or not eliminate outliers 
00190    UINT32 iter;                        //!<  number of iteration in removing outliers 
00191    double weight;                      //!<  threshold for removing outliers 
00192    double percent;
00193    };
00194 
00195 struct KERNELPARM {
00196    INT32 mode;
00197    INT32 grid;
00198    UINT32 horiz;
00199    UINT32 vert;
00200    double height;                      //!<  slice height in computing fourier 
00201    };
00202 
00203 struct POLYFITPARM {
00204    UINT32 method;
00205    MINPOLYPARM minpoly;
00206    HARMONPARM  harmon;
00207    FOURIERPARM fourier;
00208    TESSELPARM  tessel;
00209    MINCONVEXPARM minconvex;
00210    KERNELPARM kernel;
00211    };
00212 
00213 
00214 #define  RGNPFIT_MINPOLY         1
00215 #define  RGNPFIT_HARMON          2
00216 #define  RGNPFIT_FOURIER         3
00217 #define  RGNPFIT_TESSEL          4
00218 #define  RGNPFIT_MINCONVEX       5
00219 #define  RGNPFIT_KERNEL          6
00220 #define  RGNPFIT_COUNT           7
00221 
00222 #define     CLMETHOD_K_means              0
00223 #define     CLMETHOD_FC_means             1
00224 #define     CLMETHOD_MinDistAngle         2
00225 #define     CLMETHOD_SelfOrganization     3
00226 #define     CLMETHOD_AdaptiveResonance    4
00227 #define     CLMETHOD_Isodata              5
00228 #define     CLMETHOD_COUNT                6             
00229 
00230 struct KMEANS_PARM {
00231    DOUBLE MaxDistPercent;
00232    DOUBLE MaxMoveSteady;
00233    DOUBLE MinSteadyPct;
00234    INT32  MaxIterations;
00235    };
00236 
00237 struct FCMEANS_PARM {
00238    DOUBLE MaxDistPercent;
00239    INT32  MaxIterations;
00240    };
00241 
00242 struct MDANGLE_PARM {
00243    DOUBLE MaxAnglePercent;
00244    DOUBLE XPosPercent;
00245    DOUBLE YPosPercent;
00246    DOUBLE MaxMoveSteady;
00247    DOUBLE MinSteadyPct;
00248    INT32  MaxIterations;
00249    };
00250 
00251 struct SELFORG_PARM {
00252    DOUBLE MaxDistPercent;
00253    DOUBLE MaxMoveSteady;
00254    DOUBLE MinSteadyPct;
00255    INT32  MaxIterations;
00256    };
00257 
00258 struct ADRES_PARM {
00259    DOUBLE MaxDistPercent;
00260    INT32  MaxIterations;
00261    };
00262 
00263 struct ISODATA_PARM {
00264    INT32 ReqClasses;
00265    INT32 MaxIterations;
00266    INT32 MinClusterCells;
00267    DOUBLE SplitMaxStdDev;
00268    DOUBLE CombineMinDist;
00269    DOUBLE ChainMinDist;
00270    };
00271 
00272 struct CLASSIFY_PARM {
00273    UINT32 method;
00274    KMEANS_PARM kmeans;
00275    FCMEANS_PARM fcmeans;
00276    MDANGLE_PARM mdangle;
00277    SELFORG_PARM selforg;
00278    ADRES_PARM adres;
00279    ISODATA_PARM isodata;
00280    };
00281 
00282 struct FLOODZONEHIST {
00283    DOUBLE *volume;                     //!<  allocation required 
00284    DOUBLE *area;                       //!<  allocation required 
00285    DOUBLE *data;                       //!<  allocation required 
00286    INT32 numData;                      //!<  size of arrays above 
00287    DOUBLE unitHeight;                  //!<  meters 
00288    DOUBLE unitArea;                    //!<  square meters 
00289    DOUBLE unitVolume;                  //!<  cubic meters 
00290    DOUBLE minElevation;                //!<  meters & required 
00291    DOUBLE maxElevation;                //!<  meters & required 
00292    DOUBLE interval;                    //!<  meters & required 
00293    };
00294 
00295 
00296 /****
00297 *  Region generation defines
00298 ****/
00299 
00300 #define REGIONGEN_MaxMethods        12
00301 #define REGIONGEN_SelPolys          1
00302 #define REGIONGEN_PolyFit           2
00303 #define REGIONGEN_BufZone           3
00304 #define REGIONGEN_ViewShed          4
00305 #define REGIONGEN_Threshold         5
00306 #define REGIONGEN_Voronoi           6
00307 #define REGIONGEN_Basin             7
00308 #define REGIONGEN_FloodZone         8
00309 #define REGIONGEN_RasterCells       9
00310 #define REGIONGEN_TextureGrowth     10
00311 #define REGIONGEN_Cluster           11
00312 #define REGIONGEN_RasterExpression  12
00313 #define REGIONGEN_RasterTraceSolid  13
00314 #define REGIONGEN_RasterTraceBound  14
00315 
00316 struct RGNELEMLIST {
00317    int ElemType;
00318    UINT8 *set;
00319    UINT32 NumElem;
00320    UINT32 NumSelected;
00321    };
00322 
00323 extern "C" {
00324 
00325 //!:Associate with "Region Generation Functions"
00326 //!\addtogroup RegionGen Region Generation Functions
00327 //!@{
00328 
00329 //! Compute region from set of points using polygon fitting.
00330 int ComputeHomerange (
00331    DPOINT2D **Points, 
00332    INT32 NumPoints, 
00333    DPOLYGON **Dpolys, 
00334    INT32 *NumDpolys, 
00335    POLYFITPARM *pfparm
00336    );
00337 
00338 //! Create a region from basin.
00339 int MregionFromBasin (
00340    int rhandle, 
00341    int vhandle,
00342    int NumElemTypes,
00343    RGNELEMLIST *ElemList,
00344    REGION2D& region
00345    );
00346 
00347 //! Create a region from buffer zone.
00348 int MregionFromBufferZone (
00349    int vhandle,
00350    int NumElemTypes,                   
00351    RGNELEMLIST *ElemList,
00352    DOUBLE PointDistance,
00353    DOUBLE LineDistance,
00354    DOUBLE PolyDistance,
00355    int Unit,
00356    bool side,
00357    REGION2D& region
00358    );
00359 
00360 //! Create a region from a cluster.
00361 int MregionFromCluster (
00362    int vhandle, 
00363    RGNELEMLIST *ElemList,
00364    int NumElemTypes,                   //!< Number of element types
00365    CLASSIFY_PARM *clparm, 
00366    REGION2D& region
00367    );
00368 
00369 
00370 //! Generate a region from a polygon fit of selected points.
00371 //! 
00372 //! @return 1 if one or more regions generated, 0 if no regions generated, error code if < 0.
00373 //!
00374 //! Polygon fit methods:         
00375 //!      \li\b RGNPFIT_MINPOLY      
00376 //!      \li\b RGNPFIT_HARMON    
00377 //!      \li\b RGNPFIT_FOURIER
00378 //!      \li\b RGNPFIT_TESSEL
00379 int MregionFromPolygonFit (
00380    int vhandle,                        //!< Handle to open RVC vector object
00381    RGNELEMLIST *bitarray,              //!< Selected points to generate polygon around
00382    int NumPoints,                      //!< Number of points that the array covers
00383    POLYFITPARM *pfparm,                //!< Polygon fit parameter structure
00384    REGION2D& region
00385    );
00386 
00387 //! Create a region by raster texture growing.
00388 int MregionFromTextureGrowth (
00389    int rhandle, 
00390    int vhandle,
00391    int NumElemTypes,
00392    RGNELEMLIST *ElemList,
00393    DOUBLE numSD, 
00394    INT32 Around, 
00395    REGION2D& region,
00396    UINT32 ProcessType
00397    );
00398 
00399 //! Create a region from Voronoi diagram.
00400 int MregionFromVoronoi (
00401    int vhandle, 
00402    RGNELEMLIST *ElemList,
00403    int NumElemTypes,                   //!< Number of element types
00404    DOUBLE ExtFactor,
00405    REGION2D& region                    //!< Region returned
00406    );
00407 
00408 //! Initialize parameters to defaults for polygon fitting.
00409 //!
00410 //! See MregionFromPolygonFit() for details on POLYFITPARM and methods.
00411 void MregionInitPolygonFit (
00412    POLYFITPARM *pfparm,                
00413    UINT32 method
00414    );
00415 
00416 //!@}
00417 
00418 }  //! extern "C"
00419 
00420 #endif   //!< INC_MI32_RGNGEN_H

Generated on Thu Apr 26 04:45:14 2007 for TNTsdk by  doxygen 1.5.2