mstdatt.h

Go to the documentation of this file.
00001 /**
00002 *  \file rvc\msdtatt.h
00003 *  \brief Class definition of object statistics management store in database
00004 *
00005 *  \if NODOC
00006 *  $Id: mstdatt.h_v 1.8 2004/11/02 16:18:41 scowan Exp $
00007 *
00008 *  $Log: mstdatt.h_v $
00009 *  Revision 1.8  2004/11/02 16:18:41  scowan
00010 *  Added compstat method.
00011 *
00012 *  Revision 1.7  2004/08/23 20:19:32  scowan
00013 *  Changed to use new cad element.
00014 *
00015 *  Revision 1.6  2003/09/30 16:52:06  dwilliss
00016 *  Doxygen
00017 *
00018 *  Revision 1.5  2003/09/25 21:56:58  dwilliss
00019 *  doxygen
00020 *
00021 *  Revision 1.4  2003/09/15 13:49:45  fileserver!dwilliss
00022 *  Doxygen
00023 *
00024 *  Revision 1.3  2003/01/24 16:38:10  scowan
00025 *  Fixed g++ warning.
00026 *
00027 *  Revision 1.2  2002/04/08 16:18:06  scowan
00028 *  Database name changes.
00029 *
00030 *  Revision 1.1  2001/09/18 14:12:02  scowan
00031 *  Initial revision
00032 *
00033 *  \endif
00034 **/
00035 
00036 #ifndef  INC_RVC_MSTDATT_H
00037 #define  INC_RVC_MSTDATT_H
00038 
00039 #ifndef  INC_MI32_STDDEFNS_H
00040    #include <mi32/stddefns.h>
00041 #endif
00042 
00043 #ifndef  INC_MI32_ELEMTYPE_H
00044    #include <mi32/elemtype.h>
00045 #endif
00046 
00047 #ifndef  INC_MI32_TRANS2DC_H
00048    #include <mi32/trans2dc.h>
00049 #endif
00050 
00051 #ifndef  INC_MI32_SPATREF_H
00052    #include <mi32/spatref.h>
00053 #endif
00054 
00055 #ifndef  INC_MI32_BITSET_H
00056    #include <mi32/bitset.h>
00057 #endif
00058 
00059 #ifndef  INC_RVC_VECTOR_H
00060    #include <rvc/vector.h>
00061 #endif
00062 
00063 #ifndef  INC_RVC_CAD_H
00064    #include <rvc/cad.h>
00065 #endif
00066 
00067 #ifndef  INC_RVC_TIN_H
00068    #include <rvc/tin.h>
00069 #endif
00070 
00071 #ifndef  INC_RVC_DBLINE_H
00072    #include <rvc/dbline.h>
00073 #endif
00074 
00075 #ifndef  INC_RVC_DBPOLY_H
00076    #include <rvc/dbpoly.h>
00077 #endif
00078 
00079 #ifndef  INC_RVC_DBCAD_H
00080    #include <rvc/dbcad.h>
00081 #endif
00082 
00083 #ifndef  INC_RVC_DBTEDGE_H
00084    #include <rvc/dbtedge.h>
00085 #endif
00086 
00087 #ifndef  INC_RVC_DBTTRI_H
00088    #include <rvc/dbttri.h>
00089 #endif
00090 
00091 #ifndef  INC_RVC_DBTABLE_H
00092    #include <rvc/dbtable.h>
00093 #endif
00094 
00095 struct MSTATDATA;
00096 
00097 namespace RVC {
00098 
00099 class MSTDATT {
00100    public:
00101 
00102       // ENUMERATIONS
00103       enum ADDSTAT {
00104          ADDSTAT_None = 0,
00105          ADDSTAT_MaxDim = 1,
00106          ADDSTAT_PointInPoly = 2,
00107          ADDSTAT_ZAttrib = 4
00108          };
00109          
00110       enum TABLEFLAG {
00111          TABLEFLAG_None = 0,
00112          TABLEFLAG_OnlyIfExisting = 1,
00113          TABLEFLAG_UseExistingFields = 2
00114          };
00115          
00116       struct ATTDEF;
00117       class COMPSTAT {
00118          public:
00119             
00120             COMPSTAT (
00121                );
00122          
00123             ~COMPSTAT (
00124                ) {};
00125          
00126             double Get2DDistance (
00127                const DPOINT2D& pt1,
00128                const DPOINT2D& pt2
00129                ) const;
00130             
00131             double Get3DDistance (
00132                const DPOINT3D& pt1,
00133                const DPOINT3D& pt2
00134                ) const;
00135             
00136             double GetAreaScaled (
00137                const DPOINT2D& point1,
00138                double area
00139                ) const;
00140             
00141             void GetEdgeStats (
00142                DPOINT3D& pt1,
00143                DPOINT3D& pt2,
00144                MSTATDATA& StatValues
00145                ) const;
00146 
00147             double GetEdgeSlopeStat (
00148                DPOINT3D& pt1,
00149                DPOINT3D& pt2,
00150                DPOINT3D& pt3,
00151                MSTATDATA& StatValues
00152                ) const;
00153 
00154             ERRVALUE GetLineStats (
00155                const POLYLINE& PolyLine,
00156                MSTATDATA& StatValues
00157                ) const;    
00158          
00159             ERRVALUE GetPolygonArea (
00160                const POLYLINE& PolyLine,
00161                MSTATDATA& StatValues
00162                ) const;
00163                
00164             const TRANS2D_MAPGEN& GetTransparm (
00165                ) const { return (m_tmg); }
00166 
00167             void GetTriangleStats (
00168                DPOINT3D& Node1,
00169                DPOINT3D& Node2,
00170                DPOINT3D& Node3,
00171                MSTATDATA& StatValues
00172                ) const;
00173 
00174             double GetXScale (
00175                ) const { return (m_XScale); }
00176                
00177             double GetYScale (
00178                ) const { return (m_YScale); }
00179                
00180             void SetCoordRefSys (
00181                const SPATREF::COORDREFSYS& CoordRefSys
00182                ) { m_CoordRefSys = CoordRefSys; }  
00183          
00184             void SetTransparm (
00185                const TRANS2D_MAPGEN& tmg
00186                ) { m_tmg = tmg; }   
00187          
00188             void SetXScale (
00189                double xscale
00190                ) { m_XScale = (xscale == 0.0) ? 1.0 : xscale; }   
00191          
00192             void SetYScale (
00193                double yscale
00194                ) { m_YScale = (yscale == 0.0) ? 1.0 : yscale; }   
00195          
00196             void SetZScale (
00197                double zscale
00198                ) { m_ZScale = (zscale == 0.0) ? 1.0 : zscale; }   
00199          
00200             void SetZOffset (
00201                double zoffset
00202                ) { m_ZOffset = zoffset; } 
00203          
00204          private:
00205             #ifndef GENERATING_DOXYGEN_OUTPUT
00206          
00207             TRANS2D_MAPGEN m_tmg;
00208             SPATREF::COORDREFSYS m_CoordRefSys;
00209             double m_XScale;
00210             double m_YScale;
00211             double m_ZScale;
00212             double m_ZOffset;
00213             #endif // GENERATING_DOXYGEN_OUTPUT
00214          };
00215          
00216       // STATIC METHODS
00217       static ERRVALUE BuildTable (
00218          const RVC::GEOMETRIC& GeoObj,
00219          ELEMTYPE ElemType,
00220          ADDSTAT AddStats = ADDSTAT_None, 
00221          TABLEFLAG TableFlag = TABLEFLAG_None
00222          );
00223 
00224       // CONSTRUCTORS / DESTRUCTOR
00225       MSTDATT (
00226          );
00227          
00228       virtual ~MSTDATT (
00229          ) = 0;
00230 
00231       //METHODS
00232       INT32 GetNumRecords (
00233          ) const;
00234 
00235       const RVC::DBTABLE& GetStatTable (
00236          ) const { return (m_TableObj); }
00237          
00238       ERRVALUE RebuildTable (
00239          ADDSTAT AddStats = ADDSTAT_None
00240          );
00241 
00242    protected:
00243 
00244       virtual void CheckFields () { return;  }
00245       virtual RVC::DBTABLE::ATTACHMENT GetAttachmentType () = 0;
00246       virtual const ATTDEF* GetAttribDef () = 0;
00247       virtual RVC::DBTABLE::REFELEM GetRefElem () = 0;
00248       virtual void GetTableDesc (RVC::OBJECTDESC& desc) = 0;
00249       virtual void GetTableName (RVC::OBJECTNAME& name) = 0;
00250       virtual ERRVALUE RebuildBaseTable () = 0;
00251       virtual bool SkipTable (RVC::DBTABLE::REFELEM RefElem) const { return (false); }
00252 
00253       INT32 AddRecord (const MSTATDATA& StatValues);
00254       const COMPSTAT& GetCompStat () const { return (m_CompStat); }
00255       ERRVALUE GetPolygonMaxDim (const POLYLINE& PolyLine, MSTATDATA& StatValues);
00256       bool HasField (int index) const { return (m_FieldIndex[index] > -1); }
00257       ERRVALUE ReadRecord (INT32 RecordNum, MSTATDATA& StatValues);
00258       ERRVALUE Setup (const RVC::GEOMETRIC& GeoObj, RVC::DBASE& DBaseObj, ADDSTAT AddStats = ADDSTAT_None, TABLEFLAG TableFlag = TABLEFLAG_None);     
00259       ERRVALUE WriteRecord (INT32 RecordNum, const MSTATDATA& StatValues);
00260          
00261    private:
00262       #ifndef GENERATING_DOXYGEN_OUTPUT
00263 
00264       class STDATTRECORD : public RVC::DBTABLE::RECORD {
00265          public:  
00266          
00267             //! Default constructor    
00268             STDATTRECORD (
00269                ) : RECORD() {}
00270          
00271             //! Copy constructor    
00272             STDATTRECORD (
00273                const STDATTRECORD& rhs
00274                ) : RECORD(rhs) {}
00275                
00276             //! Constructor from RVC::DBTABLE - used to setup internal items
00277             STDATTRECORD (
00278                const RVC::DBTABLE& table
00279                ) : RECORD(table) {}
00280 
00281             //! Destructor       
00282             virtual ~STDATTRECORD (
00283                ) {}
00284          
00285             //! Assignment
00286             STDATTRECORD& operator= (
00287                const STDATTRECORD& rhs
00288                ) {
00289                RECORD::operator=(rhs);
00290                return (*this);
00291                }
00292             
00293             const void *const GetFieldPtr (
00294                INT32 FieldNum
00295                ) const {                              //! const_cast because G++ is being stupid, promoting to const should not be an error
00296                return (RECORD::GetFieldPtr(FieldNum));
00297                }
00298 
00299             void *GetFieldPtr (
00300                INT32 FieldNum
00301                ) { return (RECORD::GetFieldPtr(FieldNum)); }
00302 
00303          };
00304 
00305       class OBSERVER : public RVC::DBASE::OBSERVER {
00306          public:  
00307             explicit OBSERVER (
00308                MSTDATT& StdAtt
00309                ) :
00310                RVC::DBASE::OBSERVER(*StdAtt.m_DBaseObj),
00311                m_StdAtt(StdAtt)
00312                {}
00313                
00314             //! Destructor
00315             virtual ~OBSERVER (
00316                ) {}
00317                
00318             //! Called if a table is being dropped from the database
00319             virtual void OnTableDropBegin (
00320                INT32 TableNum
00321                );
00322 
00323          private:
00324             MSTDATT& m_StdAtt;      
00325          };
00326       friend class OBSERVER;
00327       
00328       MSTDATT (const MSTDATT& rhs);
00329       MSTDATT& operator= (const MSTDATT& rhs);
00330          
00331       ERRVALUE BuildFields (const RVC::DBTABLE::FIELDINFOARRAY& dbf);
00332       
00333       COMPSTAT m_CompStat;
00334       STDATTRECORD m_Record;
00335       RVC::DBTABLE::FIELDINFOARRAY m_FieldList;
00336       SIMPLE_ARRAY<INT32> m_FieldIndex;      //!<  Index from [LINE|POLY|CAD]ATTDEF array to field entry 
00337       RVC::DBTABLE m_TableObj;
00338       RVC::DBASE* m_DBaseObj;
00339       ADDSTAT m_AddStats;
00340       const ATTDEF *m_AttribDef;
00341       OBSERVER *m_Observer;
00342       #endif // GENERATING_DOXYGEN_OUTPUT
00343    };
00344 
00345 
00346 class VECTSTDATT : public MSTDATT {
00347    public:
00348 
00349       VECTSTDATT (
00350          );
00351 
00352       virtual ~VECTSTDATT (
00353          );
00354 
00355       ERRVALUE GetPolygonArea (
00356          INT32 PolyNum,
00357          double& Area
00358          );
00359                
00360       ERRVALUE Setup (
00361          const RVC::VECTOR& VectObj,
00362          ELEMTYPE ElemType,
00363          ADDSTAT AddStats = ADDSTAT_None,
00364          TABLEFLAG TableFlag = TABLEFLAG_None
00365          );    
00366 
00367       ERRVALUE UpdateLine (
00368          INT32 LineNum
00369          );
00370          
00371       ERRVALUE UpdatePolygon (
00372          INT32 PolyNum
00373          );
00374          
00375       ERRVALUE UpdatePolygonIsleOnly (
00376          INT32 PolyNum
00377          );
00378          
00379       ERRVALUE UpdatePolygonSet (
00380          const BITSET& PolySet
00381          );
00382          
00383    private:
00384       #ifndef GENERATING_DOXYGEN_OUTPUT
00385       virtual void CheckFields ();
00386       virtual RVC::DBTABLE::ATTACHMENT GetAttachmentType ();
00387       virtual const ATTDEF* GetAttribDef ();
00388       virtual RVC::DBTABLE::REFELEM GetRefElem ();
00389       virtual void GetTableDesc (RVC::OBJECTDESC& desc);
00390       virtual void GetTableName (RVC::OBJECTNAME& name);
00391       virtual ERRVALUE RebuildBaseTable ();
00392       ERRVALUE GetPolygonStats (INT32 PolyNum, MSTATDATA& StatValues);     
00393       ERRVALUE RebuildLineTable ();
00394       ERRVALUE RebuildPolygonTable ();
00395       ERRVALUE UpdateIslands (INT32 PolyNum, INT32 NumIslands, MSTATDATA& StatValues);
00396          
00397       RVC::VECTOR m_VectObj;
00398       RVC::DBASE_LINE m_LineDBaseObj;
00399       RVC::DBASE_POLYGON m_PolyDBaseObj;
00400       ELEMTYPE m_ElemType;
00401       bool m_HasMaxDimField;
00402       bool m_HasPointInPolyField;
00403       #endif // GENERATING_DOXYGEN_OUTPUT
00404    };
00405 
00406 class CADSTDATT : public MSTDATT {
00407    public:
00408 
00409       CADSTDATT (
00410          );
00411 
00412       virtual ~CADSTDATT (
00413          );
00414 
00415       ERRVALUE Setup (
00416          const RVC::CAD& CadObj,
00417          ADDSTAT AddStats = ADDSTAT_None,
00418          TABLEFLAG TableFlag = TABLEFLAG_None
00419          );    
00420 
00421       ERRVALUE UpdateElement (
00422          const RVC::CAD::ELEMENT& Element
00423          );
00424          
00425    private:
00426       #ifndef GENERATING_DOXYGEN_OUTPUT
00427       virtual void CheckFields ();
00428       virtual RVC::DBTABLE::ATTACHMENT GetAttachmentType ();
00429       virtual const ATTDEF* GetAttribDef ();
00430       virtual RVC::DBTABLE::REFELEM GetRefElem ();
00431       virtual void GetTableDesc (RVC::OBJECTDESC& desc);
00432       virtual void GetTableName (RVC::OBJECTNAME& name);
00433       virtual ERRVALUE RebuildBaseTable ();
00434       ERRVALUE RebuildCADTable ();
00435       
00436       RVC::CAD m_CadObj;
00437       RVC::DBASE_CAD m_DBaseObj;
00438       bool m_HasMaxDimField;
00439       bool m_HasPointInPolyField;
00440       #endif // GENERATING_DOXYGEN_OUTPUT
00441    };
00442 
00443 class TINSTDATT : public MSTDATT {
00444    public:
00445 
00446       TINSTDATT (
00447          );
00448 
00449       virtual ~TINSTDATT (
00450          );
00451 
00452       ERRVALUE Setup (
00453          const RVC::TIN& TinObj,
00454          ELEMTYPE ElemType,
00455          ADDSTAT AddStats = ADDSTAT_None,
00456          TABLEFLAG TableFlag = TABLEFLAG_None
00457          );    
00458 
00459       ERRVALUE UpdateEdge (
00460          INT32 EdgeNum
00461          );
00462          
00463       ERRVALUE UpdateTriangle (
00464          INT32 TriangleNum
00465          );
00466 
00467    private:
00468       #ifndef GENERATING_DOXYGEN_OUTPUT
00469       virtual RVC::DBTABLE::ATTACHMENT GetAttachmentType ();
00470       virtual const ATTDEF* GetAttribDef ();
00471       virtual RVC::DBTABLE::REFELEM GetRefElem ();
00472       virtual void GetTableDesc (RVC::OBJECTDESC& desc);
00473       virtual void GetTableName (RVC::OBJECTNAME& name);
00474       virtual ERRVALUE RebuildBaseTable ();
00475       virtual bool SkipTable (RVC::DBTABLE::REFELEM RefElem) const;
00476       ERRVALUE RebuildTINEdgeTable ();
00477       ERRVALUE RebuildTINTriangleTable ();
00478          
00479       RVC::TIN m_TinObj;
00480       RVC::DBASE_TINEDGE m_EdgeDBaseObj;
00481       RVC::DBASE_TINTRIANGLE m_TriDBaseObj;
00482       ELEMTYPE m_ElemType;
00483       #endif // GENERATING_DOXYGEN_OUTPUT
00484    };
00485 
00486 DEFINE_ENUM_OPERATORS(MSTDATT::ADDSTAT)
00487 DEFINE_ENUM_OPERATORS(MSTDATT::TABLEFLAG)
00488 
00489 }     //! End of RVC namespace
00490 
00491 #endif         //!< INC_RVC_MSTDATT_H
00492 

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