rvcvect.h

Go to the documentation of this file.
00001 /**
00002  * \file rvcvect.h <mi32/rvcvect.h>
00003  * \brief RVC Definitions Header File for Vectors
00004  *
00005  * \if NODOC
00006  * $Id: rvcvect.h_v 1.143 2004/09/23 21:52:22 scowan Exp $
00007  *
00008  * $Log: rvcvect.h_v $
00009  * Revision 1.143  2004/09/23 21:52:22  scowan
00010  * Added ctors for node and point structures.
00011  *
00012  * Revision 1.142  2004/09/15 21:15:00  scowan
00013  * Added ctor's to vect line and poly.
00014  *
00015  * Revision 1.141  2004/08/24 22:08:48  scowan
00016  * Added total line length field to header.
00017  *
00018  * Revision 1.140  2004/07/20 15:16:12  scowan
00019  * Removed to hide unused functions.
00020  *
00021  * Revision 1.139  2004/07/19 20:24:19  scowan
00022  * Removed unused inline prototypes.
00023  *
00024  * Revision 1.138  2004/07/02 21:08:42  scowan
00025  * Removed unused prototypes.
00026  *
00027  * Revision 1.137  2004/06/03 21:36:46  scowan
00028  * Removed unused prototypes.
00029  *
00030  * Revision 1.136  2004/05/20 19:19:12  scowan
00031  * Removed unused forward declarations.
00032  *
00033  * Revision 1.135  2004/03/12 15:25:06  mju
00034  * Remove unused legacy objectset selection dialog inlines.
00035  *
00036  * Revision 1.134  2004/03/11 16:58:55  mju
00037  * Warn legacy object selection dialogs deprecated.
00038  *
00039  * Revision 1.133  2004/02/16 21:07:03  mju
00040  * Warn on deprecated usage.
00041  *
00042  * Revision 1.132  2004/01/09 21:03:15  scowan
00043  * Removed unused functions.
00044  *
00045  * Revision 1.131  2004/01/02 18:44:04  scowan
00046  * Changed cad tov ector prototype.
00047  *
00048  * Revision 1.130  2003/11/17 17:00:34  scowan
00049  * nc.
00050  *
00051  * Revision 1.129  2003/10/15 17:39:47  mju
00052  * Deprecate groupkey.
00053  *
00054  * Revision 1.128  2003/09/26 19:56:04  scowan
00055  * Adjustment of include files.
00056  *
00057  * Revision 1.127  2003/09/26 19:44:15  scowan
00058  * Removed use on unnecessary include file.
00059  *
00060  * Revision 1.126  2003/09/26 15:33:13  scowan
00061  * Removed more unused functions.
00062  *
00063  * Revision 1.125  2003/09/26 15:29:58  scowan
00064  * Removed "removed" function prototypes.
00065  *
00066  * Revision 1.124  2003/09/26 15:23:47  scowan
00067  * Removed generate isle shell list ex prototype.
00068  *
00069  * Revision 1.123  2003/09/26 14:47:23  scowan
00070  * Removed many function calls that are not used.
00071  *
00072  * Revision 1.122  2003/09/15 13:49:56  fileserver!dwilliss
00073  * Doxygen
00074  *
00075  * Revision 1.121  2003/03/04 21:04:34  scowan
00076  * Changed to default to no elemnent ID tables.
00077  *
00078  * Revision 1.120  2002/12/26 16:24:09  scowan
00079  * Fixed invalid extents handling.
00080  *
00081  * Revision 1.119  2002/09/09 14:00:24  mju
00082  * Always prevent_memfunc.
00083  *
00084  * Revision 1.118  2002/08/21 20:39:59  scowan
00085  * Deprecate old object name define.
00086  *
00087  * Revision 1.117  2002/05/01 17:43:35  scowan
00088  * Removed prototype.
00089  *
00090  * Revision 1.116  2002/03/08 21:19:31  scowan
00091  * Added more to vect label struct.
00092  *
00093  * Revision 1.115  2002/03/08 18:36:37  scowan
00094  * Added clear method.
00095  * delrecated mem.. for info structs.
00096  *
00097  * Revision 1.114  2002/01/03 22:47:13  scowan
00098  * Added buffer friendly version of generate isle shell list.
00099  * Added functions to set and get vector object extents.
00100  *
00101  * Revision 1.113  2001/09/27 21:39:35  scowan
00102  * Added new flags for extents management.
00103  *
00104  * Revision 1.112  2001/09/14 14:58:50  mju
00105  * No mdlg in win32native.
00106  *
00107  * Revision 1.111  2001/06/18 17:03:18  mju
00108  * Add VectorOptimize using OBJITEMs.
00109  *
00110  * Revision 1.110  2001/06/18 15:41:29  mju
00111  * ConvertRasterToVectorBoundary now takes geninfo reference.
00112  *
00113  * Revision 1.109  2001/05/30 14:59:33  scowan
00114  * Export more functions, forgot earlier.
00115  *
00116  * Revision 1.108  2001/05/16 22:05:21  scowan
00117  * Added functions for adding elements, reading element lists with adjustable buffers.
00118  * And adding IsValid methods on elements.
00119  *
00120  * Revision 1.107  2001/04/24 14:08:44  mju
00121  * REMOVE old FindClosestVect... functions.
00122  *
00123  * Revision 1.106  2001/02/13 21:52:50  scowan
00124  * Added flag for spline text baseline.
00125  *
00126  * Revision 1.105  2001/02/12 17:27:18  scowan
00127  * Added label desc flag for following label along curve.
00128  *
00129  * Revision 1.104  2001/01/26 22:37:01  scowan
00130  * *** empty log message ***
00131  *
00132  * Revision 1.103  2001/01/26 20:56:45  scowan
00133  * More methods for point structure.
00134  *
00135  * Revision 1.102  2001/01/18 17:05:49  scowan
00136  * Added helpers for vector node structore.
00137  *
00138  * Revision 1.101  2001/01/17 18:38:38  scowan
00139  * Added vector flags field to header.
00140  *
00141  * Revision 1.100  2000/12/04 16:37:08  mju
00142  * Fix genitor.
00143  *
00144  * Revision 1.99  2000/10/30 18:18:17  msmith
00145  * Genitor documentation.
00146  *
00147  * Revision 1.98  2000/09/19 20:08:21  scowan
00148  * Added write open header function.
00149  *
00150  * Revision 1.97  2000/09/11 19:47:49  scowan
00151  * Added get num element type functions.
00152  *
00153  * Revision 1.96  2000/08/31 15:44:48  mju
00154  * Chg parms for ConvertRasterToVectorContouring.
00155  *
00156  * Revision 1.95  2000/06/27 15:21:29  mju
00157  * Add MfVectorOptimize prototype.
00158  *
00159  * Revision 1.94  2000/06/22 21:50:03  mju
00160  * Use inlines instead of macros for some Mf...Vect fns.
00161  * Don't doc internal fns.
00162  *
00163  * Revision 1.93  2000/06/20 15:23:31  scowan
00164  * const some methods.
00165  *
00166  * Revision 1.92  2000/06/20 15:18:35  scowan
00167  * Inherit from dpoint 3d and create GetExtents for all vector element types.
00168  *
00169  * Revision 1.91  2000/06/07 14:56:01  mju
00170  * Allow node/point casts to DPOINT3D references.
00171  *
00172  * Revision 1.90  2000/05/04 16:16:27  mju
00173  * Add ConvertCADToVector fn.
00174  *
00175  * Revision 1.89  2000/04/26 23:10:59  scowan
00176  * More cosnt.
00177  *
00178  * Revision 1.88  2000/03/17 22:26:55  scowan
00179  * operator for vect info.
00180  *
00181  * Revision 1.87  2000/03/07 16:52:31  scowan
00182  * Moved merge functions to its own include file.
00183  *
00184  * Revision 1.86  1999/11/19 14:21:31  mju
00185  * MdlgGet... prompt const.
00186  *
00187  * Revision 1.85  1999/10/20  20:29:41  mju
00188  * GenPolyPK... const filename.
00189  *
00190  * Revision 1.84  1999/10/20  20:14:20  mju
00191  * Const filenames.
00192  *
00193  * Revision 1.83  1999/10/20  20:02:23  mju
00194  * const filename in RemoveExcessNodes.
00195  *
00196  * Revision 1.82  1999/10/05  22:49:05  scowan
00197  * Changed headere to use inheritance.
00198  *
00199  * Revision 1.81  1999/08/04 20:33:38  scowan
00200  * Added functions to validate element ID tables.
00201  *
00202  * Revision 1.80  1999/06/11 16:22:30  scowan
00203  * *** empty log message ***
00204  *
00205  * Revision 1.79  1999/06/11 16:21:24  scowan
00206  * *** empty log message ***
00207  *
00208  * Revision 1.78  1999/06/11 16:10:15  mju
00209  * In obj sel dlg set defaults for filter+filtdata.
00210  *
00211  * Revision 1.77  1999/06/11  14:46:34  mju
00212  * Obj sel dlg.
00213  *
00214  * Revision 1.76  1999/06/10  22:11:32  mju
00215  * Object selection dialog update.
00216  *
00217  * Revision 1.75  1999/05/27  16:00:34  mju
00218  * Move VPOINT defns to rvcdefns as used for CAD too.
00219  *
00220  * Revision 1.74  1999/05/26  14:06:07  mju
00221  * Header compiles.
00222  *
00223  * Revision 1.73  1999/05/07  21:24:09  mju
00224  * Hdr restruct.
00225  *
00226  * Revision 1.71  1999/01/05 19:13:00  scowan
00227  * Swapped multiple keywords
00228  *
00229  * Revision 1.68  1998/09/30  21:54:36  scowan
00230  * Setup DLL.
00231  *
00232  * Revision 1.64  1998/07/26  21:31:14  dfrolov
00233  * add MfComputeLevelingEqualMedian()
00234  *
00235  * Revision 1.61  1998/06/11  23:06:42  dfrolov
00236  * add MfComputeLevelingFMD() function
00237  *
00238  * Revision 1.60  1998/02/11  17:08:29  scowan
00239  * Added VertexLimit field.
00240  *
00241  * Revision 1.59  1998/02/10  18:26:22  scowan
00242  * Added prototypes.
00243  *
00244  * Revision 1.58  1998/02/02  15:48:25  mju
00245  * Remove obsolete prototypes.
00246  *
00247  * Revision 1.56  1998/01/27  23:14:16  scowan
00248  * Added eelement ID's.
00249  *
00250  * Revision 1.55  1998/01/26  20:05:29  scowan
00251  * Added prototypes.
00252  *
00253  * Revision 1.54  1997/12/16  18:31:09  dfrolov
00254  * add flag CONTOURING_SMOOTHING_GAUSSIAN
00255  *
00256  * Revision 1.53  1997/11/05  18:42:05  scowan
00257  * Change MergeV functions.
00258  *
00259  * Revision 1.52  1997/11/05  00:00:16  dfrolov
00260  * change query strings to be UNICODE in MfConvertTINtoVectorContouringExt
00261  *
00262  * Revision 1.51  1997/10/31  15:59:39  dfrolov
00263  * changed parameters for MfConvertRaster/TINtoVector Contouring
00264  *
00265  * Revision 1.50  1997/10/30  23:05:29  dfrolov
00266  * remove parameters from MfConvertRaster/TIN to vector contouring
00267  *
00268  * Revision 1.49  1997/10/30  22:29:06  dfrolov
00269  * change parameters to UNICODE for MfConvertTINtoVectorContouring and
00270  * MfConvertRasterToVectorContouring
00271  *
00272  * Revision 1.48  1997/10/13  21:32:36  VDRONOV
00273  * change parameter of MfComputeVoronoiPolygons from char* to UNICODE*.
00274  *
00275  * Revision 1.47  1997/08/15  17:01:10  scowan
00276  * Added SplitLinesAtMaxPoints.
00277  *
00278  * Revision 1.44  1997/08/14  20:20:16  scowan
00279  * Changed depth sort function.
00280  *
00281  * Revision 1.43  1997/08/14  20:04:53  scowan
00282  * Added RemoveExcess Nodes prototype.
00283  *
00284  * Revision 1.42  1997/06/26  21:56:49  mju
00285  * Add labelsize parameter to Mf GenerateVectLabelPosn().
00286  *
00287  * Revision 1.41  1997/06/26  20:50:23  mju
00288  * Add Mf GenerateVectLabelPosn() prototype.
00289  *
00290  * Revision 1.40  1997/06/05  22:12:46  dfrolov
00291  * CONTOURING_ELEVATIONRANGE flag added
00292  *
00293  * Revision 1.39  1997/05/22  22:13:46  scowan
00294  * Added a swap islands function.
00295  *
00296  * Revision 1.38  1997/05/08  18:36:28  scowan
00297  * Changed ReadPolyTrans.
00298  *
00299  * Revision 1.37  1997/02/25  17:51:57  dfrolov
00300  * filter size parameter is added to MfConvertRasterToVectorContouring
00301  *
00302  * Revision 1.36  1997/01/13  22:24:23  dfrolov
00303  * add MfComputeVoronoiPolygons
00304  *
00305  * Revision 1.1  1994/02/08  16:33:28  scowan
00306  * Initial revision
00307  *
00308  * \endif
00309 **/
00310 
00311 #ifndef  INC_MI32_RVCVECT_H
00312 #define  INC_MI32_RVCVECT_H
00313 
00314 #ifndef  INC_MI32_RVCDEFNS_H
00315    #include <mi32/rvcdefns.h>
00316 #endif
00317 
00318 #ifndef  INC_MI32_POINT_H
00319    #include <mi32/point.h>
00320 #endif
00321 
00322 #ifndef  INC_MI32_RECT_H
00323    #include <mi32/rect.h>
00324 #endif
00325 
00326 #ifndef INC_MI32_IEEEFP_H
00327    #include <mi32/ieeefp.h>
00328 #endif
00329 
00330 #ifndef INC_MI32_SIMPLEAR_H
00331    #include <mi32/simplear.h>
00332 #endif
00333 
00334 #ifndef INC_MI32_TRANSGEN_H         // For TRANSFUNC definition
00335    #include <mi32/transgen.h>
00336 #endif
00337 
00338 #define VECTORFLAG_NoStdAttribTables      0x0001
00339 #define VECTORFLAG_NoElementIDTables      0x0002
00340 #define VECTORFLAG_CannotReduceExtents    0x0004
00341 #define VECTORFLAG_CannotExpandExtents    0x0008
00342 
00343 //! Definition for overall vector header.
00344 struct RVCVECTINFO : public RVCGENINFO {
00345    DPOINT3D_OLD minval;                //!< Minimum value for entire vector object
00346    DPOINT3D_OLD maxval;                //!< Maximum value for entire vector object
00347    DOUBLE xscale;                      //!< X scale between vector and ground distances
00348    DOUBLE yscale;                      //!< Y scale between vector and ground distances
00349    DOUBLE zscale;                      //!< Z scale between vector and ground distances
00350    INT32 NumNodes;                     //!< Number of nodes in the entire object
00351    INT32 NumLines;                     //!< Number of lines in the entire object
00352    INT32 NumPolys;                     //!< Number of polygons in the vector plane
00353    INT32 NumPoints;                    //!< Number of point features in the vector object
00354    INT32 maxpoints;                    //!< Maximum number of points in any line
00355    INT32 maxlines;                     //!< Maximum number of lines in any polygon or node line list
00356    INT32 maxislands;                   //!< Maximum number of islands in any polygon
00357    UINT16 PointType;                   //!< Type of coordinate VPOINT_...
00358    UINT16 vectstat;                    //!< Obsolete field
00359    INT32 NumLabels;                    //!< Number of vector labels in the entire object
00360    UINT16 VectorType;                  //!< Vector type
00361    UINT16 VectorFlags;                 //!< Vector flags, see below
00362    INT32 NextLineID;                   //!< ID of next line
00363    INT32 NextPolyID;                   //!< ID of next polygon
00364    INT32 NextPointID;                  //!< ID of next point
00365    INT32 VertexLimit;                  //!< Maximum number of vertices allowed in the vector object
00366    DOUBLE m_TotalLineLength;
00367    
00368    RVCVECTINFO (
00369       ) {
00370       Clear();
00371       this->VectorFlags = VECTORFLAG_NoElementIDTables;
00372       }
00373    
00374    RVCVECTINFO (
00375       const RVCGENINFO& ginfo
00376       ) {Clear();*static_cast<RVCGENINFO*>(this) = ginfo;}
00377    
00378    RVCVECTINFO& operator= (
00379       const RVCGENINFO& ginfo          //!< RVCVECTINFO to copy
00380       ) {
00381       *static_cast<RVCGENINFO*>(this) = ginfo;
00382       return (*this);
00383       }
00384       
00385    void Clear (
00386       ) {memset(static_cast<void*>(this), 0, sizeof(*this));}
00387    
00388    //! Get extents of vector object.
00389    //! @return extents of vector object
00390    DRECT3D GetExtents (
00391       ) const {
00392       DRECT3D rect;
00393       rect.xinit = minval.x;     
00394       rect.yinit = minval.y;     
00395       rect.zinit = minval.z;     
00396       rect.xlast = maxval.x;
00397       rect.ylast = maxval.y;
00398       rect.zlast = maxval.z;
00399       return (rect);
00400       }
00401 
00402    //! Set extents of vector object.
00403    void SetExtents (
00404       const DRECT3D& rect
00405       ) {
00406       minval.x = rect.xinit;     
00407       minval.y = rect.yinit;     
00408       minval.z = rect.zinit;     
00409       maxval.x = rect.xlast;
00410       maxval.y = rect.ylast;
00411       maxval.z = rect.zlast;
00412       return;
00413       }
00414 
00415    };
00416 
00417 //! Vector Node record definition.
00418 struct RVCVECTNODE : public DPOINT3D {
00419 
00420    // CONSTRUCTORS
00421    
00422    RVCVECTNODE (
00423       ) : DPOINT3D(0.0,0.0,0.0) {}
00424       
00425    RVCVECTNODE (
00426       const DPOINT2D& rhs
00427       ) : DPOINT3D(rhs) {}
00428 
00429    RVCVECTNODE (
00430       const DPOINT3D& rhs
00431       ) : DPOINT3D(rhs) {}
00432 
00433    // OPERATORS
00434    
00435    //! Assignment from DPOINT3D
00436    RVCVECTNODE& operator= (
00437       const DPOINT3D& rhs
00438       ) {
00439       *static_cast<DPOINT3D*>(this) = rhs;
00440       return (*this);
00441       }
00442 
00443    //! Assignment from DPOINT2D
00444    RVCVECTNODE& operator= (
00445       const DPOINT2D& rhs
00446       ) {
00447       *static_cast<DPOINT3D*>(this) = rhs;
00448       return (*this);
00449       }
00450 
00451    // METHODS
00452 
00453    //! Get extents of vector node.
00454    //!
00455    //! @return extents of vector node
00456    DRECT3D GetExtents (
00457       ) const {
00458       return (DRECT3D(*this));
00459       }
00460       
00461    bool IsValid (
00462       ) const {
00463       return (!IsNaN(x));
00464       }
00465       
00466    };
00467 
00468 //! Vector Polygon record definition.
00469 struct RVCVECTPOLY {
00470    DPOINT3D minval;                    //!< Polygon minimum extents
00471    DPOINT3D maxval;                    //!< Polygon maximum extents
00472    INT32 polyinside;                   //!< Polygon we're inside of, or -1 if not contained in another polygon
00473    #ifndef GENERATING_DOXYGEN_OUTPUT
00474    UINT8 space[4];
00475    #endif //!< GENERATING_DOXYGEN_OUTPUT
00476 
00477    RVCVECTPOLY (
00478       ) {
00479       memset(this, 0, sizeof(*this));
00480       polyinside = -1;
00481       }
00482 
00483    //! Get extents of vector polygon.
00484    //! @return extents of vector polygon
00485    DRECT3D GetExtents (
00486       ) const {
00487       DRECT3D retval(minval);
00488       retval.Extend(maxval);
00489       return (retval);
00490       }
00491 
00492    bool IsValid (
00493       ) const {
00494       return (!IsNaN(minval.x));
00495       }
00496       
00497    void SetExtents (
00498       const DRECT3D& rect
00499       ) {
00500       minval.x = rect.xinit;     
00501       minval.y = rect.yinit;     
00502       minval.z = rect.zinit;     
00503       maxval.x = rect.xlast;
00504       maxval.y = rect.ylast;
00505       maxval.z = rect.zlast;
00506       return;
00507       }
00508 
00509    };
00510 
00511 //! Vector point record definition.
00512 struct RVCVECTPOINT : public DPOINT3D {
00513 
00514    // CONSTRUCTORS
00515    
00516    RVCVECTPOINT (
00517       ) : DPOINT3D(0.0,0.0,0.0) {}
00518       
00519    RVCVECTPOINT (
00520       const DPOINT2D& rhs
00521       ) : DPOINT3D(rhs) {}
00522 
00523    RVCVECTPOINT (
00524       const DPOINT3D& rhs
00525       ) : DPOINT3D(rhs) {}
00526 
00527    // OPERATORS
00528    
00529    //! Assignment from DPOINT3D
00530    RVCVECTPOINT& operator= (
00531       const DPOINT3D& rhs
00532       ) {
00533       *static_cast<DPOINT3D*>(this) = rhs;
00534       return (*this);
00535       }
00536 
00537    //! Assignment from DPOINT2D
00538    RVCVECTPOINT& operator= (
00539       const DPOINT2D& rhs
00540       ) {
00541       *static_cast<DPOINT3D*>(this) = rhs;
00542       return (*this);
00543       }
00544 
00545    // METHODS  
00546 
00547    //! Get extents of vector point.
00548    //!
00549    //! @return extents of vector point
00550    DRECT3D GetExtents (
00551       ) const {
00552       return (DRECT3D(*this));
00553       }
00554       
00555    bool IsValid (
00556       ) const {
00557       return (!IsNaN(x));
00558       }
00559       
00560    };
00561 
00562 //! Vector Line record definition.
00563 struct RVCVECTLINE {
00564    DPOINT3D minval;                    //!< Line minimum extents
00565    DPOINT3D maxval;                    //!< Line maximum extents
00566    INT32 left, right;                  //!< Polygons on left and right side of line, -1 if none
00567    INT32 start, end;                   //!< Nodes at start and end of line, may be equal
00568    
00569    RVCVECTLINE (
00570       ) {
00571       memset(this, 0, sizeof(*this));
00572       left = right = start = end = -1;
00573       }
00574 
00575    //! Get extents of vector line.
00576    //!
00577    //! @return extents of vector line
00578    DRECT3D GetExtents (
00579       ) const {
00580       DRECT3D retval(minval);
00581       retval.Extend(maxval);
00582       return (retval);
00583       }
00584       
00585    bool IsValid (
00586       ) const {
00587       return (!IsNaN(minval.x));
00588       }
00589       
00590    void SetExtents (
00591       const DRECT3D& rect
00592       ) {
00593       minval.x = rect.xinit;     
00594       minval.y = rect.yinit;     
00595       minval.z = rect.zinit;     
00596       maxval.x = rect.xlast;
00597       maxval.y = rect.ylast;
00598       maxval.z = rect.zlast;
00599       return;
00600       }
00601 
00602    };
00603 
00604 //! Values for vectinfo.VectorType field
00605 #define  VECTORTYPE_Polygonal    0     //!< Vector object has polygons and full polygon-line-node topology
00606 #define  VECTORTYPE_Planar       1     //!< Vector object has no polygons and full line-node topology
00607 #define  VECTORTYPE_Network      2     //!< Vector object has no polygons and connected line-node topology
00608 #define  VECTORTYPE_NoTopology   3     //!< Vector object has no topology, lines only
00609 
00610 //! Contouring
00611 #define CONTOURING_LogScale            0x0001   //!< use natural logarithmic scale
00612 #define CONTOURING_BiCubic             0x0002   //!< use bicubic interpolation
00613 #define CONTOURING_SMOOTHING_AVERAGE   0x0004   //!< use average smoothing
00614 #define CONTOURING_SMOOTHING_QUADRATIC 0x0008   //!< use quadratic smoothing
00615 #define CONTOURING_SMOOTHING_CUBIC     0x0010   //!< use cubic smoothing
00616 #define CONTOURING_SMOOTHING_QUARTIC   0x0020   //!< use quartic smoothing
00617 #define CONTOURING_SMOOTHING_GAUSSIAN  0x0040   //!< use gaussian smoothing
00618 #define CONTOURING_ELEVATIONRANGE      0x0080   //!< create table with elevation ranges for each polygon
00619 #define CONTOURING_Threshold           0x0100   //!< Use "iterative thesholding" method
00620 
00621 //! Disallow memset/memcpy.
00622 PREVENT_MEMFUNC(RVCVECTINFO)
00623 
00624 //!   Vector label structures and flags
00625 
00626 #ifdef index
00627 #undef index
00628 #endif
00629 
00630 //! Label description structure.
00631 struct RVCLABELDESC {
00632    INT32 type;                         //!< Type of label
00633    INT32 index;                        //!< Index of label
00634    RVC::OBJECTNAME name;               //!< Label name
00635    INT32 StyleIndex;                   //!< Label style index
00636    FLOAT height;                       //!< Height of text to use if style not assigned or exists
00637    };
00638 
00639 #define LABELDESC_Fixed       0x0000
00640 #define LABELDESC_Query       0x0001
00641 #define LABELDESC_UNICODE     0x0002
00642 #define LABELDESC_CurveFit    0x0004      //!< Fit label along baseline curve
00643 #define LABELDESC_SplineFit   0x0008      //!< Fit label along baseline curve with spline
00644 #define LABELDESC_ClipUnder   0x0010      //!< Clip out vector features from under the label
00645 
00646 //! Style access structure for leader lines.
00647 struct RVCLABELSTYLE {
00648    RVC::OBJECTNAME name;               //!< Style name
00649    INT32 StyleIndex;                   //!< Style index
00650    #ifndef GENERATING_DOXYGEN_OUTPUT
00651    UINT8 space[4];
00652    #endif //!< GENERATING_DOXYGEN_OUTPUT
00653    };
00654 
00655 //! Leader line structure.
00656 struct RVCLEADERLINE {
00657    DPOINT3D TiePoint;                  //!< Leader line tie point
00658    INT32 ElemNum;                      //!< Element number
00659    INT16 ElemType;                     //!< ELEMTYPE_... (Point, Line, Poly, Node, or Empty for no attachment)
00660    #ifndef GENERATING_DOXYGEN_OUTPUT
00661    INT16 space;
00662    #endif //!< GENERATING_DOXYGEN_OUTPUT
00663    INT32 PointIndex;                   //!< Point index
00664    INT32 LabelStyleIndex;              //!< Label style index
00665    };
00666 
00667 //! Leader info structure.
00668 struct VECTLEADERINFO {
00669    RVCLEADERLINE LeaderLine;           //!< Leader line
00670    RVCLABELSTYLE LStyleIndex;          //!< Label style index
00671    void *LeaderPts;                    //!< Point list
00672    INT32 NumLeaderPts;                 //!< Number of points
00673    };
00674 
00675 //! Label structure
00676 struct RVCVECTLABEL {
00677    RVCLABELDESC desc;                  //!< Label description
00678    void *LabelStr;                     //!< String or query
00679    INT32 LabelStrSize;                 //!< Size of string or query
00680    void *BasePts;                      //!< Point list
00681    INT32 NumBasePts;                   //!< Number of points
00682    VECTLEADERINFO *LLines;             //!< Leader Line Data buffer
00683    INT32 NumLLines;                    //!< Number of leader lines allocated
00684    int PointSize;                      //!< Size of the points in bytes
00685    };
00686 
00687 /*-------------------------------------------------------------------------*/
00688 /*    Object Selection Dialogs                                             */
00689 /*-------------------------------------------------------------------------*/
00690 
00691 #if (defined(X_NATIVE) || defined(WIN32_MFC)) && !defined(DEPRECATE_GROUPKEY)
00692 
00693 //! Pop-up dialog allowing user to select a vector object.
00694 DEPRECATED inline int MdlgGetVectorObject (
00695    MDLGPARENT dlgparent,               //!< Parent widget
00696    FILEPATH& filename,                 //!< Default filename
00697    INT32 *inode,                       //!< Vector object inode passed/returned
00698    const void *prompt,                 //!< Prompt label
00699    RVCVECTINFO *objinfo,               //!< Object header passed/returned
00700    MfFiltFuncProto filter=0,           //!< Filter function
00701    void *filtuserdata=0,               //!< Filter function data
00702    GETOBJFLAGS flags=GETOBJFLAG_None   //!< Get object flags (See rvcdefns.h)
00703    ) {
00704    return (MdlgGetObject(dlgparent,filename,inode,prompt,OTYPE_VECTOR,RVCCONV_VECTOR,objinfo,sizeof(RVCVECTINFO),filter,filtuserdata,flags));
00705    }
00706 
00707 //! Pop-up dialog allowing user to select a vector object.
00708 DEPRECATED inline int MdlgGetVectorObject (
00709    MDLGPARENT dlgparent,               //!< Parent widget
00710    UNICODE *filename,                  //!< Default filename
00711    INT32 *inode,                       //!< Vector object inode passed/returned
00712    const void *prompt,                 //!< Prompt label
00713    RVCVECTINFO *objinfo,               //!< Object header passed/returned
00714    MfFiltFuncProto filter=0,           //!< Filter function
00715    void *filtdata=0,                   //!< Filter function data
00716    GETOBJFLAGS flags=GETOBJFLAG_None   //!< Get object flags (See rvcdefns.h)
00717    ) {
00718    return (MdlgGetObject(dlgparent,filename,inode,prompt,OTYPE_VECTOR,RVCCONV_VectInfo,objinfo,sizeof(RVCVECTINFO),filter,filtdata,flags));
00719    }
00720 
00721 #endif   //!< X_NATIVE || WIN32_MFC
00722 
00723 //! Read vector header.
00724 inline int MfReadVectHeader (
00725    int fhandle,                        //!< Open file handle
00726    RVCINODENUM inode,                  //!< Vector object inode
00727    RVCVECTINFO* info                   //!< Vector header passed / returned
00728    ) {
00729    return (_MfReadHeader(fhandle,inode,info,sizeof(RVCVECTINFO),RVCCONV_VECTOR));
00730    }
00731 
00732 //! Write vector header.
00733 inline int MfWriteVectHeader (
00734    int fhandle,                        //!< Open file handle
00735    RVCINODENUM inode,                  //!< Vector object inode
00736    RVCVECTINFO* info                   //!< Vector header to write
00737    ) {
00738    return (_MfWriteHeader(fhandle,inode,info,sizeof(RVCVECTINFO),RVCCONV_VECTOR));
00739    }
00740 
00741 /*-----------------------------------------------------------------------*/
00742 /*    Prototypes for RVC Vector functions                                */
00743 /*-----------------------------------------------------------------------*/
00744 
00745 #if defined(__cplusplus)
00746 extern "C" {
00747 #endif
00748 
00749 #ifndef GENERATING_DOXYGEN_OUTPUT
00750 
00751 RVCAPPLIBEXPORT int _MfVectorClose (
00752    int id,
00753    RVCVECTINFO *info,
00754    int HeaderSize
00755    );
00756 
00757 RVCAPPLIBEXPORT int _MfVectorHeaderReadOpen (
00758    int id,
00759    RVCVECTINFO *newvinfo,
00760    int HeaderSize
00761    );
00762 
00763 RVCAPPLIBEXPORT int _MfVectorMake (
00764    int findex,
00765    RVCVECTINFO *newinfo,
00766    int HeaderSize,
00767    UINT32 flags
00768    );
00769 
00770 RVCAPPLIBEXPORT int _MfVectorOpen (
00771    int findex,
00772    INT32 inode,
00773    RVCVECTINFO *newinfo,
00774    int HeaderSize,
00775    UINT32 flags
00776    );
00777 
00778 #endif //!< GENERATING_DOXYGEN_OUTPUT
00779 
00780 //! Return current vector data conversion mode.
00781 //!
00782 //! @ return current vector data conversion mode
00783 RVCAPPLIBEXPORT UINT32 MfGetVectMode (
00784    int id                              //!< Open vector object handle
00785    );
00786 
00787 //! Return size of point elements in vector object.
00788 //!
00789 //! @return size of point elements
00790 RVCAPPLIBEXPORT int MfGetVPointSize (
00791    int id                              //!< Open vector object handle
00792    );
00793 
00794 //! Read a vector line element header.
00795 RVCAPPLIBEXPORT int MfReadVLine (
00796    int id,                             //!< Open vector handle
00797    INT32 num,                          //!< Line number to read
00798    RVCVECTLINE *hdr,                   //!< Line header data returned
00799    INT32 *numpts                       //!< Number of points in line returned
00800    );
00801 
00802 //! Read line list for a vector node element.
00803 RVCAPPLIBEXPORT int MfReadVNode (
00804    int id,                             //!< Open vector handle
00805    INT32 num,                          //!< Node number to read
00806    RVCVECTNODE *hdr,                   //!< Node header data returned
00807    INT32 *numlines                     //!< Number of lines in node line list returned
00808    );
00809 
00810 //! Read line list for a vector node element.
00811 RVCAPPLIBEXPORT INT32 MfReadVNodeLines (
00812    int id,                             //!< Open vector handle
00813    INT32 node,                         //!< Node number to read
00814    INT32 start,                        //!< Starting index in node line list
00815    INT32 num,                          //!< Number of line numbers to read
00816    INT32 *lines                        //!< List of line numbers returned
00817    );
00818 
00819 //! Read a vector point element.
00820 RVCAPPLIBEXPORT int MfReadVPoint (
00821    int id,                             //!< Open vector handle
00822    INT32 num,                          //!< Point number to read
00823    RVCVECTPOINT *hdr                   //!< Point header data returned
00824    );
00825 
00826 //! Read points for a vector line element.
00827 RVCAPPLIBEXPORT INT32 MfReadVPoints (
00828    int id,                             //!< Open vector handle
00829    INT32 line,                         //!< Line number to read
00830    INT32 start,                        //!< Starting point number to read
00831    INT32 num,                          //!< Number of points to read
00832    void *pts                           //!< Pointer to a point buffer
00833    );
00834 
00835 //! Read configurable points for a vector line element.
00836 //!
00837 //! The variable 'type' can be one of these values:
00838 //!   0                                Do not convert, read as stored
00839 //!   VPOINT_2DXY                      Convert to X,Y coordinates
00840 //!   VPOINT_2DXZ                      Convert to X,Z coordinates
00841 //!   VPOINT_2DYZ                      Convert to Y,Z coordinates
00842 //!   VPOINT_3DXYZ                     Convert to X,Y,Z coordinates
00843 RVCAPPLIBEXPORT INT32 MfReadVPointsGen (
00844    int id,                             //!< Open vector handle
00845    INT32 line,                         //!< Line number to read
00846    INT32 start,                        //!< Starting point number to read
00847    INT32 num,                          //!< Number of points to read
00848    int type,                           //!< Type of buffer to read into
00849    void *pts                           //!< Pointer to a point buffer
00850    );
00851 
00852 //! Read a vector polygon element header.
00853 RVCAPPLIBEXPORT int MfReadVPoly (
00854    int id,                             //!< Open vector handle
00855    INT32 num,                          //!< Polygon number to read
00856    RVCVECTPOLY *hdr,                   //!< Polygon header data returned
00857    INT32 *numlines,                    //!< Number of lines in polygon line list returned
00858    INT32 *numisles                     //!< Number of islands in polygon island list returned
00859    );
00860 
00861 //! Read island list for a vector polygon element.
00862 RVCAPPLIBEXPORT INT32 MfReadVPolyIslands (
00863    int id,                             //!< Open vector handle
00864    INT32 poly,                         //!< Polygon number to read
00865    INT32 start,                        //!< Starting island number to read
00866    INT32 num,                          //!< Number of islands to read
00867    INT32 *islands                      //!< Pointer to buffer to read into
00868    );
00869 
00870 //! Read line list for a vector polygon element.
00871 RVCAPPLIBEXPORT INT32 MfReadVPolyLines (
00872    int id,                             //!< Open vector handle
00873    INT32 poly,                         //!< Polygon number to read
00874    INT32 start,                        //!< Starting line number to read
00875    INT32 num,                          //!<  Number of lines to read
00876    INT32 *lines                        //!< Pointer to buffer to read into
00877    );
00878 
00879 //! Resize a vector object, deleting elements from the end.
00880 RVCAPPLIBEXPORT int MfResizeVect (
00881    int id,                             //!< Open vector handle
00882    INT32 lines,                        //!< New number of lines must be <= current number of lines
00883    INT32 nodes,                        //!< New number of nodes
00884    INT32 polys,                        //!< New number of polygons
00885    INT32 points                        //!< New number of point features
00886    );
00887 
00888 //! Set data conversion mode for a vector object.
00889 //!
00890 //! Vector modes:
00891 //!   VECTMODE_ConvTo2D
00892 //!   VECTMODE_Convto3D
00893 RVCAPPLIBEXPORT UINT32 MfSetVectMode (
00894    int id,                             //!< Open vector handle
00895    UINT32 mode                         //!< Data conversion mode
00896    );
00897 
00898 //! Get number of lines.
00899 //!
00900 //! @return number of lines
00901 RVCAPPLIBEXPORT INT32 MfVectorGetNumLines (
00902    int id                              //!< Open vector handle
00903    );
00904 
00905 //! Get number of polygons.
00906 //!
00907 //! @return number of polygons
00908 RVCAPPLIBEXPORT INT32 MfVectorGetNumPolygons (
00909    int id                              //!< Open vector handle
00910    ); 
00911 
00912 #ifndef GENERATING_DOXYGEN_OUTPUT
00913 RVCAPPLIBEXPORT int _MfVectorSetPointType (
00914    int id,
00915    int PointType
00916    );
00917 
00918 #endif //!< GENERATING_DOXYGEN_OUTPUT
00919 
00920 //! Write a vector line element header.
00921 RVCAPPLIBEXPORT int MfWriteVLine (
00922    int id,                             //!< Open vector handle
00923    INT32 num,                          //!< Line number to write
00924    const RVCVECTLINE *hdr              //!< Line header data to write
00925    );
00926 
00927 //! Write a vector node element header.
00928 RVCAPPLIBEXPORT int MfWriteVNode (
00929    int id,                             //!< Open vector handle
00930    INT32 num,                          //!< Node number to write
00931    const RVCVECTNODE *hdr              //!< Node header data to write
00932    );
00933 
00934 //! Write line list for a vector node element.
00935 RVCAPPLIBEXPORT INT32 MfWriteVNodeLines (
00936    int id,                             //!< Open vector handle
00937    INT32 node,                         //!< Node number to write
00938    INT32 total,                        //!< Total number of lines in this line
00939    INT32 start,                        //!< Starting line number to write
00940    INT32 num,                          //!< Number of lines to write
00941    const INT32 *lines                  //!< Pointer to list of line numbers
00942    );
00943 
00944 //! Write point for a vector line element.
00945 RVCAPPLIBEXPORT int MfWriteVPoint (
00946    int id,                             //!< Open vector handle
00947    INT32 num,                          //!< Point number to write
00948    const RVCVECTPOINT *hdr             //!< Point header data to write
00949    );
00950 
00951 //! Write points for a vector line element.
00952 RVCAPPLIBEXPORT INT32 MfWriteVPoints (
00953    int id,                             //!< Open vector handle
00954    INT32 line,                         //!< Line number to write
00955    INT32 total,                        //!< Total number of points in this line
00956    INT32 start,                        //!< Starting point number to write
00957    INT32 num,                          //!< Number of points to write
00958    const void *pts                     //!< Pointer to point buffer of appropriate type
00959    );
00960 
00961 //! Write a vector polygon element header.
00962 RVCAPPLIBEXPORT int MfWriteVPoly (
00963    int id,                             //!< Open vector handle
00964    INT32 num,                          //!< Polygon number to write
00965    const RVCVECTPOLY *hdr              //!< Polygon header data to write
00966    );
00967 
00968 //! Write island list for a vector polygon element.
00969 //!
00970 //! @return number of islands written >= 0 error code < 0
00971 RVCAPPLIBEXPORT INT32 MfWriteVPolyIslands (
00972    int id,                             //!< Open vector handle
00973    INT32 poly,                         //!< Polygon number to write
00974    INT32 total,                        //!< Total number of islands in this polygon
00975    INT32 start,                        //!< Starting island number to write
00976    INT32 num,                          //!< Number of island to write
00977    const INT32 *islands                //!< Pointer to list of islands
00978    );
00979 
00980 //! Write line list for a vector polygon element
00981 //!
00982 //! @returns number of lines written >= 0 error code < 0
00983 RVCAPPLIBEXPORT INT32 MfWriteVPolyLines (
00984    int id,                             //!< Open vector handle
00985    INT32 poly,                         //!< Polygon number to write
00986    INT32 total,                        //!< Total number of lines in this line
00987    INT32 start,                        //!< Starting line number to write
00988    INT32 num,                          //!< Number of lines to write
00989    const INT32 *lines                  //!< Pointer to list of lines
00990    );
00991 
00992 #ifndef GENERATING_DOXYGEN_OUTPUT
00993 INT32 MfLabelStringSize (int id, INT32 type, INT32 index);
00994 #endif //!< GENERATING_DOXYGEN_OUTPUT
00995 
00996 //! Return number of baseline points for a label.
00997 //!
00998 //! @return number of label baseline points or < 0 if error
00999 RVCAPPLIBEXPORT INT32 MfNumBaselinePoints (
01000    int id,                             //!< Handle for open vector object
01001    INT32 labelnum                      //!< Index into label entry
01002    );
01003 
01004 //! Return number of strings/queries that exist in object.
01005 //!
01006 //! @return number of label string entries or < 0 if error
01007 RVCAPPLIBEXPORT INT32 MfNumLabelStrings (
01008    int id,                             //!< Handle for open vector object
01009    INT32 type                          //!< Label type (fixed/query)
01010    );
01011 
01012 //! Return number of style references that exist in object.
01013 //!
01014 //! @return number of label style entries or < 0 if error
01015 RVCAPPLIBEXPORT INT32 MfNumLabelStyles (
01016    int id                              //!< Handle for open vector object
01017    );
01018 
01019 //! Return number of leader lines for a label.
01020 //!
01021 //! @return number of leader lines attached to this label
01022 RVCAPPLIBEXPORT INT32 MfNumLeaderLines (
01023    int id,                             //!< Handle for open vector object
01024    INT32 labelnum                      //!< Label number to check
01025    );
01026 
01027 //! Return number of leader line point arrays.
01028 //!
01029 //! @return number of leader line point arrays
01030 RVCAPPLIBEXPORT INT32 MfNumLeaderPointItems (
01031    int id                              //!< Handle for open vector object
01032    );
01033 
01034 //! Return number of leader line points for this leader line.
01035 //!
01036 //! @return number of points for this leader line
01037 RVCAPPLIBEXPORT INT32 MfNumLeaderPoints (
01038    int id,                             //!< Handle for open vector object
01039    INT32 num                           //!< Index into point array for leader lines.  (Use RVCLEADERLINE.PointIndex)
01040    );
01041 
01042 //! Read points for a label baseline.
01043 //!
01044 //! @return number of points read >= 0 or error < 0
01045 RVCAPPLIBEXPORT INT32 MfReadBaselinePoints (
01046    int id,                             //!< Handle to open vector object
01047    INT32 labelnum,                     //!< Label to read baseline points from
01048    INT32 start,                        //!< Starting point to read from
01049    INT32 num,                          //!< Number of points to read
01050    void *buf                           //!< Buffer to hold baseline points
01051    );
01052 
01053 //! Read label description structure for a label.
01054 RVCAPPLIBEXPORT int MfReadLabelDesc (
01055    int id,                             //!< Handle to open vector object
01056    INT32 labelnum,                     //!< Label reference to read
01057    RVCLABELDESC *desc                  //!< Label structure to read into
01058    );
01059 
01060 //! Read a string/query.
01061 //!
01062 //! NOTE: The type and index fields are from the RVCLABELDESC structure.
01063 RVCAPPLIBEXPORT INT32 MfReadLabelString (
01064    int id,                             //!< Handle to open vector object
01065    INT32 type,                         //!< Type of label to read
01066    INT32 index,                        //!< Index into string list
01067    void **string                       //!< Pointer to buffer to hold the label
01068    );
01069 
01070 //! Read a style reference for a label.
01071 RVCAPPLIBEXPORT int MfReadLabelStyle (
01072    int id,                             //!< Handle to open vector object
01073    INT32 stylenum,                     //!< Label style reference to read
01074    RVCLABELSTYLE *style                //!< Label style structure to read into.
01075    );
01076 
01077 //! Read a label leader line structure.
01078 //!
01079 //! @return number of leader lines read >= 0 or error < 0
01080 RVCAPPLIBEXPORT INT32 MfReadLeaderLines (
01081    int id,                             //!< Handle to open vector object
01082    INT32 labelnum,                     //!< Label number to read attached leader lines
01083    INT32 start,                        //!< Starting index to read leader lines
01084    INT32 num,                          //!< Number of leader lines to read
01085    RVCLEADERLINE *buf                  //!< Buffer to hold leader lines
01086    );
01087 
01088 //! Read points for a leader line.
01089 //!
01090 //! @return number of leader line points read >= 0 or error < 0
01091 RVCAPPLIBEXPORT INT32 MfReadLeaderPoints (
01092    int id,                             //!< Handle to open vector object
01093    INT32 leadernum,                    //!< Leader line number to read attached points from
01094    INT32 start,                        //!< Starting index to read leader line points
01095    INT32 num,                          //!< Number of leader line points to read
01096    void *buf                           //!< Buffer to hold leader line points
01097    );
01098 
01099 //! Write points for a label baseline.
01100 //!
01101 //! @return number of points written >= 0 or error < 0
01102 RVCAPPLIBEXPORT INT32 MfWriteBaselinePoints (
01103    int id,                             //!< Handle to open vector object
01104    INT32 labelnum,                     //!< Label to write baseline points to
01105    INT32 total,                        //!< Total number of baseline points to be written
01106    INT32 start,                        //!< Starting point to write to
01107    INT32 num,                          //!< Number of points to write
01108    const void *buf                     //!< Buffer to hold baseline points
01109    );
01110 
01111 //! Write label description structure for a label.
01112 RVCAPPLIBEXPORT int MfWriteLabelDesc (
01113    int id,                             //!< Handle to open vector object
01114    INT32 labelnum,                     //!< Label reference to write
01115    const RVCLABELDESC *desc            //!< Label structure to write from
01116    );
01117 
01118 //! Write a string/query.
01119 //!
01120 //! @return number of characters written >= 0 or error < 0
01121 RVCAPPLIBEXPORT INT32 MfWriteLabelString (
01122    int id,                             //!< Handle to open vector object
01123    INT32 type,                         //!< Type of label to write
01124    INT32 index,                        //!< Index into string list
01125    const void *string,                 //!< String buffer to write from
01126    INT32 len                           //!< Length of string to write in bytes
01127    );
01128 
01129 //! Write a style reference for a label.
01130 RVCAPPLIBEXPORT int MfWriteLabelStyle (
01131    int id,                             //!< Handle to open vector object
01132    INT32 stylenum,                     //!< Label style reference to write
01133    const RVCLABELSTYLE *style          //!< Label style structure to write from
01134    );
01135 
01136 //! Write a label leader line structure.
01137 //!
01138 //! @return number of leader lines written >= 0 or error < 0
01139 RVCAPPLIBEXPORT INT32 MfWriteLeaderLines (
01140    int id,                             //!< Handle to open vector object
01141    INT32 labelnum,                     //!< Label number to write attached leader lines
01142    INT32 total,                        //!< Total number of leader lines to write
01143    INT32 start,                        //!< Starting index to write leader lines
01144    INT32 num,                          //!< Number of leader lines to write
01145    RVCLEADERLINE *buf                  //!< Buffer to write leader lines from
01146    );
01147 
01148 //! Write points for a leader line.
01149 //!
01150 //! @return number of leader line points written >= 0 or error < 0
01151 RVCAPPLIBEXPORT INT32 MfWriteLeaderPoints (
01152    int id,                             //!< Handle to open vector object
01153    INT32 leadernum,                    //!< Leader line number to write attached points from
01154    INT32 total,                        //!< Total number of leader lines to write
01155    INT32 start,                        //!< Starting index to write leader line points
01156    INT32 num,                          //!< Number of leader line points to write
01157    const void *buf                     //!< Buffer to hold leader line points
01158    );
01159 
01160 //! High level vector label functions
01161 #ifndef GENERATING_DOXYGEN_OUTPUT
01162 
01163 RVCAPPLIBEXPORT void _MfVectorLabelFree (
01164    RVCVECTLABEL *vlabel,
01165    int LabelSize
01166    );
01167 
01168 RVCAPPLIBEXPORT int _MfVectorLabelRead (
01169    int vid,
01170    INT32 labelnum,
01171    RVCVECTLABEL *vlabel,
01172    int LabelSize
01173    );
01174 
01175 RVCAPPLIBEXPORT int _MfVectorLabelTrans (
01176    RVCVECTLABEL *vlabel,
01177    int LabelSize,
01178    TRANSFUNC Trans,
01179    void *udata
01180    );
01181 
01182 RVCAPPLIBEXPORT int _MfVectorLabelWrite (
01183    int vid,
01184    INT32 labelnum,
01185    RVCVECTLABEL *vlabel,
01186    int LabelSize
01187    );
01188 
01189 #endif //!< GENERATING_DOXYGEN_OUTPUT
01190 
01191 //! Perform geophysical leveling using "Floating Mean Distance" method.
01192 int MfComputeLevelingFMD (
01193    UNICODE *ifilename,                 //!< Input filename
01194    INT32 inode,                        //!< Object inode
01195    UNICODE *ofilename,                 //!< Output filename
01196    RVCVECTINFO *OutInfo,               //!< Output vector info
01197    DOUBLE rpar,                        //!< In meters
01198    DOUBLE rtr                          //!< In meters
01199    );
01200 
01201 //! Computes median of the whole object and then sets the median of each line to this value.
01202 int MfComputeLevelingEqualMedian (
01203    UNICODE *ifilename,                 //!< Input filename
01204    INT32 inode,                        //!< Object inode
01205    UNICODE *ofilename,                 //!< Output filename
01206    RVCVECTINFO *OutInfo                //!< RVC info returned
01207    );
01208 
01209 //! Compute Voronoi polygons from set of points.
01210 int MfComputeVoronoiPolygons (
01211    int Vectid,                         //!< Input vector object handle
01212    RVCVECTINFO *VectInfo,              //!< Vector header for input object
01213    UINT8 *PointSel,                    //!< Bit-array for selecting points for processing (may be NULL to select all)
01214    UINT8 *OutputSel,                   //!< Bit-array for selecting points to merge together (may be NULL if just want simple Voronoi)
01215    int fhandle,                        //!< Open file handle for output object
01216    UNICODE *Filename,                  //!< Output file name
01217    RVCVECTINFO *VorInfo,               //!< Vector header for output object passed/returned
01218    DOUBLE ExtFactor                    //!< Boundary extension factor between 0.0....1.0
01219    );
01220 
01221 //! Convert a raster object to a vector object by tracing boundaries.
01222 ERRVALUE MfConvertRasterToVectorBound (
01223    int ifhandle,                       //!< Source file handle
01224    INT32 irastinode,                   //!< Source raster inode
01225    int ofhandle,