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

Generated on Wed May 31 15:27:16 2006 for TNTsdk by  doxygen 1.3.8-20040913