tin.h

Go to the documentation of this file.
00001 /**
00002  * \file rvc/tin.h 
00003  * \brief interface for the RVC::TIN class.
00004  *
00005  * \if NODOC
00006  * $Id: tin.h_v 1.54 2004/08/24 22:26:30 scowan Exp $
00007  *
00008  * $Log: tin.h_v $
00009  * Revision 1.54  2004/08/24 22:26:30  scowan
00010  * Added virtual methods to get and set total line length.
00011  *
00012  * Revision 1.53  2004/07/12 23:21:24  scowan
00013  * Removed use of geo region.
00014  *
00015  * Revision 1.52  2004/06/01 23:10:38  scowan
00016  * Added tin to cad conversion.
00017  *
00018  * Revision 1.51  2004/03/20 18:24:00  scowan
00019  * Added find closest elements override.
00020  *
00021  * Revision 1.50  2004/03/08 17:35:47  scowan
00022  * Added trans list and extract methods.
00023  *
00024  * Revision 1.49  2003/11/21 22:17:11  scowan
00025  * Support new Capabilities system.
00026  *
00027  * Revision 1.48  2003/10/07 17:30:14  scowan
00028  * Object virtual method changes.
00029  *
00030  * Revision 1.47  2003/09/30 16:52:06  dwilliss
00031  * Doxygen
00032  *
00033  * Revision 1.46  2003/09/25 21:20:04  dwilliss
00034  * Fixed doxygen comment
00035  *
00036  * Revision 1.45  2003/09/15 13:49:45  fileserver!dwilliss
00037  * Doxygen
00038  *
00039  * Revision 1.44  2003/06/19 17:46:06  scowan
00040  * Added virtual method and enum.
00041  *
00042  * Revision 1.43  2003/06/04 23:35:12  scowan
00043  * Added find element draw set.
00044  *
00045  * Revision 1.42  2003/05/12 23:33:20  scowan
00046  * Changes to virtual methods.
00047  *
00048  * Revision 1.41  2003/05/07 22:20:46  scowan
00049  * Changed virtual method format.
00050  *
00051  * Revision 1.40  2002/09/30 23:22:26  scowan
00052  * Made element search code const.
00053  *
00054  * Revision 1.39  2002/09/17 22:49:21  scowan
00055  * More virtual method adjustment.
00056  *
00057  * Revision 1.38  2002/09/17 16:15:37  scowan
00058  * Added more methods.
00059  *
00060  * Revision 1.37  2002/09/12 22:09:31  scowan
00061  * Updated search tree copy elem.
00062  *
00063  * Revision 1.36  2002/09/11 22:18:26  scowan
00064  * Added more methods.
00065  *
00066  * Revision 1.35  2002/09/10 22:55:17  scowan
00067  * Added more methods.
00068  *
00069  * Revision 1.34  2002/09/10 21:04:02  scowan
00070  * Added element iterator and a method.
00071  *
00072  * Revision 1.33  2002/09/03 22:18:38  scowan
00073  * More virtual method moves.
00074  *
00075  * Revision 1.32  2002/08/29 22:13:29  scowan
00076  * Virtual method adjustment.
00077  *
00078  * Revision 1.31  2002/06/19 22:24:14  scowan
00079  * More method changes.
00080  *
00081  * Revision 1.30  2002/06/18 22:15:27  scowan
00082  * Added extract interface.
00083  *
00084  * Revision 1.29  2002/04/30 17:33:56  scowan
00085  * Change base make parm class name.
00086  *
00087  * Revision 1.28  2002/04/30 14:40:40  scowan
00088  * Removed namespace from inheritance.
00089  *
00090  * Revision 1.27  2002/04/30 14:03:17  scowan
00091  * More const.
00092  *
00093  * Revision 1.26  2002/04/26 22:44:55  scowan
00094  * Added more virtual methods.
00095  *
00096  * Revision 1.25  2002/03/01 16:19:37  scowan
00097  * Added virtual methods.
00098  *
00099  * Revision 1.24  2002/03/01 15:27:14  scowan
00100  * Added element id methods.
00101  *
00102  * Revision 1.23  2002/02/27 23:25:00  scowan
00103  * Added get element extents methods.
00104  *
00105  * Revision 1.22  2002/01/09 23:41:11  scowan
00106  * Avoid mass docs.
00107  *
00108  * Revision 1.21  2002/01/09 23:40:23  scowan
00109  * Added more default setup for makeparm constructor.
00110  *
00111  * Revision 1.20  2002/01/09 23:38:46  scowan
00112  * Moved makeparms out of the class and added more make parameters.
00113  *
00114  * Revision 1.19  2002/01/03 22:57:38  scowan
00115  * Added extents management methods.
00116  *
00117  * Revision 1.18  2001/10/08 20:49:54  scowan
00118  * Added element region method.
00119  *
00120  * Revision 1.17  2001/09/28 15:29:24  scowan
00121  * Added extetnts to the make parms.
00122  *
00123  * Revision 1.16  2001/07/31 16:40:43  scowan
00124  * Added new interface methods.
00125  *
00126  * Revision 1.15  2001/06/14 16:08:07  scowan
00127  * Changed source type.
00128  *
00129  * Revision 1.14  2001/06/13 22:32:06  scowan
00130  * Added to RVC namespace.
00131  *
00132  * Revision 1.13  2001/06/13 15:40:33  scowan
00133  * Changed objtype enum.
00134  * Added make methods.
00135  *
00136  * Revision 1.12  2001/06/12 15:40:35  scowan
00137  * Added comments.
00138  *
00139  * Revision 1.11  2001/05/31 19:27:49  scowan
00140  * Made methods read, write and add.
00141  *
00142  * Revision 1.10  2001/05/25 14:53:29  scowan
00143  * Added missing pure method.
00144  *
00145  * Revision 1.9  2001/05/24 17:37:36  scowan
00146  * Added virtual methods for finding objects.
00147  *
00148  * Revision 1.8  2001/04/24 14:25:16  scowan
00149  * More const.
00150  *
00151  * Revision 1.7  2001/04/23 22:52:10  scowan
00152  * Added find closest methods.
00153  *
00154  * Revision 1.6  2001/04/23 17:46:10  scowan
00155  * Added update extents.
00156  *
00157  * Revision 1.5  2000/12/01 16:04:10  scowan
00158  * Fixed MAC errors.
00159  *
00160  * Revision 1.4  2000/11/24 22:53:35  scowan
00161  * Add set extents virtual method.
00162  *
00163  * Revision 1.3  2000/11/17 15:48:29  scowan
00164  * Removed unnecessary include file.
00165  *
00166  * Revision 1.2  2000/10/19 21:17:48  scowan
00167  * Checked in for vacation.
00168  *
00169  * Revision 1.1  2000/10/02 17:40:21  scowan
00170  * Initial revision
00171  *
00172  * \endif
00173 **/
00174 
00175 //!   \class RVC::TIN rvc/tin.h
00176 //!   \brief Manages RVC::OBJTYPE_TIN RVC objects.  
00177 //!   
00178 //!   The interface currently wraps the MfTIN functions.
00179 //!   
00180 //!   RVC Object Types that this class supports: RVC::OBJTYPE_TIN.
00181 //!
00182 //!   Default RVC Object Type for this class: RVC::OBJTYPE_TIN.
00183 //!
00184 //!   Valid parents for this class:
00185 //!      - RVC::OBJTYPE_File
00186 //!      - RVC::OBJTYPE_Folder
00187 
00188 #ifndef INC_RVC_TIN_H
00189 #define INC_RVC_TIN_H
00190 
00191 #ifndef INC_RVC_GEOMETRC_H
00192    #include <rvc/geometrc.h>
00193 #endif
00194 
00195 #ifndef INC_MI32_RVCTIN_H
00196    #include <mi32/rvctin.h>
00197 #endif
00198 
00199 #ifndef INC_MI32_SIMPLEAR_H
00200    #include <mi32/simplear.h>
00201 #endif
00202 
00203 namespace RVC {
00204 
00205 #ifndef GENERATING_DOXYGEN_OUTPUT
00206 // Forward declarations
00207 class QSEARCHTREE;
00208 class CAD;
00209 #endif // GENERATING_DOXYGEN_OUTPUT
00210 
00211 class TIN : public GEOMETRIC {
00212    public:
00213 
00214       #ifndef GENERATING_DOXYGEN_OUTPUT
00215       class MAKEPARMS;
00216       #endif // GENERATING_DOXYGEN_OUTPUT
00217 
00218       //! Constant iterator class
00219       //!
00220       //! This class is used to iterate through a vector objects elements
00221       //! See methods ElementBegin() and ElementEnd() for obtaining an element iterator
00222       template <class _ELEM>  
00223       class ELEMITERATOR {
00224       public:
00225 
00226          // CONSTRUCTORS
00227 
00228          //! Default constructor
00229          ELEMITERATOR (
00230             ) : 
00231             m_ElemNum(-1),
00232             m_CurrentObj(0)
00233             {}
00234 
00235          //! Idiot constructor for G++
00236          ELEMITERATOR (
00237             int WorthlessValue
00238             ) : 
00239             m_ElemNum(-1),
00240             m_CurrentObj(0)
00241             {}
00242 
00243          //! Internal constructor used by ElementEnd() methods
00244          ELEMITERATOR (
00245             const RVC::TIN* tin,
00246             INT32 ElemNum
00247             ) : 
00248             m_ElemNum(ElemNum),
00249             m_CurrentObj(tin)
00250             {}
00251 
00252          //! Copy constructor
00253          ELEMITERATOR (
00254             const ELEMITERATOR<_ELEM>& rhs
00255             ) : 
00256             m_ElemNum(rhs.m_ElemNum),
00257             m_CurrentObj(rhs.m_CurrentObj),
00258             m_Element(rhs.m_Element)
00259             {}
00260 
00261          //! Internal constructor used by ElementBegin() methods
00262          ELEMITERATOR (
00263             const RVC::TIN* tin
00264             ) :
00265             m_ElemNum(-1),
00266             m_CurrentObj(tin)
00267             {
00268             ERRVALUE err = 0;
00269             do {           //! Scan to the first valid element
00270                m_ElemNum ++;
00271                ERRORPOSNDISABLE disable;
00272                err = m_CurrentObj->Read(m_ElemNum, m_Element);
00273                if (err < 0) m_ElemNum = -1;
00274                } while (err >= 0 && !m_Element.IsValid());
00275             }
00276 
00277          //! Destructor
00278          virtual ~ELEMITERATOR (
00279             ) {}
00280 
00281          //! Assignment
00282          ELEMITERATOR<_ELEM>& operator= (
00283             const ELEMITERATOR<_ELEM>& rhs
00284             ) {
00285             if (this != &rhs) {
00286                m_ElemNum = rhs.m_ElemNum;
00287                m_CurrentObj = rhs.m_CurrentObj;
00288                m_Element = rhs.m_Element;    //!< If LABEL, this can be expensive, so check first
00289                }
00290             return (*this);
00291             }
00292 
00293          //! Dereference
00294          const _ELEM& operator* (
00295             ) const { return (m_Element); }
00296 
00297          //! Dereference arrow
00298          const _ELEM* operator-> (
00299             ) const { return (&**this); }
00300 
00301          //! Pre-increment
00302          ELEMITERATOR<_ELEM>& operator++ (
00303             ) {
00304             ERRVALUE err = 0;
00305             do {           //! Scan to the next valid element
00306                m_ElemNum ++;
00307                ERRORPOSNDISABLE disable;
00308                err = m_CurrentObj->Read(m_ElemNum, m_Element);
00309                if (err < 0) m_ElemNum = -1;
00310                } while (err >= 0 && !m_Element.IsValid());
00311             return (*this);
00312             }        
00313 
00314          //! Comparison for equality
00315          bool operator== (
00316             const ELEMITERATOR<_ELEM>& rhs
00317             ) const { return (m_ElemNum == rhs.m_ElemNum && m_CurrentObj == rhs.m_CurrentObj); }
00318 
00319          //! Comparison for inequality
00320          bool operator!= (
00321             const ELEMITERATOR<_ELEM>& rhs
00322             ) const { return (!(*this == rhs)); }
00323             
00324          INT32 GetElementNumber (
00325             ) const { return (m_ElemNum); }
00326 
00327       protected:
00328          INT32 m_ElemNum;
00329          const TIN *m_CurrentObj;
00330          _ELEM m_Element;
00331          };
00332 
00333       typedef ELEMITERATOR<RVCTINEDGE> EDGEITERATOR;
00334       typedef ELEMITERATOR<RVCTINHULL> HULLITERATOR;
00335       typedef ELEMITERATOR<RVCTINNODE> NODEITERATOR;
00336       typedef ELEMITERATOR<RVCTINTRIANGLE> TRIANGLEITERATOR;
00337       
00338       //! Default constructor
00339       TIN (
00340          );
00341 
00342       //! Copy constructor
00343       TIN (
00344          const RVC::TIN& rhs
00345          );
00346 
00347       //! Destructor
00348       virtual ~TIN (
00349          );
00350 
00351       //! Assignment
00352       RVC::TIN& operator= (
00353          const RVC::TIN& rhs
00354          );
00355 
00356       //! Add an edge to the TIN object
00357       //! @return Number of the added edge element or < 0 if error
00358       INT32 Add (
00359          const RVCTINEDGE& edge
00360          );
00361 
00362       //! Add a hull to the TIN object
00363       //! @return Number of the added hull element or < 0 if error
00364       INT32 Add (
00365          const RVCTINHULL& hull
00366          );
00367 
00368       //! Add a node to the TIN object
00369       //! @return Number of the added node element or < 0 if error
00370       INT32 Add (
00371          const RVCTINNODE& node
00372          );
00373 
00374       //! Add a triangle to the TIN object
00375       //! @return Number of the added triangle element or < 0 if error
00376       INT32 Add (
00377          const RVCTINTRIANGLE& triangle
00378          );
00379          
00380       //! Compute the elevation at a given (x,y) point
00381       //! @return 0 if the point was outside a hull, >0 if elevation was calculated, <0 error
00382       int ComputeElevation (
00383          DPOINT3D& pt                  //!< Point to compute elevation at, result stored in pt.z
00384          );
00385          
00386       //! Compute plane coefficients for a given triangle
00387       ERRVALUE ComputePlaneCoefficients (
00388          INT32 TriangleNum,
00389          double& A,
00390          double& B,
00391          double& C,
00392          double& D
00393          );
00394 
00395       //! Obtain an element iterator to the beginning of the element list
00396       template <class _ELEM> ELEMITERATOR<_ELEM> ElementBegin (
00397          ELEMITERATOR<_ELEM> item
00398          ) const {
00399          return (ELEMITERATOR<_ELEM>(this));
00400          }
00401 
00402       //! Obtain an element iterator to the end of the element list
00403       template <class _ELEM> ELEMITERATOR<_ELEM> ElementEnd (
00404          ELEMITERATOR<_ELEM> item
00405          ) const {
00406          return (ELEMITERATOR<_ELEM>(this, -1));
00407          }
00408 
00409       //! Get MAKEPARM values from current TIN object instance       
00410       ERRVALUE GetMakeParms (
00411          RVC::TIN::MAKEPARMS& MakeParms
00412          ) const;
00413          
00414       //! Obtain next available edge ID for edge ID table
00415       //! @return Next available edge ID
00416       INT32 GetNextEdgeID (
00417          ) const;
00418 
00419       //! Obtain next available node ID for node ID table
00420       //! @return Next available node ID
00421       INT32 GetNextNodeID (
00422          ) const;
00423 
00424       //! Obtain next available triangle ID for triangle ID table
00425       //! @return Next available triangle ID
00426       INT32 GetNextTriangleID (
00427          ) const;
00428       
00429       //! Obtain number of edges in the TIN object
00430       //! @return Number of edges
00431       INT32 GetNumEdges (
00432          ) const;
00433 
00434       //! Obtain number of edges in a hull
00435       //! @return Number of hull edges
00436       INT32 GetNumHullEdges (
00437          INT32 hullnum           //!< Hull to get number of edges of
00438          ) const;
00439 
00440       //! Obtain number of islands in a hull
00441       //! @return Number of hull islands
00442       INT32 GetNumHullIslands (
00443          INT32 hullnum           //!< Hull to get number of islands of
00444          ) const;
00445 
00446       //! Obtain number of hulls in the TIN object
00447       //! @return Number of hulls
00448       INT32 GetNumHulls (
00449          ) const;
00450 
00451       //! Obtain number of edges in a node
00452       //! @return Number of node edges
00453       INT32 GetNumNodeEdges (
00454          INT32 NodeNum           //!< Node to get number of edges of
00455          ) const;
00456 
00457       //! Obtain number of nodes in the TIN object
00458       //! @return Number of nodes
00459       INT32 GetNumNodes (
00460          ) const;
00461 
00462       //! Obtain number of triangles in the TIN object
00463       //! @return Number of triangles
00464       INT32 GetNumTriangles (
00465          ) const;
00466 
00467       //! Obtain current xy tolerance for this object
00468       //! @return Minimum distance between two nodes
00469       double GetTolerance (
00470          ) const;
00471 
00472       //! Create new TIN object given parent object, name, description, creation parameters, and source
00473       ERRVALUE Make (
00474          const RVC::OBJECT& parent,
00475          const RVC::OBJECTNAME& name,
00476          const RVC::OBJECTDESC& desc,
00477          const MAKEPARMS& MakeParms,
00478          const char* Source = 0
00479          );
00480       
00481       //! Create new TIN object given parent object, name, description, creation parameters, and source
00482       ERRVALUE Make (
00483          const RVC::OBJITEM& ObjItem,
00484          const MAKEPARMS& MakeParms,
00485          const char* Source = 0
00486          );
00487       
00488       //! Read a TIN edge element
00489       ERRVALUE Read (
00490          INT32 EdgeNum,          //!< Edge number to read
00491          RVCTINEDGE& Edge        //!< Edge element RETURNED
00492          ) const;
00493 
00494       //! Read a TIN hull element
00495       ERRVALUE Read (
00496          INT32 hullnum,          //!< Hull number ot read
00497          RVCTINHULL& hull        //!< Hull element RETURNED
00498          ) const;
00499 
00500       //! Read a TIN node element
00501       ERRVALUE Read (
00502          INT32 nodenum,          //!< Node number to read
00503          RVCTINNODE& node        //!< Node element RETURNED
00504          ) const;
00505 
00506       //! Read a TIN triangle element
00507       ERRVALUE Read (
00508          INT32 trinum,           //!< Triangle number to read
00509          RVCTINTRIANGLE& triangle   //!< Triangle element RETURNED
00510          ) const;
00511 
00512       //! Read list of edges that make up the hull
00513       ERRVALUE ReadHullEdges (
00514          INT32 hullnum,          //!< Hull number to read edge list of
00515          INT32 start,            //!< Start position to read hull edge list
00516          INT32 count,            //!< Maximum number of edges to read
00517          SIMPLE_ARRAY<RVCTINHULLEDGE>& edges    //!< List of hull edges read into
00518          ) const;
00519 
00520       //! Read list of islands that are in the hull
00521       ERRVALUE ReadHullIslands (
00522          INT32 hullnum,          //!< Hull number to read island list of
00523          INT32 start,            //!< Start position to read hull islands list
00524          INT32 count,            //!< Maximum number of islands to read
00525          SIMPLE_ARRAY<INT32>& islands     //!< List of hull islands read into
00526          ) const;
00527 
00528       //! Read list of edges that are attached to the node
00529       ERRVALUE ReadNodeEdges (
00530          INT32 nodenum,                //!< Node number to read edge list of
00531          SIMPLE_ARRAY<INT32>& EdgeList //!< List of node edges read into
00532          ) const;
00533 
00534       //! Read list of edges that are attached to the node
00535       ERRVALUE ReadNodeEdges (
00536          INT32 nodenum,          //!< Node number to read edge list of
00537          INT32 start,            //!< Start position to read node edge list
00538          INT32 count,            //!< Maximum number of edges to read
00539          SIMPLE_ARRAY<INT32>& Edges //!< List of node edges read into
00540          ) const;
00541 
00542       //! Set next available edge ID for edge ID table
00543       ERRVALUE SetNextEdgeID (
00544          INT32 NextEdgeID
00545          );
00546 
00547       //! Set next available node ID for node ID table
00548       ERRVALUE SetNextNodeID (
00549          INT32 NextNodeID
00550          );
00551 
00552       //! Set next available triangle ID for triangle ID table
00553       ERRVALUE SetNextTriangleID (
00554          INT32 NextTriangleID
00555          );
00556       
00557       //! Set current xy tolerance for this object
00558       ERRVALUE SetTolerance (
00559          double tolerance
00560          );
00561 
00562       //! Swap hull edge lists between two hulls
00563       ERRVALUE SwapHullEdges (
00564          INT32 hullnum1,
00565          INT32 hullnum2
00566          );
00567 
00568       //! Swap node edge lists between two nodes
00569       ERRVALUE SwapNodeEdges (
00570          INT32 node1, 
00571          INT32 node2
00572          );
00573       
00574       //! Write a TIN edge element
00575       //! Does not update element nor object extents
00576       ERRVALUE Write (
00577          INT32 edgenum,             //!< Edge number to write 
00578          const RVCTINEDGE& edge        //!< Edge element to write
00579          );
00580 
00581       //! Write a TIN hull element
00582       //! Does not update element nor object extents
00583       ERRVALUE Write (
00584          INT32 hullnum,             //!< Hull number to write 
00585          const RVCTINHULL& hull        //!< Hull element to write
00586          );
00587 
00588       //! Write a TIN node element
00589       //! Does not update element nor object extents
00590       ERRVALUE Write (
00591          INT32 nodenum,             //!< Node number to write 
00592          const RVCTINNODE& node        //!< Node element to write
00593          );
00594 
00595       //! Write a TIN triangle element
00596       //! Does not update element nor object extents
00597       ERRVALUE Write (
00598          INT32 TriangleNum,            //!< Triangle number to write
00599          const RVCTINTRIANGLE& triangle   //!< Triangle element to write
00600          );
00601 
00602       //! Write hull edge list
00603       //! Does not update element nor object extents
00604       ERRVALUE WriteHullEdges (
00605          INT32 hullnum,             //!< Hull number to write edge list to
00606          const SIMPLE_ARRAY<RVCTINHULLEDGE>& edges    //!< Hull edge list to write
00607          );
00608 
00609       //! Write hull edge list
00610       //! Does not update element nor object extents
00611       ERRVALUE WriteHullEdges (
00612          INT32 hullnum,             //!< Hull number to write edge list to
00613          INT32 total,               //!< Total number of edges for this hull
00614          INT32 start,               //!< Start position to write hull edge list
00615          INT32 count,               //!< Number of edges to write
00616          const SIMPLE_ARRAY<RVCTINHULLEDGE>& edges    //!< Hull edge list to write
00617          );
00618 
00619       //! Write hull island list
00620       //! Does not update element nor object extents
00621       ERRVALUE WriteHullIslands (
00622          INT32 hullnum,             //!< Hull number to write island list to     
00623          INT32 total,               //!< Total number of islands for this hull   
00624          INT32 start,               //!< Start position to write hull island list
00625          INT32 count,               //!< Number of islands to write              
00626          const INT32 *islands       //!< Hull island list to write               
00627          );
00628 
00629       //! Write node edge list
00630       //! Does not update element nor object extents
00631       ERRVALUE WriteNodeEdges (
00632          INT32 nodenum,             //!< Node number to write edge list to
00633          const SIMPLE_ARRAY<INT32>& EdgeList
00634          );
00635 
00636       //! Write node edge list
00637       //! Does not update element nor object extents
00638       ERRVALUE WriteNodeEdges (
00639          INT32 nodenum,             //!< Node number to write edge list to
00640          INT32 NumEdges,            //!< Total number of edges for this node
00641          INT32 start,               //!< Start position to write node edge list
00642          INT32 count,               //!< Number of edges to write
00643          const SIMPLE_ARRAY<INT32>& EdgeList
00644          );
00645 
00646    protected:
00647 
00648       ERRVALUE ClearNodeEdgeList ();
00649       ERRVALUE SetNumEdges (INT32 NewNumEdges);
00650       ERRVALUE SetNumHulls (INT32 NewNumHulls);
00651       ERRVALUE SetNumNodes (INT32 NewNumNodes);
00652       ERRVALUE SetNumTriangles (INT32 NewNumTriangles);
00653 
00654    private:
00655       #ifndef GENERATING_DOXYGEN_OUTPUT
00656    
00657       ERRVALUE ExtractToCAD (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
00658       ERRVALUE ExtractToTIN (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
00659       ERRVALUE ExtractToVector (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
00660       
00661       //! Implementation of RVC::OBJECT virtual methods
00662       virtual ERRVALUE v_CloseObject ();
00663       virtual OBJTYPE v_GetDftObjectType () const;
00664       virtual bool v_IsObjectOpen () const;
00665       virtual ERRVALUE v_OpenObject (OPENMODE OpenFlags, MDLGPARENT parent);
00666 
00667       //! Implementation of RVC::GEOSPATIAL virtual methods
00668       virtual void v_GetExtents (DRECT3D &extents) const;
00669       virtual void v_GetScale (double& xscale, double& yscale) const;
00670       virtual double v_GetZScale () const;
00671       virtual double v_GetZOffset () const;
00672       virtual bool v_HasCapability (int Capability) const;
00673       virtual void v_SetScale (double xscale, double yscale);
00674       virtual void v_SetZOffset (double zoffset);
00675       virtual void v_SetZScale (double zscale);
00676 
00677       //! Implementation of RVC::GEOMETRIC virtual methods
00678       virtual ERRVALUE v_AddSearchTreeElement (INT32 elemnum, ELEMTYPE ElemType, const DRECT2D& Extents);
00679       virtual ERRVALUE v_BuildSearchTree (INT32 InitialNumElements, ELEMTYPE ElemType, const DRECT2D& Extents);
00680       virtual ERRVALUE v_ClearSearchTree (INT32 InitialNumElements, ELEMTYPE ElemType, const DRECT2D& Extents);
00681       virtual ERRVALUE v_CopySearchTreeElement (INT32 SourceElement, INT32 DestElement, ELEMTYPE ElemType, const DRECT2D& Extents);
00682       virtual ERRVALUE v_DeleteSearchTreeElement (INT32 elemnum, ELEMTYPE ElemType);
00683       virtual ERRVALUE v_ExtractTo (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
00684       virtual INT32 v_FindClosestElementLow (ELEMTYPE ElemType, const DPOINT2D& SearchPt, GEOMETRIC::SEARCHFILTER* SearchFilter, double SearchDist, double* DistFromElem) const;
00685       virtual ERRVALUE v_FindClosestElementsLow (const DPOINT2D& SearchPt, double SearchDist, SEARCHFILTER* SearchFilter, SIMPLE_ARRAY<RVC::ELEMENT>& ElementList) const;
00686       virtual ERRVALUE v_FindElementDrawSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, SEARCHRESULT& SearchResult) const;
00687       virtual ERRVALUE v_FindElementSearchSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, SEARCHRESULT& SearchResult) const;
00688       virtual ERRVALUE v_GetElementExtents (ELEMTYPE ElemType, INT32 ElemNum, DRECT3D& Extents) const;
00689       virtual INT32 v_GetNextElementID (ELEMTYPE ElemType) const;
00690       virtual INT32 v_GetNumElements (ELEMTYPE ElemType) const;
00691       virtual POINTTYPE v_GetPointType () const {return (POINTTYPE_3DXYZ);}
00692       virtual INT32 v_GetPointSize () const {return (sizeof(DPOINT3D));}
00693       virtual double v_GetTotalLineLength () const;
00694       virtual bool v_IsElementDeleted (const RVC::ELEMENT& Element) const;
00695       virtual bool v_IsEmpty () const;
00696       virtual ERRVALUE v_SaveSearchTrees ();
00697       virtual ERRVALUE v_SetExtents (const DRECT3D &extents);
00698       virtual ERRVALUE v_SetNextElementID (ELEMTYPE ElemType, INT32 NextElementID);
00699       virtual bool v_SetSearchTree (ELEMTYPE ElemType, RVC::QSEARCHTREE* SearchTree, bool ReplaceExisting);
00700       virtual ERRVALUE v_SetTotalLineLength (double length);
00701       virtual int v_SetupElemTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
00702       virtual bool v_TestElementAgainstRegion (const RVC::ELEMENT& Element, const REGION2D& region, TESTCRITERIA TestMode) const;
00703       virtual ERRVALUE v_UpdateExtents (const DRECT3D &extents);
00704 
00705       ERRVALUE ExtractNodesTo (CAD& CadObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags, INT32& NumElem) const;
00706       ERRVALUE ExtractNodesTo (TIN& TinObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
00707       ERRVALUE ExtractNodesTo (VECTOR& VectObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
00708       ERRVALUE ExtractEdgesTo (VECTOR& VectObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
00709       ERRVALUE ExtractTrianglesTo (CAD& CadObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags, INT32& NumElem) const;
00710       ERRVALUE ExtractTrianglesTo (VECTOR& VectObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
00711 
00712       int SetupTriangleTransList(const ELEMSELECTPARMS& SelectParms, ELEMTRANSLIST& TransList, BITSET& EdgeSet, BITSET& NodeSet, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
00713       int SetupEdgeTransList(const ELEMSELECTPARMS& SelectParms, ELEMTRANSLIST& TransList, BITSET& EdgeSet, BITSET& NodeSet, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
00714       int SetupNodeTransList(const ELEMSELECTPARMS& SelectParms, ELEMTRANSLIST& TransList, BITSET& NodeSet, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
00715 
00716       //! No values are unchangeable in header
00717       int m_TinID;
00718       mutable QSEARCHTREE *m_NodeQTree;
00719       mutable QSEARCHTREE *m_EdgeQTree;
00720       mutable QSEARCHTREE *m_TriQTree;
00721       class OPTIMIZE;
00722       mutable OPTIMIZE* m_Optimize;
00723       #endif // GENERATING_DOXYGEN_OUTPUT
00724    };
00725 
00726 
00727 //! Necessary tin object creation parameters    
00728 class TIN::MAKEPARMS : public RVC::GEOMETRIC::MAKEPARMSBASE {
00729    public:
00730       //! Default constructor
00731       MAKEPARMS (
00732          ) :
00733          GEOMETRIC::MAKEPARMSBASE(GEOMETRIC::POINTTYPE_3DXYZ),
00734          m_ZOffset(0.0),
00735          m_NextEdgeID(1),
00736          m_NextNodeID(10),
00737          m_NextTriangleID(1),
00738          m_tolerance(0.0)        //! Need to add at the end of the day
00739          {}
00740 
00741       //! Template constructor
00742       MAKEPARMS (
00743          const RVC::TIN& Object
00744          );
00745 
00746       //! Obtain next TIN edge ID value
00747       //! @return Next TIN edge ID value
00748       INT32 GetNextEdgeID (
00749          ) const {return (m_NextEdgeID);}
00750 
00751       //! Obtain next TIN Node ID value
00752       //! @return Next TIN node ID value
00753       INT32 GetNextNodeID (
00754          ) const {return (m_NextNodeID);}
00755 
00756       //! Obtain next TIN Triangle ID value
00757       //! @return Next TIN triangle ID value
00758       INT32 GetNextTriangleID (
00759          ) const {return (m_NextTriangleID);}
00760 
00761       //! Obtain current xy tolerance for this object
00762       //! @return Minimum distance between two nodes
00763       double GetTolerance (
00764          ) const { return (m_tolerance); }
00765 
00766       //! Get TIN z offset value
00767       //! @return TIN Z offset value
00768       double GetZOffset (
00769          ) const {return (m_ZOffset);}
00770 
00771       //! Set TIN edge next element ID value       
00772       void SetNextEdgeID (
00773          INT32 NextEdgeID
00774          ) {m_NextEdgeID = NextEdgeID;}
00775          
00776       //! Set TIN Node next element ID value       
00777       void SetNextNodeID (
00778          INT32 NextNodeID
00779          ) {m_NextNodeID = NextNodeID;}
00780          
00781       //! Set TIN triangle next element ID value
00782       void SetNextTriangleID (
00783          INT32 NextTriangleID
00784          ) {m_NextTriangleID = NextTriangleID;}
00785          
00786       //! Set current xy tolerance for this object
00787       void SetTolerance (
00788          double tolerance
00789          ) { m_tolerance = tolerance; }
00790          
00791       //! Set TIN Z offset value
00792       void SetZOffset (
00793          double zoffset
00794          ) {m_ZOffset = zoffset;}
00795          
00796    private:
00797       #ifndef GENERATING_DOXYGEN_OUTPUT
00798       double m_ZOffset;
00799       INT32 m_NextEdgeID;
00800       INT32 m_NextNodeID;
00801       INT32 m_NextTriangleID;
00802       double m_tolerance;        //!< Need to add at the end of the day
00803       #endif // GENERATING_DOXYGEN_OUTPUT
00804    };
00805 
00806 }     //! End of RVC namespace
00807 
00808 #endif   //!< INC_RVC_TIN_H

Generated on Tue Dec 14 13:18:44 2004 for TNTsdk by  doxygen 1.3.8-20040913