00001
00312 #ifndef INC_RVC_GEOMETRC_H
00313 #define INC_RVC_GEOMETRC_H
00314
00315 #ifndef INC_RVC_GEOSPATL_H
00316 #include <rvc/geospatl.h>
00317 #endif
00318
00319 #ifndef INC_RVC_STYLETYPE_H
00320 #include <rvc/styletype.h>
00321 #endif
00322
00323 #ifndef INC_MI32_LABELFRAMEPARMS_H
00324 #include <mi32/labelframeparms.h>
00325 #endif
00326
00327 #ifndef INC_RVC_ELEMENT_H
00328 #include <rvc/element.h>
00329 #endif
00330
00331 #ifndef INC_RVC_QUADTREE_H
00332 #include <rvc/quadtree.h>
00333 #endif
00334
00335 #ifndef INC_MI32_REGION2D_H
00336 #include <mi32/region2d.h>
00337 #endif
00338
00339 #ifndef INC_MI32_BITSET_H
00340 #include <mi32/bitset.h>
00341 #endif
00342
00343 #ifndef INC_MI32_ELEMTYPESET_H
00344 #include <mi32/elemtypeset.h>
00345 #endif
00346
00347
00348 #ifndef GENERATING_DOXYGEN_OUTPUT
00349
00350 class TRANS2D_MAPGEN;
00351 class BITSET_DEQUE;
00352 class UNSIGNEDSET;
00353 namespace SML {
00354 class CONTEXT;
00355 }
00356 namespace RVC {
00357 struct ANYCALLBACKSTRUCT;
00358 class CAD;
00359 class ELEMENT;
00360 class SHAPE;
00361 class SPATIALTREE;
00362 class STYLE;
00363 class VECTOR;
00364 }
00365 #endif
00366
00367
00368 namespace RVC {
00369
00371 class GEOMETRIC : public GEOSPATIAL {
00372 public:
00373
00374 #ifndef GENERATING_DOXYGEN_OUTPUT
00375 class ELEMSELECTFILTER;
00376 class ELEMSELECTPARMS;
00377 class ELEMTRANSLIST;
00378 class GETOBJFILTER_HASMINIMUMELEMENTS;
00379 class GETOBJFILTER_HASNOIMPLIEDGEOREF;
00380 class GETOBJFILTER_ISDISPLAYABLE;
00381 class GETOBJFILTER_ISNOTEMPTY;
00382 class GETOBJFILTER_ISSELECTABLE;
00383 class MAKEPARMSBASE;
00384 class LABEL;
00385 class OBSERVER;
00386 class SEARCHFILTER;
00387 class SEARCHFILTER_BITSET;
00388 class SEARCHFILTER_UNSIGNEDSET;
00389 class SEARCHFILTER_ELEMTRANSLIST;
00390 class SEARCHRESULT;
00391 #endif // GENERATING_DOXYGEN_OUTPUT
00392
00393 class LABEL {
00394 public:
00395
00396 enum BASELINEFIT {
00397 BASELINEFIT_Straight,
00398 BASELINEFIT_Exact,
00399 BASELINEFIT_Spline
00400 };
00401
00403 LABEL ();
00404
00406 LABEL (
00407 const LABEL& rhs
00408 );
00409
00411 ~LABEL ();
00412
00414 LABEL& operator= (
00415 const LABEL& rhs
00416 );
00417
00418 void Clear ();
00419
00422 const POLYLINE& GetBaseline () const
00423 { return (*m_PolyLineList.Begin()); }
00424
00427 BASELINEFIT GetBaselineFit () const
00428 { return (m_BaselineFit); }
00429
00433 ERRVALUE GetExtents (
00434 DRECT3D& extents,
00435 bool IncludeLeaders = true
00436 ) const;
00437
00440 const LABELFRAMEPARMS& GetFrameParms () const
00441 { return (m_FrameParms); }
00442
00444 INT32 GetNumLeaderLines () const
00445 { return (m_PolyLineList.GetNumItems() - 1); }
00446
00449 const TEXTSTYLE& GetStyle () const
00450 { return (m_TextStyle); }
00451
00454 const MISTRING& GetText () const
00455 { return (m_Text); }
00456
00458 POLYLINELIST::CONST_ITERATOR LeaderLineBegin () const
00459 { return (++m_PolyLineList.Begin()); }
00460
00462 POLYLINELIST::CONST_ITERATOR LeaderLineEnd () const
00463 { return (m_PolyLineList.End()); }
00464
00465 private:
00466 #ifndef GENERATING_DOXYGEN_OUTPUT
00467
00468 BASELINEFIT m_BaselineFit;
00469 POLYLINELIST m_PolyLineList;
00470 MISTRING m_Text;
00471 TEXTSTYLE m_TextStyle;
00472 LABELFRAMEPARMS m_FrameParms;
00473
00474 friend class CAD;
00475 friend class SHAPE;
00476 friend class VECTOR;
00477 #endif
00478 };
00479
00481 class ITERATOR {
00482 public:
00484 ITERATOR (
00485 ) : m_GeoObj(0) {}
00486
00488 ITERATOR (
00489 RVC::GEOMETRIC* GeoObj
00490 ) : m_GeoObj(GeoObj) {}
00491
00493 ITERATOR (
00494 const ITERATOR& rhs
00495 ) : m_GeoObj(rhs.m_GeoObj), m_Element(rhs.m_Element) {}
00496
00498 const RVC::ELEMENT& operator* (
00499 ) const { return (m_Element); }
00500
00502 const RVC::ELEMENT* operator-> (
00503 ) const { return (&**this); }
00504
00505 bool operator== (
00506 const ITERATOR& rhs
00507 ) const { return (m_GeoObj == rhs.m_GeoObj && m_Element == rhs.m_Element); }
00508
00509 bool operator!= (
00510 const ITERATOR& rhs
00511 ) const { return (!(*this == rhs)); }
00512
00513 protected:
00514 GEOMETRIC* m_GeoObj;
00515 RVC::ELEMENT m_Element;
00516 };
00517
00518 typedef MILIST<LABEL> LABELLIST;
00519 class LABELITERATOR : public ITERATOR {
00520 public:
00522 LABELITERATOR (
00523 ) : ITERATOR() {}
00524
00526 LABELITERATOR (
00527 RVC::GEOMETRIC* GeoObj,
00528 DIMENSION dim,
00529 STYLE* StyleObj
00530 ) : ITERATOR(GeoObj), m_dim(dim), m_StyleObj(StyleObj) {
00531 m_GeoObj->ReadNextLabel(m_Element, m_LabelList, m_dim, m_StyleObj);
00532 }
00533
00535 LABELITERATOR (
00536 RVC::GEOMETRIC* GeoObj
00537 ) : ITERATOR(GeoObj) {}
00538
00540 LABELITERATOR (
00541 const LABELITERATOR& rhs
00542 ) :
00543 ITERATOR(rhs),
00544 m_LabelList(rhs.m_LabelList),
00545 m_dim(rhs.m_dim),
00546 m_StyleObj(rhs.m_StyleObj)
00547 {}
00548
00550 LABELITERATOR& operator++ (
00551 ) {
00552 m_GeoObj->ReadNextLabel(m_Element, m_LabelList, m_dim, m_StyleObj);
00553 return (*this);
00554 }
00555
00556 const LABELLIST& GetLabelList (
00557 ) const { return (m_LabelList); }
00558
00559 private:
00560 LABELLIST m_LabelList;
00561 DIMENSION m_dim;
00562 STYLE* m_StyleObj;
00563 };
00564
00565 class LINEITERATOR : public ITERATOR {
00566 public:
00568 LINEITERATOR (
00569 ) : ITERATOR() {}
00570
00572 LINEITERATOR (
00573 RVC::GEOMETRIC* GeoObj,
00574 DIMENSION dim
00575 ) : ITERATOR(GeoObj), m_dim(dim) {
00576 m_GeoObj->ReadNextLine(m_Element, m_LineList, m_dim);
00577 }
00578
00580 LINEITERATOR (
00581 RVC::GEOMETRIC* GeoObj
00582 ) : ITERATOR(GeoObj) {}
00583
00585 LINEITERATOR (
00586 const LINEITERATOR& rhs
00587 ) :
00588 ITERATOR(rhs),
00589 m_LineList(rhs.m_LineList),
00590 m_dim(rhs.m_dim)
00591 {}
00592
00594 LINEITERATOR& operator++ (
00595 ) {
00596 m_GeoObj->ReadNextLine(m_Element, m_LineList, m_dim);
00597 return (*this);
00598 }
00599
00600 const POLYLINELIST& GetLineList (
00601 ) const { return (m_LineList); }
00602
00603 private:
00604 POLYLINELIST m_LineList;
00605 DIMENSION m_dim;
00606 };
00607
00608 class NODEITERATOR : public ITERATOR {
00609 public:
00611 NODEITERATOR (
00612 ) : ITERATOR() {}
00613
00615 NODEITERATOR (
00616 RVC::GEOMETRIC* GeoObj,
00617 DIMENSION
00618 ) : ITERATOR(GeoObj) {
00619 m_GeoObj->ReadNextNode(m_Element, m_Node);
00620 }
00621
00623 NODEITERATOR (
00624 RVC::GEOMETRIC* GeoObj
00625 ) : ITERATOR(GeoObj) {}
00626
00628 NODEITERATOR (
00629 const NODEITERATOR& rhs
00630 ) :
00631 ITERATOR(rhs),
00632 m_Node(rhs.m_Node)
00633 {}
00634
00636 NODEITERATOR& operator++ (
00637 ) {
00638 m_GeoObj->ReadNextNode(m_Element, m_Node);
00639 return (*this);
00640 }
00641
00642 const DPOINT3D& GetNode (
00643 ) const { return (m_Node); }
00644
00645 private:
00646 DPOINT3D m_Node;
00647 };
00648
00649 class POINTITERATOR : public ITERATOR {
00650 public:
00652 POINTITERATOR (
00653 ) : ITERATOR() {}
00654
00656 POINTITERATOR (
00657 RVC::GEOMETRIC* GeoObj,
00658 DIMENSION dim
00659 ) : ITERATOR(GeoObj), m_dim(dim) {
00660 m_GeoObj->ReadNextPoint(m_Element, m_PointList, m_dim);
00661 }
00662
00664 POINTITERATOR (
00665 RVC::GEOMETRIC* GeoObj
00666 ) : ITERATOR(GeoObj) {}
00667
00669 POINTITERATOR (
00670 const POINTITERATOR& rhs
00671 ) :
00672 ITERATOR(rhs),
00673 m_PointList(rhs.m_PointList),
00674 m_dim(rhs.m_dim)
00675 {}
00676
00678 POINTITERATOR& operator++ (
00679 ) {
00680 m_GeoObj->ReadNextPoint(m_Element, m_PointList, m_dim);
00681 return (*this);
00682 }
00683
00684 const POLYLINE& GetPointList (
00685 ) const { return (m_PointList); }
00686
00687 private:
00688 POLYLINE m_PointList;
00689 DIMENSION m_dim;
00690 };
00691
00692 class POLYGONITERATOR : public ITERATOR {
00693 public:
00695 POLYGONITERATOR (
00696 ) : ITERATOR() {}
00697
00699 POLYGONITERATOR (
00700 RVC::GEOMETRIC* GeoObj,
00701 DIMENSION dim
00702 ) : ITERATOR(GeoObj), m_dim(dim) {
00703 m_GeoObj->ReadNextRegion(m_Element, m_Region, m_dim);
00704 }
00705
00707 POLYGONITERATOR (
00708 RVC::GEOMETRIC* GeoObj
00709 ) : ITERATOR(GeoObj) {}
00710
00712 POLYGONITERATOR (
00713 const POLYGONITERATOR& rhs
00714 ) :
00715 ITERATOR(rhs),
00716 m_Region(rhs.m_Region),
00717 m_dim(rhs.m_dim)
00718 {}
00719
00721 POLYGONITERATOR& operator++ (
00722 ) {
00723 m_GeoObj->ReadNextRegion(m_Element, m_Region, m_dim);
00724 return (*this);
00725 }
00726
00727 const REGION2D& GetRegion (
00728 ) const { return (m_Region); }
00729
00730 private:
00731 REGION2D m_Region;
00732 DIMENSION m_dim;
00733 };
00734
00735 enum CAPABILITY {
00736 CAPABILITY_None = 0,
00737 CAPABILITY_OwnSearchMethods = 512,
00738 CAPABILITY_CanAddToEnd,
00739 CAPABILITY_CanChangeElements,
00740 CAPABILITY_HasStyleByElement,
00741 CAPABILITY_ElementHasExtents,
00742 CAPABILITY_HasLabels,
00743 CAPABILITY_LabelHasExtents,
00744 CAPABILITY_CanDeleteLastElement,
00745 CAPABILITY_CanDeleteAnyElement,
00746 CAPABILITY_MultipleTableSupport,
00747 CAPABILITY_HasSpatialTrees = 766,
00748 CAPABILITY_HasQuadTrees = 767
00749 };
00750
00751 enum COMPONENT {
00752 COMPONENT_Point = 0x01,
00753 COMPONENT_Line = 0x02,
00754 COMPONENT_Polygon = 0x04,
00755 COMPONENT_Label = 0x08,
00756 COMPONENT_Node = 0x10,
00757 COMPONENT_Geometric = (COMPONENT_Point + COMPONENT_Line + COMPONENT_Polygon),
00758 COMPONENT_All = (COMPONENT_Geometric + COMPONENT_Label + COMPONENT_Node)
00759 };
00760
00761 enum EXTRACTFLAGS {
00762 EXTRACTFLAG_None = 0,
00763 EXTRACTFLAG_RegionMethod = 0x00000001,
00764 EXTRACTFLAG_RemExRecords = 0x00000002,
00765 EXTRACTFLAG_RemStdAttTables = 0x00000004,
00766 EXTRACTFLAG_IgnoreMissingLines = 0x00000008,
00767 EXTRACTFLAG_TableJoinNameStruct = 0x00000010,
00768 EXTRACTFLAG_TableJoinStruct = 0x00000020,
00769 EXTRACTFLAG_TableRemoveDupRec = 0x00000040,
00770 EXTRACTFLAG_IgnorePolygonTables = 0x00000080,
00771 EXTRACTFLAG_RemoveTables = 0x00000100,
00772 EXTRACTFLAG_CopyHyperIndexSub = 0x00000200,
00773 EXTRACTFLAG_DensifyPoints = 0x00000400,
00774 EXTRACTFLAG_CreateNewTables = 0x00000800
00775 };
00776
00777 enum POINTTYPE {
00778 POINTTYPE_2DXY = 1,
00779 POINTTYPE_3DXY = 4,
00780 POINTTYPE_3DXYZ = 7
00781 };
00782
00784 GEOMETRIC (
00785 );
00786
00788 GEOMETRIC (
00789 const RVC::GEOMETRIC& rhs
00790 );
00791
00793 virtual ~GEOMETRIC (
00794 ) = 0;
00795
00797 RVC::GEOMETRIC& operator= (
00798 const RVC::GEOMETRIC& rhs
00799 );
00800
00803 ERRVALUE AddSearchTreeElement (
00804 INT32 elemnum,
00805 ELEMTYPE ElemType,
00806 const DRECT2D& Extents
00807 );
00808
00811 ERRVALUE AddSearchTreeElement (
00812 INT32 elemnum,
00813 ELEMTYPE ElemType,
00814 const DPOINT2D& Point
00815 );
00816
00820 ERRVALUE BuildSearchTree (
00821 ELEMTYPE ElemType
00822 ) const;
00823
00827 ERRVALUE BuildSearchTree (
00828 const QSEARCHTREE::MAKEPARMS& MakeParms
00829 ) const;
00830
00833 ERRVALUE ClearSearchTree (
00834 const QSEARCHTREE::MAKEPARMS& MakeParms
00835 ) const;
00836
00839 ERRVALUE CombineStylesTo (
00840 RVC::GEOMETRIC& DestObj
00841 ) const;
00842
00846 ERRVALUE CombineStylesTo (
00847 RVC::GEOMETRIC& DestObj,
00848 SIMPLE_ARRAY<INT32>& FontTrans,
00849 SIMPLE_ARRAY<INT32> PattTrans[PATTERNTYPE_NumTypes]
00850 ) const;
00851
00854 ERRVALUE CopySearchTreeElement (
00855 INT32 SourceElement,
00856 INT32 DestElement,
00857 ELEMTYPE ElemType,
00858 const DRECT2D& Extents
00859 );
00860
00863 ERRVALUE CopySearchTreeElement (
00864 INT32 SourceElement,
00865 INT32 DestElement,
00866 ELEMTYPE ElemType,
00867 const DPOINT2D& Point
00868 );
00869
00871 ERRVALUE CreateSMLContext (
00872 SML::CONTEXT **pcontext
00873 ) const;
00874
00876 ERRVALUE DeleteSearchTree (
00877 ELEMTYPE ElemType
00878 );
00879
00882 ERRVALUE DeleteSearchTreeElement (
00883 INT32 elemnum,
00884 ELEMTYPE ElemType,
00885 const DRECT2D& Extents
00886 );
00887
00890 ERRVALUE DeleteSearchTreeElement (
00891 INT32 elemnum,
00892 ELEMTYPE ElemType,
00893 const DPOINT2D& Point
00894 );
00895
00899 ERRVALUE ExtractTo (
00900 RVC::GEOMETRIC& DestObj,
00901 RVC::GEOMETRIC::ELEMTRANSLIST& TransList,
00902 const TRANS2D_MAPGEN& tmg,
00903 RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags = EXTRACTFLAG_None
00904 ) const { return (v_ExtractTo(DestObj, TransList, tmg, ExtractFlags)); }
00905
00908 INT32 FindClosestElement (
00909 ELEMTYPE ElemType,
00910 const DPOINT2D& SearchPt,
00911 double SearchDist,
00912 double* DistFromElem
00913 ) const { return (v_FindClosestElementLow(ElemType, SearchPt, 0, SearchDist, DistFromElem)); }
00914
00917 INT32 FindClosestElement (
00918 ELEMTYPE ElemType,
00919 const DPOINT2D& SearchPt,
00920 SEARCHFILTER& SearchFilter,
00921 double SearchDist,
00922 double* DistFromElem
00923 ) const { return (v_FindClosestElementLow(ElemType, SearchPt, &SearchFilter, SearchDist, DistFromElem)); }
00924
00926 ERRVALUE FindClosestElements (
00927 const DPOINT2D& SearchPt,
00928 double SearchDist,
00929 SIMPLE_ARRAY<RVC::ELEMENT>& ElementList,
00930 COMPONENT Component = COMPONENT_All
00931 ) const { return (v_FindClosestElementsLow(SearchPt, SearchDist, 0, ElementList, Component)); }
00932
00934 ERRVALUE FindClosestElements (
00935 const DPOINT2D& SearchPt,
00936 double SearchDist,
00937 SEARCHFILTER& SearchFilter,
00938 SIMPLE_ARRAY<RVC::ELEMENT>& ElementList,
00939 COMPONENT Component = COMPONENT_All
00940 ) const { return (v_FindClosestElementsLow(SearchPt, SearchDist, &SearchFilter, ElementList, Component)); }
00941
00945 ERRVALUE FindElementDrawSet (
00946 ELEMTYPE ElemType,
00947 const DRECT2D& SearchExtents,
00948 SEARCHRESULT& SearchResult
00949 ) const;
00950
00953 ERRVALUE FindElementSearchSet (
00954 ELEMTYPE ElemType,
00955 const DRECT2D& SearchExtents,
00956 SEARCHRESULT& SearchResult
00957 ) const;
00958
00960 ERRVALUE FindElementSet (
00961 ELEMTYPE ElemType,
00962 const DRECT2D& Extents,
00963 UNSIGNEDSET& ElemSet,
00964 bool BuildIndex = false
00965 ) const;
00966
00969 INT32 GetAttachmentIndex (
00970 const RVC::ELEMENT& Element
00971 ) const { return (v_GetAttachmentIndex(Element)); }
00972
00975 DIMENSION GetDimension (
00976 ) const { return ((GetPointType() == POINTTYPE_3DXYZ) ? DIMENSION_3D : DIMENSION_2D); }
00977
00979 ERRVALUE GetElementExtents (
00980 ELEMTYPE ElemType,
00981 INT32 ElemNum,
00982 DRECT3D& Extents
00983 ) const { return (v_GetElementExtents(ElemType, ElemNum, Extents)); }
00984
00987 static RVC::GEOMETRIC* GetGeometric (
00988 const RVC::OBJECT& object
00989 );
00990
00993 static RVC::GEOMETRIC* GetGeometric (
00994 const RVC::OBJITEM& ObjItem
00995 );
00996
00999 INT32 GetNextElementID (
01000 ELEMTYPE ElemType
01001 ) const { return (v_GetNextElementID(ElemType)); }
01002
01006 INT32 GetNumElements (
01007 ELEMTYPE ElemType
01008 ) const { return (v_GetNumElements(ElemType)); }
01009
01012 static RVC::OBJTYPESET GetObjTypeSet (
01013 );
01014
01017 INT32 GetPointDimension (
01018 ) const { return (GetPointSize() / sizeof(double)); }
01019
01022 POINTTYPE GetPointType (
01023 ) const { return (v_GetPointType()); }
01024
01027 INT32 GetPointSize (
01028 ) const { return (v_GetPointSize()); }
01029
01032 double GetTotalLineLength (
01033 ) const { return (v_GetTotalLineLength()); }
01034
01037 bool IsElementDeleted (
01038 const RVC::ELEMENT& Element
01039 ) const { return (v_IsElementDeleted(Element)); }
01040
01043 bool IsEmpty (
01044 ) const { return (v_IsEmpty()); }
01045
01047 static bool IsGeometric (
01048 RVC::OBJTYPE ObjType
01049 );
01050
01053 LABELITERATOR LabelBegin (
01054 DIMENSION dim = DIMENSION_2D,
01055 STYLE* StyleObj = 0
01056 ) { return (LABELITERATOR(this, dim, StyleObj)); }
01057
01059 LABELITERATOR LabelEnd (
01060 ) { return (LABELITERATOR(this)); }
01061
01064 LINEITERATOR LineBegin (
01065 DIMENSION dim = DIMENSION_2D
01066 ) { return (LINEITERATOR(this, dim)); }
01067
01069 LINEITERATOR LineEnd (
01070 ) { return (LINEITERATOR(this)); }
01071
01074 NODEITERATOR NodeBegin (
01075 DIMENSION dim = DIMENSION_3D
01076 ) { return (NODEITERATOR(this, dim)); }
01077
01079 NODEITERATOR NodeEnd (
01080 ) { return (NODEITERATOR(this)); }
01081
01084 POINTITERATOR PointBegin (
01085 DIMENSION dim = DIMENSION_2D
01086 ) { return (POINTITERATOR(this, dim)); }
01087
01089 POINTITERATOR PointEnd (
01090 ) { return (POINTITERATOR(this)); }
01091
01094 POLYGONITERATOR PolygonBegin (
01095 DIMENSION dim = DIMENSION_2D
01096 ) { return (POLYGONITERATOR(this, dim)); }
01097
01099 POLYGONITERATOR PolygonEnd (
01100 ) { return (POLYGONITERATOR(this)); }
01101
01103 ERRVALUE ReadElement (
01104 INT32 ElemNum,
01105 POLYLINELIST& LineList,
01106 DIMENSION dim
01107 ) const { return (v_ReadElement(ElemNum, LineList, dim)); }
01108
01110 ERRVALUE ReadElement (
01111 INT32 ElemNum,
01112 POLYLINE& PointList,
01113 DIMENSION dim
01114 ) const { return (v_ReadElement(ElemNum, PointList, dim)); }
01115
01117 ERRVALUE ReadElement (
01118 INT32 ElemNum,
01119 REGION2D& Region,
01120 DIMENSION dim
01121 ) const { return (v_ReadElement(ElemNum, Region, dim)); }
01122
01127 ERRVALUE ReadNextLabel (
01128 ELEMENT& Element,
01129 MILIST<LABEL>& Label,
01130 DIMENSION dim = DIMENSION_2D,
01131 STYLE* StyleObj = 0
01132 ) const { return (v_ReadNextLabel(Element, Label, dim, StyleObj)); }
01133
01138 ERRVALUE ReadNextLine (
01139 ELEMENT& Element,
01140 POLYLINELIST& LineList,
01141 DIMENSION dim = DIMENSION_2D
01142 ) const { return (v_ReadNextLine(Element, LineList, dim)); }
01143
01148 ERRVALUE ReadNextNode (
01149 ELEMENT& Element,
01150 DPOINT3D& Node
01151 ) const { return (v_ReadNextNode(Element, Node)); }
01152
01157 ERRVALUE ReadNextPoint (
01158 ELEMENT& Element,
01159 POLYLINE& PointList,
01160 DIMENSION dim = DIMENSION_2D
01161 ) const { return (v_ReadNextPoint(Element, PointList, dim)); }
01162
01167 ERRVALUE ReadNextRegion (
01168 ELEMENT& Element,
01169 REGION2D& Region,
01170 DIMENSION dim = DIMENSION_2D
01171 ) const { return (v_ReadNextRegion(Element, Region, dim)); }
01172
01175 ERRVALUE ReadRegion (
01176 const BITSET_UNOWNED& ElemSet,
01177 REGION2D& Region,
01178 DIMENSION dim,
01179 bool NoIslands = false
01180 ) const { return (v_ReadRegion(ElemSet, Region, dim, NoIslands)); }
01181
01184 ERRVALUE SetExtents (
01185 const DRECT3D &extents
01186 ) { return (v_SetExtents(extents)); }
01187
01189 ERRVALUE SetNextElementID (
01190 ELEMTYPE ElemType,
01191 INT32 NextElementID
01192 ) { return (v_SetNextElementID(ElemType, NextElementID)); }
01193
01195 ERRVALUE SetTotalLineLength (
01196 double length
01197 ) { return (v_SetTotalLineLength(length)); }
01198
01201 int SetupElemTransList (
01202 const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms,
01203 RVC::GEOMETRIC::ELEMTRANSLIST& TransList
01204 ) const { return (SetupElemTransList(SelectParms, TransList, 0)); }
01205
01208 int SetupElemTransList (
01209 const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms,
01210 RVC::GEOMETRIC::ELEMTRANSLIST& TransList,
01211 RVC::GEOMETRIC::ELEMSELECTFILTER& SelectFilter
01212 ) const { return (SetupElemTransList(SelectParms, TransList, &SelectFilter)); }
01213
01217 bool TestElementAgainstRegion (
01218 const RVC::ELEMENT& Element,
01219 const REGION2D& region,
01220 TESTCRITERIA TestMode
01221 ) const { return (v_TestElementAgainstRegion(Element, region, TestMode)); }
01222
01224 ERRVALUE UpdateExtents (
01225 const DRECT3D &extents
01226 ) { return (v_UpdateExtents(extents)); }
01227
01228 protected:
01229 #ifndef GENERATING_DOXYGEN_OUTPUT
01230 static void GeometricCallbackFunc (ANYCALLBACKSTRUCT* cb, void *data);
01231 #endif // GENERATING_DOXYGEN_OUTPUT
01232
01233 private:
01234
01235 virtual ERRVALUE v_ExtractTo (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const = 0;
01236 virtual INT32 v_FindClosestElementLow (ELEMTYPE ElemType, const DPOINT2D& SearchPt, SEARCHFILTER* SearchFilter, double SearchDist, double* DistFromElem) const = 0;
01237 virtual ERRVALUE v_GetElementExtents (ELEMTYPE ElemType, INT32 ElemNum, DRECT3D& Extents) const = 0;
01238 virtual INT32 v_GetNextElementID (ELEMTYPE ElemType) const = 0;
01239 virtual INT32 v_GetNumElements (ELEMTYPE ElemType) const = 0;
01240 virtual POINTTYPE v_GetPointType () const = 0;
01241 virtual INT32 v_GetPointSize () const = 0;
01242 virtual QSEARCHTREE* v_GetSearchTree (ELEMTYPE ElemType) const = 0;
01243 virtual double v_GetTotalLineLength () const = 0;
01244 virtual bool v_IsElementDeleted (const RVC::ELEMENT& Element) const = 0;
01245 virtual bool v_IsEmpty () const = 0;
01246 virtual ERRVALUE v_SetExtents (const DRECT3D &extents) = 0;
01247 virtual ERRVALUE v_SetNextElementID (ELEMTYPE ElemType, INT32 NextElementID) = 0;
01248 virtual void v_SetSearchTree (ELEMTYPE ElemType, QSEARCHTREE* SearchTree) const = 0;
01249 virtual ERRVALUE v_SetTotalLineLength (double length) = 0;
01250 virtual int v_SetupElemTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const = 0;
01251 virtual bool v_TestElementAgainstRegion (const RVC::ELEMENT& Element, const REGION2D& region, TESTCRITERIA TestMode) const = 0;
01252 virtual ERRVALUE v_UpdateExtents (const DRECT3D &extents) = 0;
01253
01254
01255 virtual ERRVALUE v_FindClosestElementsLow (const DPOINT2D& SearchPt, double SearchDist, SEARCHFILTER* SearchFilter, SIMPLE_ARRAY<RVC::ELEMENT>& ElementList, COMPONENT Component) const;
01256 virtual ERRVALUE v_FindElementDrawSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, SEARCHRESULT& SearchResult) const;
01257 virtual ERRVALUE v_FindElementSearchSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, SEARCHRESULT& SearchResult) const;
01258 virtual ERRVALUE v_FindElementSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, UNSIGNEDSET& ElemSet, bool BuildIndex) const;
01259 virtual INT32 v_GetAttachmentIndex (const RVC::ELEMENT& Element) const;
01260 virtual SPATIALTREE* v_GetSpatialTree () const;
01261 virtual ERRVALUE v_ReadElement (INT32 ElemNum, POLYLINELIST& LineList, DIMENSION dim) const;
01262 virtual ERRVALUE v_ReadElement (INT32 ElemNum, POLYLINE& PointList, DIMENSION dim) const;
01263 virtual ERRVALUE v_ReadElement (INT32 ElemNum, REGION2D& Region, DIMENSION dim) const;
01264 virtual ERRVALUE v_ReadNextLabel (ELEMENT& Element, MILIST<LABEL>& Label, DIMENSION dim, STYLE* StyleObj) const;
01265 virtual ERRVALUE v_ReadNextLine (ELEMENT& Element, POLYLINELIST& LineList, DIMENSION dim) const;
01266 virtual ERRVALUE v_ReadNextNode (ELEMENT& Element, DPOINT3D& Node) const;
01267 virtual ERRVALUE v_ReadNextPoint (ELEMENT& Element, POLYLINE& PointList, DIMENSION dim) const;
01268 virtual ERRVALUE v_ReadNextRegion (ELEMENT& Element, REGION2D& Region, DIMENSION dim) const;
01269 virtual ERRVALUE v_ReadRegion (const BITSET_UNOWNED& ElemSet, REGION2D& Region, DIMENSION dim, bool NoIslands) const;
01270 virtual void v_SetSpatialTree (SPATIALTREE*) const;
01271
01272 #ifndef GENERATING_DOXYGEN_OUTPUT
01273 ERRVALUE DeleteSearchTrees (OBJTYPE ObjTypeSearchTree, ELEMTYPE ElemType, bool ErrorIfCantDelete = false) const;
01274 ERRVALUE FillInSearchTree (ELEMTYPE ElemType) const;
01275 ERRVALUE OpenSearchTree (ELEMTYPE ElemType, OPENMODE mode, bool DoNotCreate = false) const;
01276 ERRVALUE OpenFoundSearchTree (ELEMTYPE ElemType, OPENMODE mode, bool& NeedTempTree) const;
01277 int SetupElemTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01278 #endif // GENERATING_DOXYGEN_OUTPUT
01279 };
01280
01281 #ifndef GENERATING_DOXYGEN_OUTPUT
01282 DEFINE_ENUM_OP_BITWISE(GEOMETRIC::EXTRACTFLAGS)
01283 DEFINE_ENUM_OP_BITWISE(GEOMETRIC::COMPONENT)
01284 #endif
01285
01286 class GEOMETRIC::ELEMSELECTFILTER {
01287 public:
01288 ELEMSELECTFILTER () {}
01289
01292 int FilterElement (
01293 RVC::ELEMENT& Element
01294 ) { return (v_FilterElement(Element)); }
01295
01296 private:
01297
01298 virtual int v_FilterElement (RVC::ELEMENT& element) = 0;
01299 };
01300
01301
01302 class GEOMETRIC::ELEMSELECTPARMS {
01303 public:
01304
01305 enum EXTRACT {
01306 EXTRACT_All,
01307 EXTRACT_PartInside,
01308 EXTRACT_FullInside,
01309 EXTRACT_ClipInside,
01310 EXTRACT_PartOutside,
01311 EXTRACT_FullOutside,
01312 EXTRACT_ClipOutside
01313 };
01314
01315 struct ITEM {
01316 enum SELECT {
01317 SELECT_None = 0,
01318 SELECT_All,
01319 SELECT_ByRecord,
01320 SELECT_ByScript,
01321 SELECT_ByElement,
01322 SELECT_Last
01323 };
01324
01325 ITEM (
01326 );
01327
01328 SELECT m_SelectType;
01329 MISTRING m_QueryStr;
01330 RVC::OBJECTNAME m_TableName;
01331 BITSET m_RecordList;
01332 BITSET m_ElemList;
01333 };
01334
01335 ELEMSELECTPARMS ();
01336
01337 void Clear ();
01338
01339 const REGION2D& GetRegion2D (
01340 ) const { return (m_Region); }
01341
01342 EXTRACT GetRegionExtractMode (
01343 ) const { return (m_ExtractMode); }
01344
01345 TESTCRITERIA GetRegionTestCriteria (
01346 ) const {
01347 TESTCRITERIA TestCriteria = TESTCRITERIA_PartInside;
01348 switch (m_ExtractMode) {
01349 case EXTRACT_FullOutside: TestCriteria = TESTCRITERIA_FullOutside; break;
01350 case EXTRACT_PartOutside: TestCriteria = TESTCRITERIA_PartOutside; break;
01351 case EXTRACT_ClipOutside: TestCriteria = TESTCRITERIA_PartOutside; break;
01352 case EXTRACT_FullInside: TestCriteria = TESTCRITERIA_FullInside; break;
01353 case EXTRACT_PartInside: TestCriteria = TESTCRITERIA_PartInside; break;
01354 case EXTRACT_ClipInside: TestCriteria = TESTCRITERIA_PartInside; break;
01355 }
01356 return (TestCriteria);
01357 }
01358
01359 const ITEM& GetSelectParmItem (
01360 ELEMTYPE ElemType
01361 ) const;
01362
01363 ITEM& GetSelectParmItem (
01364 ELEMTYPE ElemType
01365 );
01366
01367 bool HasRegion (
01368 ) const { return (!m_Region.IsEmpty()); }
01369
01370 void SetRegion (
01371 const REGION2D& Region
01372 ) { m_Region = Region; }
01373
01374 void SetRegionExtractMode (
01375 EXTRACT ExtractMode
01376 ) { m_ExtractMode = ExtractMode; }
01377
01378 void SetSelectAll (
01379 );
01380
01381 void SetSelectNone (
01382 );
01383
01384 void SetSelectParmItem (
01385 ELEMTYPE ElemType,
01386 const ITEM& item
01387 );
01388
01389 private:
01390 #ifndef GENERATING_DOXYGEN_OUTPUT
01391 ITEM m_SelectParm[6];
01392 REGION2D m_Region;
01393 EXTRACT m_ExtractMode;
01394 #endif // GENERATING_DOXYGEN_OUTPUT
01395 };
01396
01397
01401 class GEOMETRIC::ELEMTRANSLIST {
01402 public:
01403
01405 ELEMTRANSLIST (
01406 ) {}
01407
01409 ELEMTRANSLIST (
01410 const ELEMTRANSLIST& rhs
01411 );
01412
01414 ~ELEMTRANSLIST (
01415 ) {}
01416
01418 ELEMTRANSLIST& operator= (
01419 const ELEMTRANSLIST& rhs
01420 );
01421
01424 const DESCRIPTOR& GetBaseTableName (
01425 ) const { return (m_BaseTableName); }
01426
01428 ERRVALUE GetElementBitset (
01429 ELEMTYPE ElemType,
01430 BITSET& Bitset
01431 ) const;
01432
01434 ERRVALUE GetElementBitsetDeque (
01435 ELEMTYPE ElemType,
01436 BITSET_DEQUE& BitsetDeque
01437 ) const;
01438
01441 const SIMPLE_ARRAY<INT32>& GetElementTransList (
01442 ELEMTYPE ElemType
01443 ) const;
01444
01447 SIMPLE_ARRAY<INT32>& GetElementTransList (
01448 ELEMTYPE ElemType
01449 );
01450
01451 ERRVALUE GetReverseTransList (
01452 ELEMTYPE ElemType,
01453 SIMPLE_ARRAY<INT32>& ReverseTrans,
01454 INT32 NumDestElems
01455 ) const;
01456
01458 void SetBaseTableName (
01459 const DESCRIPTOR& BaseTableName
01460 ) { m_BaseTableName = BaseTableName; }
01461
01463 void SetElementTransList (
01464 const SIMPLE_ARRAY<INT32>& TransList,
01465 ELEMTYPE ElemType
01466 );
01467
01469 ERRVALUE SetElementTransList (
01470 INT32* TransList,
01471 INT32 NumItems,
01472 ELEMTYPE ElemType
01473 );
01474
01476 ERRVALUE SetIdentity (
01477 const RVC::GEOMETRIC& GeoObj
01478 );
01479
01481 ERRVALUE SetIdentity (
01482 const RVC::GEOMETRIC& GeoObj,
01483 ELEMTYPE ElemType
01484 );
01485
01486 private:
01487 #ifndef GENERATING_DOXYGEN_OUTPUT
01488 SIMPLE_ARRAY<INT32> m_TransList[6];
01489 DESCRIPTOR m_BaseTableName;
01490 #endif // GENERATING_DOXYGEN_OUTPUT
01491 };
01492
01493
01495 class GEOMETRIC::GETOBJFILTER_HASMINIMUMELEMENTS : public GETOBJFILTER {
01496 public:
01497 GETOBJFILTER_HASMINIMUMELEMENTS (
01498 const ELEMTYPESET& ElemTypeSet,
01499 INT32 MinElements = 1
01500 ) : m_ElemTypeSet(ElemTypeSet), m_MinElements(MinElements) {}
01501
01502 private:
01503 #ifndef GENERATING_DOXYGEN_OUTPUT
01504 ELEMTYPESET m_ElemTypeSet;
01505 INT32 m_MinElements;
01506
01507 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
01508 #endif // GENERATING_DOXYGEN_OUTPUT
01509 };
01510
01512 class GEOMETRIC::GETOBJFILTER_HASNOIMPLIEDGEOREF : public GETOBJFILTER {
01513 public:
01514 GETOBJFILTER_HASNOIMPLIEDGEOREF () {}
01515 private:
01516 #ifndef GENERATING_DOXYGEN_OUTPUT
01517 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
01518 #endif // GENERATING_DOXYGEN_OUTPUT
01519 };
01520
01522 class GEOMETRIC::GETOBJFILTER_ISDISPLAYABLE : public GETOBJFILTER {
01523 public:
01524 GETOBJFILTER_ISDISPLAYABLE () {}
01525 private:
01526 #ifndef GENERATING_DOXYGEN_OUTPUT
01527 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
01528 #endif // GENERATING_DOXYGEN_OUTPUT
01529 };
01530
01532 class GEOMETRIC::GETOBJFILTER_ISNOTEMPTY : public GETOBJFILTER {
01533 public:
01534 GETOBJFILTER_ISNOTEMPTY () {}
01535 private:
01536 #ifndef GENERATING_DOXYGEN_OUTPUT
01537 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
01538 #endif // GENERATING_DOXYGEN_OUTPUT
01539 };
01540
01542 class GEOMETRIC::GETOBJFILTER_ISSELECTABLE : public GETOBJFILTER {
01543 public:
01544 GETOBJFILTER_ISSELECTABLE () {}
01545 private:
01546 #ifndef GENERATING_DOXYGEN_OUTPUT
01547 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
01548 #endif // GENERATING_DOXYGEN_OUTPUT
01549 };
01550
01551
01553 class GEOMETRIC::MAKEPARMSBASE {
01554 public:
01555
01557 MAKEPARMSBASE (
01558 POINTTYPE PointType
01559 ) :
01560 m_PointType(PointType),
01561 m_XScale(1.0),
01562 m_YScale(1.0),
01563 m_ZScale(1.0)
01564 {}
01565
01568 const DRECT3D& GetExtents (
01569 ) const {return (m_Extents);}
01570
01573 POINTTYPE GetPointType (
01574 ) const {return (m_PointType);}
01575
01578 double GetXScale (
01579 ) const {return (m_XScale);}
01580
01583 double GetYScale (
01584 ) const {return (m_YScale);}
01585
01588 double GetZScale (
01589 ) const {return (m_ZScale);}
01590
01592 void SetExtents (
01593 const DRECT3D& rect
01594 ) {m_Extents = rect;}
01595
01597 void SetPointType (
01598 POINTTYPE PointType
01599 ) {m_PointType = PointType;}
01600
01602 void SetXScale (
01603 double xscale
01604 ) {m_XScale = xscale;}
01605
01607 void SetYScale (
01608 double yscale
01609 ) {m_YScale = yscale;}
01610
01612 void SetZScale (
01613 double zscale
01614 ) {m_ZScale = zscale;}
01615
01616 protected:
01617
01618 DRECT3D m_Extents;
01619 POINTTYPE m_PointType;
01620 double m_XScale;
01621 double m_YScale;
01622 double m_ZScale;
01623 };
01624
01626 class GEOMETRIC::OBSERVER : public RVC::OBJECTOBSERVER {
01627 public:
01628 enum TYPE {
01629 TYPE_ExtentsChange = 0x00000008,
01630 TYPE_PointTypeChange = 0x00000010
01632 };
01633
01634 explicit OBSERVER (
01635 RVC::GEOMETRIC& object
01636 ) : OBJECTOBSERVER(object) {}
01637
01638 virtual ~OBSERVER (
01639 ) {}
01640
01645
01647 virtual void OnExtentsChanged (
01648 const DRECT3D&
01649 ) { return; }
01650
01652 virtual void OnPointTypeChanged (
01653 GEOMETRIC::POINTTYPE
01654 ) { return; }
01655
01656 private:
01657 #ifndef GENERATING_DOXYGEN_OUTPUT
01658 virtual void OnNotifyRaw (UINT32 reason, void *data);
01659 #endif // GENERATING_DOXYGEN_OUTPUT
01660 };
01661
01662
01664 class GEOMETRIC::SEARCHFILTER {
01665 public:
01668 virtual bool Filter (
01669 const RVC::GEOMETRIC& object,
01670 ELEMTYPE ElemType,
01671 INT32 ElemNum
01672 ) = 0;
01673
01674 protected:
01676 virtual ~SEARCHFILTER () {}
01677 };
01678
01679
01681 class GEOMETRIC::SEARCHFILTER_BITSET : public GEOMETRIC::SEARCHFILTER {
01682 public:
01683
01685 SEARCHFILTER_BITSET (
01686 const BITSET_UNOWNED& bitset
01687 ) : m_bitset(bitset) { }
01688
01690 SEARCHFILTER_BITSET (
01691 const UINT8 *set,
01692 UINT32 NumEntries
01693 ) : m_bitset(const_cast<UINT8*>(set),NumEntries) { }
01694
01696 virtual ~SEARCHFILTER_BITSET () {}
01697
01698 protected:
01699
01702 virtual bool Filter (
01703 const RVC::GEOMETRIC& object,
01704 ELEMTYPE ElemType,
01705 INT32 ElemNum
01706 );
01707
01708 private:
01709 #ifndef GENERATING_DOXYGEN_OUTPUT
01710 BITSET_UNOWNED m_bitset;
01711 #endif // GENERATING_DOXYGEN_OUTPUT
01712 };
01713
01715 class GEOMETRIC::SEARCHFILTER_UNSIGNEDSET : public GEOMETRIC::SEARCHFILTER {
01716 public:
01717
01719 SEARCHFILTER_UNSIGNEDSET (
01720 const UNSIGNEDSET& ElemSet
01721 ) : m_ElemSet(ElemSet) { }
01722
01724 virtual ~SEARCHFILTER_UNSIGNEDSET () {}
01725
01726 protected:
01727
01730 virtual bool Filter (
01731 const RVC::GEOMETRIC& object,
01732 ELEMTYPE ElemType,
01733 INT32 ElemNum
01734 );
01735
01736 private:
01737 #ifndef GENERATING_DOXYGEN_OUTPUT
01738 const UNSIGNEDSET& m_ElemSet;
01739 #endif // GENERATING_DOXYGEN_OUTPUT
01740 };
01741
01742
01744 class GEOMETRIC::SEARCHFILTER_ELEMTRANSLIST : public GEOMETRIC::SEARCHFILTER {
01745 public:
01746
01748 SEARCHFILTER_ELEMTRANSLIST (
01749 const GEOMETRIC::ELEMTRANSLIST& ElemTransList
01750 ) : m_ElemTransList(ElemTransList) { }
01751
01753 virtual ~SEARCHFILTER_ELEMTRANSLIST () {}
01754
01755 protected:
01756
01759 virtual bool Filter (
01760 const RVC::GEOMETRIC& object,
01761 ELEMTYPE ElemType,
01762 INT32 ElemNum
01763 );
01764
01765 private:
01766 #ifndef GENERATING_DOXYGEN_OUTPUT
01767 GEOMETRIC::ELEMTRANSLIST m_ElemTransList;
01768 #endif // GENERATING_DOXYGEN_OUTPUT
01769 };
01770
01771
01772 class GEOMETRIC::SEARCHRESULT {
01773 public:
01774
01775 class CONST_ITERATOR;
01776 friend class CONST_ITERATOR;
01777
01778 class CONST_ITERATOR {
01779 public:
01780
01782 CONST_ITERATOR (
01783 ) :
01784 m_IsRange(false),
01785 m_CurElemNum(0),
01786 m_CurIndex(0),
01787 m_sr(0)
01788 {}
01789
01791 CONST_ITERATOR (
01792 const SEARCHRESULT* sr,
01793 bool CreateEnd = false
01794 );
01795
01797 CONST_ITERATOR (
01798 const CONST_ITERATOR& rhs
01799 ) :
01800 m_IsRange(rhs.m_IsRange),
01801 m_CurElemNum(rhs.m_CurElemNum),
01802 m_CurIndex(rhs.m_CurIndex),
01803 m_sr(rhs.m_sr)
01804 {}
01805
01807 const INT32& operator* (
01808 ) const { return (m_CurElemNum); }
01809
01811 CONST_ITERATOR& operator++ (
01812 );
01813
01815 CONST_ITERATOR operator++(int
01816 ) {
01817 CONST_ITERATOR temp = *this;
01818 ++*this;
01819 return (temp);
01820 }
01821
01822 bool operator== (
01823 const CONST_ITERATOR& rhs
01824 ) const { return (m_CurElemNum == rhs.m_CurElemNum); }
01825
01826 bool operator!= (
01827 const CONST_ITERATOR& rhs
01828 ) const { return (!(*this == rhs)); }
01829
01830 private:
01831 #ifndef GENERATING_DOXYGEN_OUTPUT
01832 bool m_IsRange;
01833 INT32 m_CurElemNum;
01834 INT32 m_CurIndex;
01835 const SEARCHRESULT* m_sr;
01836 #endif // GENERATING_DOXYGEN_OUTPUT
01837 };
01838
01839 SEARCHRESULT (
01840 );
01841
01842 SEARCHRESULT (
01843 const SEARCHRESULT& rhs
01844 );
01845
01846 ~SEARCHRESULT (
01847 );
01848
01849 SEARCHRESULT& operator= (
01850 const SEARCHRESULT& rhs
01851 );
01852
01853 CONST_ITERATOR Begin (
01854 ) const {return (CONST_ITERATOR(this));}
01855
01856 void Clear (
01857 );
01858
01859 CONST_ITERATOR End (
01860 ) const {return (CONST_ITERATOR(this, true));}
01861
01862 ERRVALUE FindElements (
01863 const DRECT2D& SearchExtents,
01864 RVC::QSEARCHTREE& QTreeObj,
01865 INT32 MaxElemNum
01866 );
01867
01868 ERRVALUE FindElements (
01869 ELEMTYPE ElemType,
01870 const DRECT2D& SearchExtents,
01871 RVC::SPATIALTREE& STreeObj
01872 );
01873
01874 ERRVALUE GetElementSet (
01875 UNSIGNEDSET& ElemSet
01876 ) const;
01877
01878 ERRVALUE GetElementSet (
01879 BITSET& SelectSet
01880 ) const;
01881
01882 ERRVALUE GetElementSet (
01883 SIMPLE_ARRAY<INT32>& SelectList
01884 ) const;
01885
01886 INT32 GetNumItems (
01887 ) const;
01888
01889 bool IsEmpty (
01890 ) const;
01891
01893 void SetAll (
01894 INT32 NumElements
01895 );
01896
01898 void SetArray (
01899 const SIMPLE_ARRAY<INT32>& ElemSet
01900 );
01901
01903 void SortItemsByExtentArea (
01904 const RVC::GEOMETRIC& GeoObj,
01905 ELEMTYPE ElemType
01906 );
01907
01909 void SortItemsByExtentArea (
01910 const RVC::GEOMETRIC& GeoObj,
01911 ELEMTYPE ElemType,
01912 const DRECT2D& OverlapFilterRect
01913 );
01914
01915 private:
01916 #ifndef GENERATING_DOXYGEN_OUTPUT
01917 SIMPLE_ARRAY<INT32> m_list;
01918 SIMPLE_ARRAY<INT32_RANGE> m_range;
01919 INT32 m_MaxElemNum;
01920 #endif // GENERATING_DOXYGEN_OUTPUT
01921 };
01922
01923
01924 }
01925
01926 #endif