00001
00250 #ifndef INC_RVC_VECTOR_H
00251 #define INC_RVC_VECTOR_H
00252
00253 #ifndef INC_RVC_GEOMETRC_H
00254 #include <rvc/geometrc.h>
00255 #endif
00256
00257 #ifndef INC_MI32_ERRHANDLER_H
00258 #include <mi32/errhandler.h>
00259 #endif
00260
00261 #ifndef GENERATING_DOXYGEN_OUTPUT
00262
00263 class BITSET_UNOWNED;
00264 class TRANS2D_MAPGEN;
00265 namespace RVC {
00266 class CREDENTIALS;
00267 class DBASE_ELEMENT;
00268 class DBTABLE;
00269 class SHAPE;
00270 class SPATIALTREE;
00271 class STYLE;
00272 class VECTORHANDLE;
00273 }
00274 #endif
00275
00276 namespace RVC {
00277
00287 class VECTOR : public GEOMETRIC {
00288 public:
00289
00290 enum FLAGS {
00291 FLAG_None = 0,
00292 FLAG_NoStdAttribTables = 0x0001,
00293 FLAG_NoElementIDTables = 0x0002,
00294 FLAG_CannotReduceExtents = 0x0004,
00295 FLAG_CannotExpandExtents = 0x0008
00296 };
00297
00298 enum TOPOLOGYTYPE {
00299 TOPOLOGYTYPE_Polygonal = 0,
00300 TOPOLOGYTYPE_Planar,
00301 TOPOLOGYTYPE_Network,
00302 TOPOLOGYTYPE_None
00303 };
00304
00305 enum SUBTYPE {
00306 SUBTYPE_2DPolygonal = 0,
00307 SUBTYPE_2DPlanar,
00308 SUBTYPE_2DNetwork,
00309 SUBTYPE_3DPolygonal,
00310 SUBTYPE_3DPlanar,
00311 SUBTYPE_3DNetwork,
00312 SUBTYPE_3DNone
00313 };
00314
00315 #ifndef GENERATING_DOXYGEN_OUTPUT
00316 class CONGLOMERATELINEFILTER;
00317 class GETOBJFILTER_HASGEOMETRICELEMENTS;
00318 class GETOBJFILTER_HASLABELS;
00319 class GETOBJFILTER_HASLINES;
00320 class GETOBJFILTER_HASPOINTS;
00321 class GETOBJFILTER_HASPOLYGONS;
00322 class LABEL;
00323 struct LINE;
00324 class MAKEPARMS;
00325 struct NODE;
00326 struct POINT;
00327 struct POLYGON;
00328 #endif // GENERATING_DOXYGEN_OUTPUT
00329
00332 template <typename _ELEM> class ELEMITERATOR {
00333 public:
00334
00336 ELEMITERATOR (
00337 ) :
00338 m_ElemNum(-1),
00339 m_pObjVector(0),
00340 m_pElement(0)
00341 {}
00342
00344 ELEMITERATOR (
00345 int
00346 ) :
00347 m_ElemNum(-1),
00348 m_pObjVector(0),
00349 m_pElement(0)
00350 {}
00351
00353 ELEMITERATOR (
00354 const ELEMITERATOR<_ELEM>& rhs
00355 ) :
00356 m_ElemNum(rhs.m_ElemNum),
00357 m_pObjVector(rhs.m_pObjVector),
00358 m_pElement((rhs.m_pElement != 0) ? new _ELEM(*rhs.m_pElement) : 0)
00359 {}
00360
00362 ~ELEMITERATOR (
00363 ) {
00364 delete m_pElement;
00365 }
00366
00368 ELEMITERATOR<_ELEM>& operator= (
00369 const ELEMITERATOR<_ELEM>& rhs
00370 ) {
00371 if (this != &rhs) {
00372 m_ElemNum = rhs.m_ElemNum;
00373 m_pObjVector = rhs.m_pObjVector;
00374 if (rhs.m_pElement != 0) {
00375 if (m_pElement != 0) {
00376 *m_pElement = *rhs.m_pElement;
00377 }
00378 else {
00379 m_pElement = new _ELEM(*rhs.m_pElement);
00380 }
00381 }
00382 else {
00383 delete m_pElement;
00384 m_pElement = 0;
00385 }
00386 }
00387 return (*this);
00388 }
00389
00392 const _ELEM& operator* (
00393 ) const { return (*m_pElement); }
00394
00396 const _ELEM* operator-> (
00397 ) const { return (&**this); }
00398
00401 ELEMITERATOR<_ELEM>& operator++ (
00402 ) {
00403 ERRORPOSNDISABLE disable;
00404 do {
00405 ++m_ElemNum;
00406 if (m_pObjVector->Read(m_ElemNum, *m_pElement) < 0) {
00407 m_ElemNum = -1;
00408 break;
00409 }
00410 } while (!m_pElement->IsValid());
00411 return (*this);
00412 }
00413
00416 ELEMITERATOR<_ELEM>& operator-- (
00417 ) {
00418 if (m_ElemNum < 0) return (*this);
00419 ERRORPOSNDISABLE disable;
00420 do {
00421 --m_ElemNum;
00422 if (m_pObjVector->Read(m_ElemNum, *m_pElement) < 0) {
00423 m_ElemNum = -1;
00424 break;
00425 }
00426 } while (!m_pElement->IsValid());
00427 return (*this);
00428 }
00429
00431 bool operator== (
00432 const ELEMITERATOR<_ELEM>& rhs
00433 ) const { return (m_ElemNum == rhs.m_ElemNum && m_pObjVector == rhs.m_pObjVector); }
00434
00436 bool operator!= (
00437 const ELEMITERATOR<_ELEM>& rhs
00438 ) const { return (!(*this == rhs)); }
00439
00441 INT32 GetElementNumber (
00442 ) const { return (m_ElemNum); }
00443
00444 private:
00445 #ifndef GENERATING_DOXYGEN_OUTPUT
00446 friend class RVC::VECTOR;
00447
00448 INT32 m_ElemNum;
00449 const VECTOR *m_pObjVector;
00450 _ELEM *m_pElement;
00451
00453 explicit ELEMITERATOR (
00454 const RVC::VECTOR *pObjVector
00455 ) :
00456 m_ElemNum(-1),
00457 m_pObjVector(pObjVector),
00458 m_pElement(new _ELEM)
00459 {
00460 operator++();
00461 }
00462
00464 ELEMITERATOR (
00465 const RVC::VECTOR *pObjVector,
00466 INT32 ElemNum
00467 ) :
00468 m_ElemNum(ElemNum),
00469 m_pObjVector(pObjVector),
00470 m_pElement(0)
00471 {}
00472
00473 #endif
00474 };
00475
00476 typedef ELEMITERATOR<LABEL> LABELITERATOR;
00477 typedef ELEMITERATOR<LINE> LINEITERATOR;
00478 typedef ELEMITERATOR<NODE> NODEITERATOR;
00479 typedef ELEMITERATOR<POINT> POINTITERATOR;
00480 typedef ELEMITERATOR<POLYGON> POLYGONITERATOR;
00481
00483 VECTOR (
00484 );
00485
00487 VECTOR (
00488 const RVC::VECTOR& rhs
00489 );
00490
00492 virtual ~VECTOR (
00493 );
00494
00496 RVC::VECTOR& operator= (
00497 const RVC::VECTOR& rhs
00498 );
00499
00502 INT32 Add (
00503 LABEL& label
00504 );
00505
00508 INT32 Add (
00509 const LINE& line
00510 );
00511
00514 INT32 Add (
00515 const NODE& node
00516 );
00517
00520 INT32 Add (
00521 const POINT& point
00522 );
00523
00526 INT32 Add (
00527 const POLYGON& polygon
00528 );
00529
00534 INT32 AddLine (
00535 const POLYLINE& PolyLine
00536 );
00537
00544 INT32 AddPolygon (
00545 const POLYLINE& Polygon
00546 );
00547
00552 INT32 AddPoint (
00553 const DPOINT3D& Point
00554 );
00555
00563 ERRVALUE AddRegion (
00564 const REGION2D& Region
00565 );
00566
00574 INT32 AddSubRegion (
00575 const SUBREGION2D& SubRegion
00576 );
00577
00579 ERRVALUE DeleteElement (
00580 ELEMTYPE ElemType,
00581 INT32 ElemNum
00582 );
00583
00585 template <typename _ELEM> ELEMITERATOR<_ELEM> ElementBegin (
00586 const ELEMITERATOR<_ELEM>&
00587 ) const {
00588 return (ELEMITERATOR<_ELEM>(this));
00589 }
00590
00592 template <typename _ELEM> ELEMITERATOR<_ELEM> ElementEnd (
00593 const ELEMITERATOR<_ELEM>&
00594 ) const {
00595 return (ELEMITERATOR<_ELEM>(this, -1));
00596 }
00597
00600 ERRVALUE FindLabelStyleObject (
00601 RVC::STYLE& StyleObj
00602 ) const;
00603
00605 ERRVALUE GenerateIsleShellList (
00606 INT32 ParentPolygon,
00607 ORIENTATION orient,
00608 SIMPLE_ARRAY<INT32>& NumShellLines,
00609 SIMPLE_ARRAY<INT32>& ShellList,
00610 SIMPLE_ARRAY<DRECT2D>* RectList = 0
00611 ) const;
00612
00615 ERRVALUE GenerateNodes (
00616 );
00617
00619 ERRVALUE GeneratePointInPolygon (
00620 INT32 PolyNum,
00621 DPOINT2D& PointInPoly
00622 ) const;
00623
00626 RVC::VECTOR::FLAGS GetFlags (
00627 ) const;
00628
00630 ERRVALUE GetLabelStyleInfo (
00631 FILEPATH& filepath,
00632 RVC::OBJECTNAME& StyleName
00633 ) const;
00634
00636 ERRVALUE GetMakeParms (
00637 RVC::VECTOR::MAKEPARMS& MakeParms
00638 ) const;
00639
00642 INT32 GetMaxIslands (
00643 ) const;
00644
00647 INT32 GetMaxLabelStringLength (
00648 ) const;
00649
00652 INT32 GetMaxLines (
00653 ) const;
00654
00657 INT32 GetMaxPoints (
00658 ) const;
00659
00662 INT32 GetNextLineID (
00663 ) const;
00664
00667 INT32 GetNextPointID (
00668 ) const;
00669
00672 INT32 GetNextPolygonID (
00673 ) const;
00674
00677 INT32 GetNumLabels (
00678 ) const;
00679
00682 INT32 GetNumLinePoints (
00683 INT32 LineNum
00684 ) const;
00685
00688 INT32 GetNumLines (
00689 ) const;
00690
00693 INT32 GetNumNodeLines (
00694 INT32 NodeNum
00695 ) const;
00696
00699 INT32 GetNumNodes (
00700 ) const;
00701
00704 INT32 GetNumPoints (
00705 ) const;
00706
00709 INT32 GetNumPolygons (
00710 ) const;
00711
00714 INT32 GetNumPolyIslands (
00715 INT32 PolyNum
00716 ) const;
00717
00720 INT32 GetNumPolyLines (
00721 INT32 PolyNum
00722 ) const;
00723
00726 SUBTYPE GetSubType (
00727 ) const;
00728
00731 TOPOLOGYTYPE GetTopologyType (
00732 ) const;
00733
00736 INT32 GetVertexLimit (
00737 ) const;
00738
00740 bool IsElementIDTablesValid (
00741 ) const;
00742
00746 bool IsEquivalentTo (
00747 const VECTOR& rhs,
00748 double threshold
00749 ) const;
00750
00752 bool IsPointInPolygon (
00753 INT32 PolyNum,
00754 const DPOINT2D& point
00755 ) const;
00756
00758 bool IsStdAttribTablesValid (
00759 ) const;
00760
00762 ERRVALUE Make (
00763 const RVC::OBJECT& parent,
00764 const DESCRIPTOR& Descriptor,
00765 const MAKEPARMS& MakeParms,
00766 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00767 );
00768
00770 ERRVALUE Make (
00771 RVC::OBJITEM& ObjItem,
00772 const MAKEPARMS& MakeParms,
00773 #ifdef RVC_CREDENTIALS_MANDATORY
00774 const char* Source,
00775 const CREDENTIALS* Credentials
00776 #else
00777 const char* Source = 0,
00778 const CREDENTIALS* Credentials = 0
00779 #endif
00780 );
00781
00783 ERRVALUE OptimizeTo (
00784 RVC::OBJECT& DestParentObj,
00785 RVC::VECTOR& DestVectObj
00786 );
00787
00789 ERRVALUE OptimizeTo (
00790 RVC::OBJITEM& ObjItemTgt
00791 );
00792
00794 ERRVALUE Read (
00795 INT32 LabelNum,
00796 LABEL& vlabel
00797 ) const;
00798
00800 ERRVALUE Read (
00801 INT32 LineNum,
00802 LINE& vline
00803 ) const;
00804
00806 ERRVALUE Read (
00807 INT32 NodeNum,
00808 NODE& vnode
00809 ) const;
00810
00812 ERRVALUE Read (
00813 INT32 PointNum,
00814 POINT& vpoint
00815 ) const;
00816
00818 ERRVALUE Read (
00819 INT32 PolyNum,
00820 POLYGON& vpoly
00821 ) const;
00822
00823 ERRVALUE ReadConglomerateLinePoints (
00824 INT32 StartLineNum,
00825 POLYLINE& ConglomerateLine,
00826 CONGLOMERATELINEFILTER& filter
00827 ) const;
00828
00830 ERRVALUE ReadLinePoint (
00831 INT32 LineNum,
00832 INT32 PointNum,
00833 DPOINT3D& point
00834 ) const;
00835
00839 INT32 ReadLinePoints (
00840 INT32 LineNum,
00841 POLYLINE& LinePoints
00842 ) const;
00843
00847 INT32 ReadLinePoints (
00848 INT32 LineNum,
00849 POLYLINE& LinePoints,
00850 DIMENSION dimension
00851 ) const;
00852
00855 INT32 ReadLinePoints (
00856 INT32 LineNum,
00857 INT32 Start,
00858 INT32 Length,
00859 POLYLINE& LinePoints
00860 ) const;
00861
00865 INT32 ReadLinePoints (
00866 INT32 LineNum,
00867 INT32 Start,
00868 INT32 Length,
00869 POLYLINE& LinePoints,
00870 DIMENSION dimension
00871 ) const;
00872
00875 INT32 ReadLinePoints (
00876 INT32 LineNum,
00877 INT32 Start,
00878 INT32 Length,
00879 DPOINT2D *pts
00880 ) const;
00881
00885 INT32 ReadLinePoints (
00886 INT32 LineNum,
00887 INT32 Start,
00888 INT32 Length,
00889 DPOINT3D *pts
00890 ) const;
00891
00893 ERRVALUE ReadNodeLines (
00894 INT32 NodeNum,
00895 SIMPLE_ARRAY<INT32>& LineList
00896 ) const;
00897
00899 ERRVALUE ReadNodeLines (
00900 INT32 NodeNum,
00901 INT32 Start,
00902 INT32 Length,
00903 SIMPLE_ARRAY<INT32>& LineList
00904 ) const;
00905
00907 ERRVALUE ReadPolyLines (
00908 INT32 PolyNum,
00909 SIMPLE_ARRAY<INT32>& LineList
00910 ) const;
00911
00913 ERRVALUE ReadPolyLines (
00914 INT32 PolyNum,
00915 INT32 Start,
00916 INT32 Length,
00917 SIMPLE_ARRAY<INT32>& LineList
00918 ) const;
00919
00921 ERRVALUE ReadPolyIslands (
00922 INT32 PolyNum,
00923 SIMPLE_ARRAY<INT32>& IsleList
00924 ) const;
00925
00927 ERRVALUE ReadPolyIslands (
00928 INT32 PolyNum,
00929 INT32 Start,
00930 INT32 Length,
00931 SIMPLE_ARRAY<INT32>& IsleList
00932 ) const;
00933
00937 ERRVALUE ReadPolyPoints (
00938 INT32 PolyNum,
00939 POLYLINE& LinePoints,
00940 DIMENSION dimension
00941 ) const;
00942
00944 ERRVALUE ReadRegion (
00945 const BITSET_UNOWNED& PolySet,
00946 REGION2D& Region,
00947 DIMENSION dim,
00948 BITSET* LineSet = 0,
00949 bool NoIslands = false
00950 ) const;
00951
00953 ERRVALUE ReadRegion (
00954 const BITSET_UNOWNED& PolySet,
00955 REGION2D& Region,
00956 BITSET* LineSet = 0,
00957 bool NoIslands = false
00958 ) const;
00959
00961 ERRVALUE ReadSubRegion (
00962 INT32 PolyNum,
00963 SUBREGION2D& SubRegion,
00964 DIMENSION dim,
00965 bool NoIslands = false
00966 ) const;
00967
00969 ERRVALUE ReadSubRegion (
00970 INT32 PolyNum,
00971 SUBREGION2D& SubRegion,
00972 bool NoIslands = false
00973 ) const;
00974
00976 ERRVALUE SetFlags (
00977 RVC::VECTOR::FLAGS flags
00978 );
00979
00981 ERRVALUE SetLabelStyleInfo (
00982 const FILEPATH& filepath,
00983 const RVC::OBJECTNAME& StyleName
00984 );
00985
00987 ERRVALUE SetNextLineID (
00988 INT32 NewValue
00989 );
00990
00992 ERRVALUE SetNextPointID (
00993 INT32 NewValue
00994 );
00995
00997 ERRVALUE SetNextPolygonID (
00998 INT32 NewValue
00999 );
01000
01002 ERRVALUE SetPointType (
01003 POINTTYPE PointType
01004 );
01005
01007 ERRVALUE SetTopologyType (
01008 TOPOLOGYTYPE TopologyType
01009 );
01010
01012 ERRVALUE SetVertexLimit (
01013 INT32 MaxVertices
01014 );
01015
01018 ERRVALUE Write (
01019 INT32 LabelNum,
01020 LABEL& vlabel
01021 );
01022
01025 ERRVALUE Write (
01026 INT32 LineNum,
01027 const LINE& vline
01028 );
01029
01032 ERRVALUE Write (
01033 INT32 NodeNum,
01034 const NODE& vnode
01035 );
01036
01039 ERRVALUE Write (
01040 INT32 PointNum,
01041 const POINT& vpoint
01042 );
01043
01046 ERRVALUE Write (
01047 INT32 PolyNum,
01048 const POLYGON& vpoly
01049 );
01050
01053 ERRVALUE WriteLinePoint (
01054 INT32 LineNum,
01055 INT32 vertex,
01056 const DPOINT3D& point
01057 );
01058
01062 INT32 WriteLinePoints (
01063 INT32 LineNum,
01064 const POLYLINE& PointList
01065 );
01066
01070 INT32 WriteLinePoints (
01071 INT32 LineNum,
01072 INT32 Start,
01073 INT32 Length,
01074 const POLYLINE& PointList
01075 );
01076
01080 INT32 WriteNodeLines (
01081 INT32 NodeNum,
01082 const SIMPLE_ARRAY<INT32>& LineList
01083 );
01084
01088 INT32 WriteNodeLines (
01089 INT32 NodeNum,
01090 INT32 NumLines,
01091 INT32 Start,
01092 INT32 Length,
01093 const SIMPLE_ARRAY<INT32>& LineList
01094 );
01095
01099 INT32 WritePolyLines (
01100 INT32 PolyNum,
01101 const SIMPLE_ARRAY<INT32>& LineList
01102 );
01103
01107 INT32 WritePolyLines (
01108 INT32 PolyNum,
01109 INT32 NumLines,
01110 INT32 Start,
01111 INT32 Length,
01112 const SIMPLE_ARRAY<INT32>& LineList
01113 );
01114
01118 INT32 WritePolyIslands (
01119 INT32 PolyNum,
01120 const SIMPLE_ARRAY<INT32>& IsleList
01121 );
01122
01126 INT32 WritePolyIslands (
01127 INT32 PolyNum,
01128 INT32 NumIslands,
01129 INT32 Start,
01130 INT32 Length,
01131 const SIMPLE_ARRAY<INT32>& IsleList
01132 );
01133
01134 protected:
01135
01136 ERRVALUE ClearLinePointList (
01137 );
01138
01139 ERRVALUE ClearNodeLineList (
01140 );
01141
01142 ERRVALUE ClearPolygonIslandList (
01143 );
01144
01145 ERRVALUE ClearPolygonLineList (
01146 );
01147
01148 ERRVALUE SetNumLabels (
01149 INT32 NewNumLabels
01150 );
01151
01152 ERRVALUE SetNumLines (
01153 INT32 NewNumLines
01154 );
01155
01156 ERRVALUE SetNumNodes (
01157 INT32 NewNumNodes
01158 );
01159
01160 ERRVALUE SetNumPoints (
01161 INT32 NewNumPolygons
01162 );
01163
01164 ERRVALUE SetNumPolygons (
01165 INT32 NewNumPolygons
01166 );
01167
01168 ERRVALUE SwapLinePoints (
01169 INT32 Line1,
01170 INT32 Line2
01171 );
01172
01173 ERRVALUE SwapNodeLines (
01174 INT32 Node1,
01175 INT32 Node2
01176 );
01177
01178 ERRVALUE SwapPolyIslands (
01179 INT32 Poly1,
01180 INT32 Poly2
01181 );
01182
01183 ERRVALUE SwapPolyLines (
01184 INT32 Poly1,
01185 INT32 Poly2
01186 );
01187
01188 private:
01189 #ifndef GENERATING_DOXYGEN_OUTPUT
01190
01191 ERRVALUE ExtractLabelsTo (VECTOR& DestObj, const GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg) const;
01192 ERRVALUE ExtractLinesTo (VECTOR& DestObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01193 ERRVALUE ExtractLinesTo (SHAPE& DestObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags, const DBASE_ELEMENT& DBaseObj, const DBTABLE& TableObj) const;
01194 ERRVALUE ExtractNodesTo (VECTOR& DestObj, const GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01195 ERRVALUE ExtractPointsTo (VECTOR& DestObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01196 ERRVALUE ExtractPointsTo (SHAPE& DestObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags, const DBASE_ELEMENT& DBaseObj, const DBTABLE& TableObj) const;
01197 ERRVALUE ExtractPolygonsTo (VECTOR& DestObj, const GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01198 ERRVALUE ExtractPolygonsTo (SHAPE& DestObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags, const DBASE_ELEMENT& DBaseObj, const DBTABLE& TableObj) const;
01199
01200 ERRVALUE ExtractToCAD (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01201 ERRVALUE ExtractToRegion (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01202 ERRVALUE ExtractToShape (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01203 ERRVALUE ExtractToVector (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01204
01205 INT32 FindBestRgnLine (SIMPLE_ARRAY<INT32>& TestList, INT32 LineNum, INT32 NodeNum) const;
01206 ERRVALUE ReadLabelBaselinePoints (INT32 LabelNum, POLYLINE& Baseline, DIMENSION dim, double Height) const;
01207 int SetupLabelTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01208 int SetupLineTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, BITSET& LineSet, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01209 int SetupPointTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01210 int SetupPolygonTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, BITSET& LineSet, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01211 int TestDatabaseEquivalence (const VECTOR& RhsVectObj, DBASE_ELEMENT& LhsDBaseobj, DBASE_ELEMENT& RhsDBaseobj, SIMPLE_ARRAY<INT32>& TableMatch) const;
01212
01214 virtual ERRVALUE v_CloseObject ();
01215 virtual OBJTYPE v_GetDftObjectType () const;
01216 virtual bool v_IsObjectOpen () const;
01217 virtual ERRVALUE v_OpenObject (OPENMODE OpenMode, MDLGPARENT parent, const CREDENTIALS* Credentials);
01218
01220 virtual void v_GetExtents (DRECT3D &extents) const;
01221 virtual void v_GetScale (double& xscale, double& yscale) const;
01222 virtual double v_GetZScale () const;
01223 virtual double v_GetZOffset () const;
01224 virtual bool v_HasCapability (int Capability) const;
01225 virtual void v_SetScale (double xscale, double yscale);
01226 virtual void v_SetZOffset (double zoffset);
01227 virtual void v_SetZScale (double zscale);
01228
01230 virtual ERRVALUE v_ExtractTo (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01231 virtual INT32 v_FindClosestElementLow (ELEMTYPE ElemType, const DPOINT2D& SearchPt, GEOMETRIC::SEARCHFILTER* SearchFilter, double SearchDist, double* DistFromElem) const;
01232 virtual ERRVALUE v_GetElementExtents (ELEMTYPE ElemType, INT32 ElemNum, DRECT3D& Extents) const;
01233 virtual INT32 v_GetNextElementID (ELEMTYPE ElemType) const;
01234 virtual INT32 v_GetNumElements (ELEMTYPE ElemType) const;
01235 virtual POINTTYPE v_GetPointType () const;
01236 virtual INT32 v_GetPointSize () const;
01237 virtual QSEARCHTREE* v_GetSearchTree (ELEMTYPE ElemType) const;
01238 virtual double v_GetTotalLineLength () const;
01239 virtual bool v_IsElementDeleted (const RVC::ELEMENT& Element) const;
01240 virtual bool v_IsEmpty () const;
01241 virtual ERRVALUE v_SetExtents (const DRECT3D &extents);
01242 virtual ERRVALUE v_SetNextElementID (ELEMTYPE ElemType, INT32 NextElementID);
01243 virtual void v_SetSearchTree (ELEMTYPE ElemType, QSEARCHTREE* SearchTree) const;
01244 virtual ERRVALUE v_SetTotalLineLength (double length);
01245 virtual int v_SetupElemTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01246 virtual bool v_TestElementAgainstRegion (const RVC::ELEMENT& Element, const REGION2D& region, TESTCRITERIA TestMode) const;
01247 virtual ERRVALUE v_UpdateExtents (const DRECT3D &extents);
01248
01250 virtual ERRVALUE v_FindClosestElementsLow (const DPOINT2D& SearchPt, double SearchDist, SEARCHFILTER* SearchFilter, SIMPLE_ARRAY<RVC::ELEMENT>& ElementList, COMPONENT Component) const;
01251 virtual INT32 v_GetAttachmentIndex (const RVC::ELEMENT& Element) const;
01252 virtual SPATIALTREE* v_GetSpatialTree () const;
01253 virtual ERRVALUE v_ReadElement (INT32 ElemNum, POLYLINELIST& LineList, DIMENSION dim) const;
01254 virtual ERRVALUE v_ReadElement (INT32 ElemNum, POLYLINE& PointList, DIMENSION dim) const;
01255 virtual ERRVALUE v_ReadElement (INT32 ElemNum, REGION2D& Region, DIMENSION dim) const;
01256 virtual ERRVALUE v_ReadNextLabel (ELEMENT& Element, MILIST<GEOMETRIC::LABEL>& Label, DIMENSION dim, STYLE* StyleObj) const;
01257 virtual ERRVALUE v_ReadNextLine (ELEMENT& Element, POLYLINELIST& LineList, DIMENSION dim) const;
01258 virtual ERRVALUE v_ReadNextNode (ELEMENT& Element, DPOINT3D& Node) const;
01259 virtual ERRVALUE v_ReadNextPoint (ELEMENT& Element, POLYLINE& PointList, DIMENSION dim) const;
01260 virtual ERRVALUE v_ReadNextRegion (ELEMENT& Element, REGION2D& Region, DIMENSION dim) const;
01261 virtual ERRVALUE v_ReadRegion (const BITSET_UNOWNED& ElemSet, REGION2D& Region, DIMENSION dim, bool NoIslands) const;
01262 virtual void v_SetSpatialTree (SPATIALTREE*) const;
01263
01265
01266 VECTORHANDLE* m_VectorHandle;
01267 POINTTYPE m_PointType;
01268 TOPOLOGYTYPE m_TopologyType;
01269 mutable QSEARCHTREE *m_LabelSearchTree;
01270 mutable QSEARCHTREE *m_LineSearchTree;
01271 mutable QSEARCHTREE *m_NodeSearchTree;
01272 mutable QSEARCHTREE *m_PointSearchTree;
01273 mutable QSEARCHTREE *m_PolySearchTree;
01274 mutable SPATIALTREE *m_SpatialTree;
01275 class OPTIMIZE;
01276 mutable OPTIMIZE* m_Optimize;
01277 mutable bool m_SetInstanceData;
01278
01279 class APPINSTANCEDATA;
01280 friend class APPINSTANCEDATA;
01281 friend class LABEL;
01282 #endif // GENERATING_DOXYGEN_OUTPUT
01283
01284 };
01285
01286
01287 class VECTOR::CONGLOMERATELINEFILTER {
01288 public:
01290 virtual bool Filter (
01291 const VECTOR& VectObj,
01292 INT32 TestLineNum
01293 ) = 0;
01294 };
01295
01296
01300 class VECTOR::GETOBJFILTER_HASGEOMETRICELEMENTS : public GETOBJFILTER {
01301 public:
01302 GETOBJFILTER_HASGEOMETRICELEMENTS () {}
01303 private:
01304 #ifndef GENERATING_DOXYGEN_OUTPUT
01305 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
01306 #endif // GENERATING_DOXYGEN_OUTPUT
01307 };
01308
01310 class VECTOR::GETOBJFILTER_HASLABELS : public GEOMETRIC::GETOBJFILTER_HASMINIMUMELEMENTS {
01311 public:
01312 GETOBJFILTER_HASLABELS (
01313 INT32 MinLabels = 1
01314 ) : GETOBJFILTER_HASMINIMUMELEMENTS(ELEMTYPE_Label, MinLabels) {}
01315 };
01316
01318 class VECTOR::GETOBJFILTER_HASLINES : public GEOMETRIC::GETOBJFILTER_HASMINIMUMELEMENTS {
01319 public:
01320 GETOBJFILTER_HASLINES (
01321 INT32 MinLines = 1
01322 ) : GETOBJFILTER_HASMINIMUMELEMENTS(ELEMTYPE_Line, MinLines) {}
01323 };
01324
01326 class VECTOR::GETOBJFILTER_HASPOINTS : public GEOMETRIC::GETOBJFILTER_HASMINIMUMELEMENTS {
01327 public:
01328 GETOBJFILTER_HASPOINTS (
01329 INT32 MinPoints = 1
01330 ) : GETOBJFILTER_HASMINIMUMELEMENTS(ELEMTYPE_Point, MinPoints) {}
01331 };
01332
01334 class VECTOR::GETOBJFILTER_HASPOLYGONS : public GEOMETRIC::GETOBJFILTER_HASMINIMUMELEMENTS {
01335 public:
01336 GETOBJFILTER_HASPOLYGONS (
01337 INT32 MinPolygons = 1
01338 ) : GETOBJFILTER_HASMINIMUMELEMENTS(ELEMTYPE_Polygon, MinPolygons) {}
01339 };
01340
01342 class VECTOR::LABEL {
01343 private:
01344 class PRIV;
01345
01346 public:
01347
01348 class LEADERLINE {
01349 public:
01350
01352 LEADERLINE (
01353 );
01354
01356 LEADERLINE (
01357 const LEADERLINE& rhs
01358 );
01359
01361 ~LEADERLINE (
01362 );
01363
01365 LEADERLINE& operator= (
01366 const LEADERLINE& rhs
01367 );
01368
01369 INT32 GetElemNum (
01370 ) const;
01371
01372 ELEMTYPE GetElemType (
01373 ) const;
01374
01376 void GetExtents (
01377 DRECT3D& extents
01378 ) const;
01379
01380 const POLYLINE& GetLeaderPoints (
01381 ) const;
01382
01383 const DPOINT3D& GetTiePoint (
01384 ) const;
01385
01389 bool IsEquivalentTo (
01390 const LEADERLINE& rhs,
01391 double threshold
01392 ) const;
01393
01394 void SetElement (
01395 const RVC::ELEMENT& Element
01396 );
01397
01398 void SetElemNum (
01399 INT32 ElemNum
01400 );
01401
01402 void SetElemType (
01403 ELEMTYPE ElemType
01404 );
01405
01406 void SetLeaderPoints (
01407 const POLYLINE& LeaderPts
01408 );
01409
01410 void SetTiePoint (
01411 const DPOINT3D& NewTiePoint
01412 );
01413
01415 ERRVALUE Translate (
01416 const TRANS2D_MAPGEN& tmg
01417 );
01418
01419 private:
01420 #ifndef GENERATING_DOXYGEN_OUTPUT
01421 class PRIV;
01422 PRIV* m_pPriv;
01423
01424 ERRVALUE Add (VECTORHANDLE* VectorHandle, INT32 LabelNum, INT32 NumLeaderLines, INT32 LeaderLineIndex);
01425
01426 friend class LABEL;
01427 friend class LABEL::PRIV;
01428 #endif // GENERATING_DOXYGEN_OUTPUT
01429 };
01430
01431 typedef MILIST<LEADERLINE>::ITERATOR LEADERLINEITERATOR;
01432 typedef MILIST<LEADERLINE>::CONST_ITERATOR CONST_LEADERLINEITERATOR;
01433
01435 LABEL (
01436 );
01437
01439 LABEL (
01440 const LABEL& rhs
01441 );
01442
01444 ~LABEL (
01445 );
01446
01448 LABEL& operator= (
01449 const LABEL& rhs
01450 );
01451
01453 void AddLeaderLine (
01454 const LEADERLINE& LeaderLine
01455 );
01456
01458 void Clear (
01459 );
01460
01462 void ClearLeaderLines (
01463 );
01464
01466 void DeleteLeaderLine (
01467 MILIST<LEADERLINE>::ITERATOR it
01468 );
01469
01472 const POLYLINE& GetBaselinePoints (
01473 ) const;
01474
01476 ERRVALUE GetExtents (
01477 DRECT3D& extents,
01478 RVC::STYLE* StyleObj = 0
01479 ) const;
01480
01482 ERRVALUE GetExtents (
01483 DRECT3D& extents,
01484 const TEXTSTYLE& TextStyle
01485 ) const;
01486
01489 double GetHeight (
01490 ) const;
01491
01492 INT32 GetNumLeaderLines (
01493 ) const;
01494
01497 const MISTRING& GetString (
01498 ) const;
01499
01502 INT32 GetStyleIndex (
01503 ) const;
01504
01507 const RVC::OBJECTNAME& GetStyleName (
01508 ) const;
01509
01512 bool IsBaselineFit (
01513 ) const;
01514
01517 bool IsBaselineSplineFit (
01518 ) const;
01519
01522 bool IsClipUnderSet (
01523 ) const;
01524
01528 bool IsEquivalentTo (
01529 const LABEL& rhs,
01530 double threshold
01531 ) const;
01532
01535 bool IsValid (
01536 ) const;
01537
01540 MILIST<LEADERLINE>::CONST_ITERATOR LeaderLineBegin (
01541 ) const;
01542
01545 MILIST<LEADERLINE>::ITERATOR LeaderLineBegin (
01546 );
01547
01550 MILIST<LEADERLINE>::CONST_ITERATOR LeaderLineEnd (
01551 ) const;
01552
01555 MILIST<LEADERLINE>::ITERATOR LeaderLineEnd (
01556 );
01557
01559 void SetBaselineFit (
01560 bool value
01561 );
01562
01564 void SetBaselineSplineFit (
01565 bool value
01566 );
01567
01569 void SetBaselinePoints (
01570 const POLYLINE& baseline
01571 );
01572
01574 void SetClipUnder (
01575 bool value
01576 );
01577
01579 void SetHeight (
01580 double height
01581 );
01582
01584 void SetString (
01585 const MISTRING& string
01586 );
01587
01588 void SetStyle (
01589 const RVC::OBJECTNAME& StyleName,
01590 INT32 StyleIndex = -1
01591 );
01592
01594 ERRVALUE Translate (
01595 const TRANS2D_MAPGEN& tmg
01596 );
01597
01598 private:
01599 #ifndef GENERATING_DOXYGEN_OUTPUT
01600 PRIV* m_pPriv;
01601
01602 INT32 Add (VECTORHANDLE* VectorHandle);
01603 ERRVALUE Read (const VECTOR& VectObj, INT32 LabelNum);
01604 ERRVALUE Write (VECTORHANDLE* VectorHandle, INT32 LabelNum);
01605
01606 friend class VECTOR;
01607 #endif // GENERATING_DOXYGEN_OUTPUT
01608 };
01609
01610
01612 struct VECTOR::LINE {
01613 DPOINT3D minval;
01614 DPOINT3D maxval;
01615 INT32 left, right;
01616 INT32 start, end;
01617
01618 LINE (
01619 ):
01620 minval(0,0,0),
01621 maxval(0,0,0),
01622 left(-1),
01623 right(-1),
01624 start(-1),
01625 end(-1)
01626 { }
01627
01630 DRECT3D GetExtents (
01631 ) const {
01632 DRECT3D retval(minval);
01633 retval.Extend(maxval);
01634 return (retval);
01635 }
01636
01637 bool IsValid (
01638 ) const { return (!IsNaN(minval.x)); }
01639
01640 void SetExtents (
01641 const DRECT3D& rect
01642 ) {
01643 minval.x = rect.xinit;
01644 minval.y = rect.yinit;
01645 minval.z = rect.zinit;
01646 maxval.x = rect.xlast;
01647 maxval.y = rect.ylast;
01648 maxval.z = rect.zlast;
01649 return;
01650 }
01651 };
01652
01653
01655 struct VECTOR::NODE : public DPOINT3D {
01656 NODE () : DPOINT3D(0.0,0.0,0.0) {}
01657 NODE (const DPOINT2D& rhs) : DPOINT3D(rhs) {}
01658 NODE (const DPOINT3D& rhs) : DPOINT3D(rhs) {}
01659
01661 NODE& operator= (
01662 const DPOINT3D& rhs
01663 ) { *static_cast<DPOINT3D*>(this) = rhs; return (*this); }
01664
01666 NODE& operator= (
01667 const DPOINT2D& rhs
01668 ) { *static_cast<DPOINT3D*>(this) = rhs; return (*this); }
01669
01672 DRECT3D GetExtents (
01673 ) const { return (DRECT3D(*this)); }
01674
01675 bool IsValid (
01676 ) const { return (!IsNaN(x)); }
01677 };
01678
01679
01681 struct VECTOR::POINT : public DPOINT3D {
01682 POINT () : DPOINT3D(0.0,0.0,0.0) {}
01683 POINT (const DPOINT2D& rhs) : DPOINT3D(rhs) {}
01684 POINT (const DPOINT3D& rhs) : DPOINT3D(rhs) {}
01685
01687 POINT& operator= (
01688 const DPOINT3D& rhs
01689 ) { *static_cast<DPOINT3D*>(this) = rhs; return (*this); }
01690
01692 POINT& operator= (
01693 const DPOINT2D& rhs
01694 ) { *static_cast<DPOINT3D*>(this) = rhs; return (*this); }
01695
01698 DRECT3D GetExtents (
01699 ) const { return (DRECT3D(*this)); }
01700
01701 bool IsValid (
01702 ) const { return (!IsNaN(x)); }
01703 };
01704
01705
01707 struct VECTOR::POLYGON {
01708 DPOINT3D minval;
01709 DPOINT3D maxval;
01710 INT32 polyinside;
01711 #ifndef GENERATING_DOXYGEN_OUTPUT
01712 UINT8 space[4];
01713 #endif
01714
01715 POLYGON (
01716 ):
01717 minval(0,0,0),
01718 maxval(0,0,0),
01719 polyinside(-1)
01720 { }
01721
01724 DRECT3D GetExtents (
01725 ) const {
01726 DRECT3D retval(minval);
01727 retval.Extend(maxval);
01728 return (retval);
01729 }
01730
01731 bool IsValid (
01732 ) const { return (!IsNaN(minval.x)); }
01733
01734 void SetExtents (
01735 const DRECT3D& rect
01736 ) {
01737 minval.x = rect.xinit;
01738 minval.y = rect.yinit;
01739 minval.z = rect.zinit;
01740 maxval.x = rect.xlast;
01741 maxval.y = rect.ylast;
01742 maxval.z = rect.zlast;
01743 return;
01744 }
01745 };
01746
01747
01749 class VECTOR::MAKEPARMS : public RVC::GEOMETRIC::MAKEPARMSBASE {
01750 public:
01751
01753 MAKEPARMS (
01754 POINTTYPE PointType = POINTTYPE_2DXY,
01755 TOPOLOGYTYPE TopologyType = TOPOLOGYTYPE_Polygonal,
01756 FLAGS flags = FLAG_NoElementIDTables
01757 ) :
01758 GEOMETRIC::MAKEPARMSBASE(PointType),
01759 m_TopologyType(TopologyType),
01760 m_Flags(flags),
01761 m_VertexLimit(0),
01762 m_NextLineID(1),
01763 m_NextPointID(1),
01764 m_NextPolygonID(1)
01765 {}
01766
01768 MAKEPARMS (
01769 const RVC::VECTOR& Template
01770 );
01771
01773 MAKEPARMS (
01774 const RVC::OBJITEMLIST& GeoObjItemList
01775 );
01776
01779 FLAGS GetFlags (
01780 ) const {return (m_Flags);}
01781
01784 INT32 GetNextLineID (
01785 ) const {return (m_NextLineID);}
01786
01789 INT32 GetNextPointID (
01790 ) const {return (m_NextPointID);}
01791
01794 INT32 GetNextPolygonID (
01795 ) const {return (m_NextPolygonID);}
01796
01799 TOPOLOGYTYPE GetTopologyType (
01800 ) const {return (m_TopologyType);}
01801
01804 INT32 GetVertexLimit (
01805 ) const {return (m_VertexLimit);}
01806
01808 void SetFlags (
01809 FLAGS flags
01810 ) {m_Flags = flags;}
01811
01813 void SetNextLineID (
01814 INT32 NextLineID
01815 ) {m_NextLineID = NextLineID;}
01816
01818 void SetNextPointID (
01819 INT32 NextPointID
01820 ) {m_NextPointID = NextPointID;}
01821
01823 void SetNextPolygonID (
01824 INT32 NextPolygonID
01825 ) {m_NextPolygonID = NextPolygonID;}
01826
01828 void SetTopologyType (
01829 TOPOLOGYTYPE TopologyType
01830 ) {m_TopologyType = TopologyType;}
01831
01833 void SetVertexLimit (
01834 INT32 VertexLimit
01835 ) {m_VertexLimit = VertexLimit;}
01836
01837 private:
01838 #ifndef GENERATING_DOXYGEN_OUTPUT
01839
01840 TOPOLOGYTYPE m_TopologyType;
01841 FLAGS m_Flags;
01842 INT32 m_VertexLimit;
01843 INT32 m_NextLineID;
01844 INT32 m_NextPointID;
01845 INT32 m_NextPolygonID;
01846 #endif // GENERATING_DOXYGEN_OUTPUT
01847 };
01848
01849
01851 ERRVALUE GeneratePolygonTableFromLabels (
01852 const RVC::OBJITEM& ObjItem,
01853 bool AllowMultiple
01854 );
01855
01856 #ifndef GENERATING_DOXYGEN_OUTPUT
01857 DEFINE_ENUM_OP_BITWISE(VECTOR::FLAGS)
01858 #endif
01859
01860 }
01861
01862 #endif // INC_RVC_VECTOR_H
01863