00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190 #ifndef INC_RVC_GEOMETRC_H
00191 #define INC_RVC_GEOMETRC_H
00192
00193 #ifndef INC_RVC_GEOSPATL_H
00194 #include <rvc/geospatl.h>
00195 #endif
00196
00197 #ifndef INC_RVC_STYLE_H
00198 #include <rvc/style.h>
00199 #endif
00200
00201 #ifndef INC_MI32_ELEMTYPE_H
00202 #include <mi32/elemtype.h>
00203 #endif
00204
00205 #ifndef INC_MI32_SIMPLEAR_H
00206 #include <mi32/simplear.h>
00207 #endif
00208
00209 #ifndef INC_MI32_RANGE_H
00210 #include <mi32/range.h>
00211 #endif
00212
00213 #ifndef INC_RVC_GETOBJF_H
00214 #include <rvc/getobjf.h>
00215 #endif
00216
00217 #ifndef INC_MI32_REGION_H
00218 #include <mi32/region.h>
00219 #endif
00220
00221 #ifndef INC_MI32_REGION2D_H
00222 #include <mi32/region2d.h>
00223 #endif
00224
00225 #ifndef INC_MI32_BITSET_H
00226 #include <mi32/bitset.h>
00227 #endif
00228
00229 #ifndef GENERATING_DOXYGEN_OUTPUT
00230 struct SMLCONTEXT;
00231 class TRANS2D_MAPGEN;
00232 #endif // GENERATING_DOXYGEN_OUTPUT
00233
00234 namespace RVC {
00235
00236 #ifndef GENERATING_DOXYGEN_OUTPUT
00237 class ELEMENT;
00238 class QSEARCHTREE;
00239 class SPATIALTREE;
00240 #endif // GENERATING_DOXYGEN_OUTPUT
00241
00242 class GEOMETRIC : public GEOSPATIAL {
00243 public:
00244
00245
00246 class ELEMSELECTFILTER;
00247 class ELEMSELECTPARMS;
00248 class ELEMTRANSLIST;
00249 class GETOBJFILTER_HASNOIMPLIEDGEOREF;
00250 class GETOBJFILTER_ISDISPLAYABLE;
00251 class GETOBJFILTER_ISNOTEMPTY;
00252 class GETOBJFILTER_ISSELECTABLE;
00253 class MAKEPARMSBASE;
00254 class OBSERVER;
00255 class SEARCHFILTER;
00256 class SEARCHFILTER_BITSET;
00257 class SEARCHRESULT;
00258
00259
00260 enum CAPABILITY {
00261 CAPABILITY_None = 0,
00262 CAPABILITY_OwnSearchMethods = 512,
00263 CAPABILITY_CanAddToEnd,
00264 CAPABILITY_CanChangeElements,
00265 CAPABILITY_HasStyleByElement,
00266 CAPABILITY_ElementHasExtents,
00267 CAPABILITY_HasLabels,
00268 CAPABILITY_LabelHasExtents
00269 };
00270
00271 enum EXTRACTFLAGS {
00272 EXTRACTFLAG_None = 0,
00273 EXTRACTFLAG_RegionMethod = 0x00000001,
00274 EXTRACTFLAG_RemExRecords = 0x00000002,
00275 EXTRACTFLAG_RemStdAttTables = 0x00000004,
00276 EXTRACTFLAG_IgnoreMissingLines = 0x00000008,
00277 EXTRACTFLAG_TableJoinNameStruct = 0x00000010,
00278 EXTRACTFLAG_TableJoinStruct = 0x00000020,
00279 EXTRACTFLAG_TableRemoveDupRec = 0x00000040,
00280 EXTRACTFLAG_IgnorePolygonTables = 0x00000080,
00281 EXTRACTFLAG_RemoveTables = 0x00000100,
00282 EXTRACTFLAG_CopyHyperIndexSub = 0x00000200
00283 };
00284
00285 enum POINTTYPE {
00286 POINTTYPE_2DXY = 1,
00287 POINTTYPE_3DXY = 4,
00288 POINTTYPE_3DXYZ = 7
00289 };
00290
00291
00292 GEOMETRIC (
00293 );
00294
00295
00296 GEOMETRIC (
00297 const RVC::GEOMETRIC& rhs
00298 );
00299
00300
00301 virtual ~GEOMETRIC (
00302 ) = 0;
00303
00304
00305 RVC::GEOMETRIC& operator= (
00306 const RVC::GEOMETRIC& rhs
00307 );
00308
00309
00310 ERRVALUE AddSearchTreeElement (
00311 INT32 elemnum,
00312 ELEMTYPE ElemType,
00313 const DRECT2D& Extents
00314 ) { return (v_AddSearchTreeElement(elemnum, ElemType, Extents)); }
00315
00316
00317 ERRVALUE BuildSearchTree (
00318 INT32 InitialNumElements,
00319 ELEMTYPE ElemType,
00320 const DRECT2D& Extents
00321 ) { return (v_BuildSearchTree(InitialNumElements, ElemType, Extents)); }
00322
00323
00324 ERRVALUE ClearSearchTree (
00325 INT32 InitialNumElements,
00326 ELEMTYPE ElemType,
00327 const DRECT2D& Extents
00328 ) { return (v_ClearSearchTree(InitialNumElements, ElemType, Extents)); }
00329
00330
00331
00332 ERRVALUE CombineStylesTo (
00333 RVC::GEOMETRIC& DestObj
00334 ) const;
00335
00336
00337
00338
00339 ERRVALUE CombineStylesTo (
00340 RVC::GEOMETRIC& DestObj,
00341 SIMPLE_ARRAY<INT32>& FontTrans,
00342 SIMPLE_ARRAY<INT32> PattTrans[STYLE::PATTERN_NumTypes]
00343 ) const;
00344
00345
00346 ERRVALUE CopySearchTreeElement (
00347 INT32 SourceElement,
00348 INT32 DestElement,
00349 ELEMTYPE ElemType,
00350 const DRECT2D& Extents
00351 ) { return (v_CopySearchTreeElement(SourceElement, DestElement, ElemType, Extents)); }
00352
00353
00354 ERRVALUE CreateSMLContext (
00355 SMLCONTEXT **pcontext
00356 ) const;
00357
00358
00359 ERRVALUE DeleteSearchTreeElement (
00360 INT32 elemnum,
00361 ELEMTYPE ElemType
00362 ) { return (v_DeleteSearchTreeElement(elemnum, ElemType)); }
00363
00364
00365
00366
00367 ERRVALUE ExtractTo (
00368 RVC::GEOMETRIC& DestObj,
00369 RVC::GEOMETRIC::ELEMTRANSLIST& TransList,
00370 const TRANS2D_MAPGEN& tmg,
00371 RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags = EXTRACTFLAG_None
00372 ) const { return (v_ExtractTo(DestObj, TransList, tmg, ExtractFlags)); }
00373
00374
00375
00376 INT32 FindClosestElement (
00377 ELEMTYPE ElemType,
00378 const DPOINT2D& SearchPt,
00379 double SearchDist,
00380 double* DistFromElem
00381 ) const { return (v_FindClosestElementLow(ElemType, SearchPt, 0, SearchDist, DistFromElem)); }
00382
00383
00384
00385 INT32 FindClosestElement (
00386 ELEMTYPE ElemType,
00387 const DPOINT2D& SearchPt,
00388 SEARCHFILTER& SearchFilter,
00389 double SearchDist,
00390 double* DistFromElem
00391 ) const { return (v_FindClosestElementLow(ElemType, SearchPt, &SearchFilter, SearchDist, DistFromElem)); }
00392
00393
00394
00395
00396 ERRVALUE FindElementDrawSet (
00397 ELEMTYPE ElemType,
00398 const DRECT2D& SearchExtents,
00399 SEARCHRESULT& SearchResult
00400 ) const;
00401
00402
00403
00404 ERRVALUE FindElementSearchSet (
00405 ELEMTYPE ElemType,
00406 const DRECT2D& SearchExtents,
00407 SEARCHRESULT& SearchResult
00408 ) const;
00409
00410
00411
00412 DIMENSION GetDimension (
00413 ) const { return ((GetPointType() == POINTTYPE_3DXYZ) ? DIMENSION_3D : DIMENSION_2D); }
00414
00415
00416 ERRVALUE GetElementExtents (
00417 ELEMTYPE ElemType,
00418 INT32 ElemNum,
00419 DRECT3D& Extents
00420 ) const { return (v_GetElementExtents(ElemType, ElemNum, Extents)); }
00421
00422
00423
00424 static RVC::GEOMETRIC* GetGeometric (
00425 const RVC::OBJECT& object
00426 );
00427
00428
00429
00430 static RVC::GEOMETRIC* GetGeometric (
00431 const RVC::OBJITEM& ObjItem
00432 );
00433
00434
00435
00436 INT32 GetNextElementID (
00437 ELEMTYPE ElemType
00438 ) const { return (v_GetNextElementID(ElemType)); }
00439
00440
00441
00442
00443 INT32 GetNumElements (
00444 ELEMTYPE ElemType
00445 ) const { return (v_GetNumElements(ElemType)); }
00446
00447
00448
00449 static RVC::OBJTYPESET GetObjTypeSet (
00450 );
00451
00452
00453
00454 INT32 GetPointDimension (
00455 ) const { return (GetPointSize() / sizeof(double)); }
00456
00457
00458
00459 POINTTYPE GetPointType (
00460 ) const { return (v_GetPointType()); }
00461
00462
00463
00464 INT32 GetPointSize (
00465 ) const { return (v_GetPointSize()); }
00466
00467
00468
00469 bool IsElementDeleted (
00470 const RVC::ELEMENT& Element
00471 ) const { return (v_IsElementDeleted(Element)); }
00472
00473
00474
00475 bool IsEmpty (
00476 ) const { return (v_IsEmpty()); }
00477
00478
00479 static bool IsGeometric (
00480 RVC::OBJTYPE ObjType
00481 );
00482
00483
00484 ERRVALUE SaveSearchTrees (
00485 ) { return (v_SaveSearchTrees()); }
00486
00487
00488
00489 ERRVALUE SetExtents (
00490 const DRECT3D &extents
00491 ) { return (v_SetExtents(extents)); }
00492
00493
00494 ERRVALUE SetNextElementID (
00495 ELEMTYPE ElemType,
00496 INT32 NextElementID
00497 ) { return (v_SetNextElementID(ElemType, NextElementID)); }
00498
00499
00500 bool SetSearchTree (
00501 ELEMTYPE ElemType,
00502 RVC::QSEARCHTREE* SearchTree,
00503 bool ReplaceExisting = false
00504 ) { return (v_SetSearchTree(ElemType, SearchTree, ReplaceExisting)); }
00505
00506
00507
00508 int SetupElemTransList (
00509 const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms,
00510 RVC::GEOMETRIC::ELEMTRANSLIST& TransList
00511 ) const { return (SetupElemTransList(SelectParms, TransList, 0)); }
00512
00513
00514
00515 int SetupElemTransList (
00516 const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms,
00517 RVC::GEOMETRIC::ELEMTRANSLIST& TransList,
00518 RVC::GEOMETRIC::ELEMSELECTFILTER& SelectFilter
00519 ) const { return (SetupElemTransList(SelectParms, TransList, &SelectFilter)); }
00520
00521
00522
00523 bool TestElementAgainstRegion (
00524 const RVC::ELEMENT& Element,
00525 const REGION2D& region,
00526 TESTCRITERIA TestMode
00527 ) const { return (v_TestElementAgainstRegion(Element, region, TestMode)); }
00528
00529
00530
00531 bool TestElementAgainstRegion (
00532 ELEMTYPE ElemType,
00533 INT32 ElemNum,
00534 const GEOREGION& region,
00535 GEOREGION::TESTMODE TestMode
00536 ) const { return (v_TestElementAgainstRegion(ElemType, ElemNum, region, TestMode)); }
00537
00538
00539 ERRVALUE UpdateExtents (
00540 const DRECT3D &extents
00541 ) { return (v_UpdateExtents(extents)); }
00542
00543 protected:
00544
00545 #ifndef GENERATING_DOXYGEN_OUTPUT
00546 static void GeometricCallbackFunc (MfAnyCallbackStruct *cb, void *data);
00547 #endif // GENERATING_DOXYGEN_OUTPUT
00548
00549 private:
00550
00551
00552 virtual ERRVALUE v_AddSearchTreeElement (INT32 elemnum, ELEMTYPE ElemType, const DRECT2D& Extents) = 0;
00553 virtual ERRVALUE v_BuildSearchTree (INT32 InitialNumElements, ELEMTYPE ElemType, const DRECT2D& Extents) = 0;
00554 virtual ERRVALUE v_ClearSearchTree (INT32 InitialNumElements, ELEMTYPE ElemType, const DRECT2D& Extents) = 0;
00555 virtual ERRVALUE v_CopySearchTreeElement (INT32 SourceElement, INT32 DestElement, ELEMTYPE ElemType, const DRECT2D& Extents) = 0;
00556 virtual ERRVALUE v_DeleteSearchTreeElement (INT32 elemnum, ELEMTYPE ElemType) = 0;
00557 virtual ERRVALUE v_ExtractTo (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const = 0;
00558 virtual INT32 v_FindClosestElementLow (ELEMTYPE ElemType, const DPOINT2D& SearchPt, SEARCHFILTER* SearchFilter, double SearchDist, double* DistFromElem) const = 0;
00559 virtual ERRVALUE v_FindElementDrawSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, SEARCHRESULT& SearchResult) const = 0;
00560 virtual ERRVALUE v_FindElementSearchSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, SEARCHRESULT& SearchResult) const = 0;
00561 virtual ERRVALUE v_GetElementExtents (ELEMTYPE ElemType, INT32 ElemNum, DRECT3D& Extents) const = 0;
00562 virtual INT32 v_GetNextElementID (ELEMTYPE ElemType) const = 0;
00563 virtual INT32 v_GetNumElements (ELEMTYPE ElemType) const = 0;
00564 virtual POINTTYPE v_GetPointType () const = 0;
00565 virtual INT32 v_GetPointSize () const = 0;
00566 virtual bool v_IsElementDeleted (const RVC::ELEMENT& Element) const = 0;
00567 virtual bool v_IsEmpty () const = 0;
00568 virtual ERRVALUE v_SaveSearchTrees () = 0;
00569 virtual ERRVALUE v_SetExtents (const DRECT3D &extents) = 0;
00570 virtual ERRVALUE v_SetNextElementID (ELEMTYPE ElemType, INT32 NextElementID) = 0;
00571 virtual bool v_SetSearchTree (ELEMTYPE ElemType, RVC::QSEARCHTREE* SearchTree, bool ReplaceExisting) = 0;
00572 virtual int v_SetupElemTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const = 0;
00573 virtual bool v_TestElementAgainstRegion (const RVC::ELEMENT& Element, const REGION2D& region, TESTCRITERIA TestMode) const = 0;
00574 virtual bool v_TestElementAgainstRegion (ELEMTYPE ElemType, INT32 ElemNum, const GEOREGION& region, GEOREGION::TESTMODE TestMode) const = 0;
00575 virtual ERRVALUE v_UpdateExtents (const DRECT3D &extents) = 0;
00576
00577 #ifndef GENERATING_DOXYGEN_OUTPUT
00578 int SetupElemTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
00579 #endif // GENERATING_DOXYGEN_OUTPUT
00580 };
00581
00582 DEFINE_ENUM_OP_BITWISE(GEOMETRIC::EXTRACTFLAGS);
00583
00584
00585 class GEOMETRIC::ELEMSELECTFILTER {
00586 public:
00587 ELEMSELECTFILTER () {}
00588
00589
00590
00591 int FilterElement (
00592 RVC::ELEMENT& Element
00593 ) { return (v_FilterElement(Element)); }
00594
00595 private:
00596
00597 virtual int v_FilterElement (RVC::ELEMENT& element) = 0;
00598 };
00599
00600
00601 class GEOMETRIC::ELEMSELECTPARMS {
00602 public:
00603
00604 enum EXTRACT {
00605 EXTRACT_All,
00606 EXTRACT_PartInside,
00607 EXTRACT_FullInside,
00608 EXTRACT_ClipInside,
00609 EXTRACT_PartOutside,
00610 EXTRACT_FullOutside,
00611 EXTRACT_ClipOutside
00612 };
00613
00614 struct ITEM {
00615 enum SELECT {
00616 SELECT_None = 0,
00617 SELECT_All,
00618 SELECT_ByRecord,
00619 SELECT_ByScript,
00620 SELECT_ByElement,
00621 SELECT_Last
00622 };
00623
00624 ITEM (
00625 );
00626
00627 SELECT m_SelectType;
00628 MISTRING m_QueryStr;
00629 RVC::OBJECTNAME m_TableName;
00630 BITSET m_RecordList;
00631 BITSET m_ElemList;
00632 };
00633
00634 ELEMSELECTPARMS (
00635 );
00636
00637 const GEOREGION& GetRegion (
00638 ) const { return (m_GeoRegion); }
00639
00640 GEOREGION::TESTMODE GetRegionTestMode (
00641 ) const { return (m_TestMode); }
00642
00643 const ITEM& GetSelectParmItem (
00644 ELEMTYPE ElemType
00645 ) const;
00646
00647 ITEM& GetSelectParmItem (
00648 ELEMTYPE ElemType
00649 );
00650
00651 bool HasRegion (
00652 ) const { return (m_HasRegion); }
00653
00654 void SetRegion (
00655 const GEOREGION& GeoRegion
00656 ) { m_GeoRegion = GeoRegion; m_HasRegion = true; }
00657
00658 void SetRegionExtractMode (
00659 EXTRACT ExtractMode
00660 );
00661
00662 void SetRegionTestMode (
00663 GEOREGION::TESTMODE TestMode
00664 ) { m_TestMode = TestMode; }
00665
00666 void SetSelectParmItem (
00667 ELEMTYPE ElemType,
00668 const ITEM& item
00669 );
00670
00671 private:
00672 #ifndef GENERATING_DOXYGEN_OUTPUT
00673 ITEM m_SelectParm[6];
00674 GEOREGION m_GeoRegion;
00675 GEOREGION::TESTMODE m_TestMode;
00676 bool m_HasRegion;
00677 #endif // GENERATING_DOXYGEN_OUTPUT
00678 };
00679
00680
00681
00682
00683
00684 class GEOMETRIC::ELEMTRANSLIST {
00685 public:
00686
00687
00688 ELEMTRANSLIST (
00689 ) {}
00690
00691
00692 ELEMTRANSLIST (
00693 const ELEMTRANSLIST& rhs
00694 );
00695
00696
00697 ~ELEMTRANSLIST (
00698 ) {}
00699
00700
00701 ELEMTRANSLIST& operator= (
00702 const ELEMTRANSLIST& rhs
00703 );
00704
00705
00706
00707 const SIMPLE_ARRAY<INT32>& GetElementTransList (
00708 ELEMTYPE ElemType
00709 ) const;
00710
00711
00712
00713 SIMPLE_ARRAY<INT32>& GetElementTransList (
00714 ELEMTYPE ElemType
00715 );
00716
00717 ERRVALUE GetReverseTransList (
00718 ELEMTYPE ElemType,
00719 SIMPLE_ARRAY<INT32>& ReverseTrans,
00720 INT32 NumDestElems
00721 ) const;
00722
00723
00724 void SetElementTransList (
00725 const SIMPLE_ARRAY<INT32>& TransList,
00726 ELEMTYPE ElemType
00727 );
00728
00729
00730 ERRVALUE SetElementTransList (
00731 INT32* TransList,
00732 INT32 NumItems,
00733 ELEMTYPE ElemType
00734 );
00735
00736
00737 ERRVALUE SetIdentity (
00738 const RVC::GEOMETRIC& GeoObj
00739 );
00740
00741
00742 ERRVALUE SetIdentity (
00743 const RVC::GEOMETRIC& GeoObj,
00744 ELEMTYPE ElemType
00745 );
00746
00747 private:
00748 #ifndef GENERATING_DOXYGEN_OUTPUT
00749 SIMPLE_ARRAY<INT32> m_TransList[6];
00750 #endif // GENERATING_DOXYGEN_OUTPUT
00751 };
00752
00753
00754
00755 class GEOMETRIC::GETOBJFILTER_HASNOIMPLIEDGEOREF : public GETOBJFILTER {
00756 public:
00757 GETOBJFILTER_HASNOIMPLIEDGEOREF () {}
00758 private:
00759 #ifndef GENERATING_DOXYGEN_OUTPUT
00760 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00761 #endif // GENERATING_DOXYGEN_OUTPUT
00762 };
00763
00764
00765 class GEOMETRIC::GETOBJFILTER_ISDISPLAYABLE : public GETOBJFILTER {
00766 public:
00767 GETOBJFILTER_ISDISPLAYABLE () {}
00768 private:
00769 #ifndef GENERATING_DOXYGEN_OUTPUT
00770 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00771 #endif // GENERATING_DOXYGEN_OUTPUT
00772 };
00773
00774
00775 class GEOMETRIC::GETOBJFILTER_ISNOTEMPTY : public GETOBJFILTER {
00776 public:
00777 GETOBJFILTER_ISNOTEMPTY () {}
00778 private:
00779 #ifndef GENERATING_DOXYGEN_OUTPUT
00780 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00781 #endif // GENERATING_DOXYGEN_OUTPUT
00782 };
00783
00784
00785 class GEOMETRIC::GETOBJFILTER_ISSELECTABLE : public GETOBJFILTER {
00786 public:
00787 GETOBJFILTER_ISSELECTABLE () {}
00788 private:
00789 #ifndef GENERATING_DOXYGEN_OUTPUT
00790 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00791 #endif // GENERATING_DOXYGEN_OUTPUT
00792 };
00793
00794
00795
00796 class GEOMETRIC::MAKEPARMSBASE {
00797 public:
00798
00799
00800 MAKEPARMSBASE (
00801 POINTTYPE PointType
00802 ) :
00803 m_PointType(PointType),
00804 m_XScale(1.0),
00805 m_YScale(1.0),
00806 m_ZScale(1.0)
00807 {}
00808
00809
00810
00811 const DRECT3D& GetExtents (
00812 ) const {return (m_Extents);}
00813
00814
00815
00816 POINTTYPE GetPointType (
00817 ) const {return (m_PointType);}
00818
00819
00820
00821 double GetXScale (
00822 ) const {return (m_XScale);}
00823
00824
00825
00826 double GetYScale (
00827 ) const {return (m_YScale);}
00828
00829
00830
00831 double GetZScale (
00832 ) const {return (m_ZScale);}
00833
00834
00835 void SetExtents (
00836 const DRECT3D& rect
00837 ) {m_Extents = rect;}
00838
00839
00840 void SetPointType (
00841 POINTTYPE PointType
00842 ) {m_PointType = PointType;}
00843
00844
00845 void SetXScale (
00846 double xscale
00847 ) {m_XScale = xscale;}
00848
00849
00850 void SetYScale (
00851 double xscale
00852 ) {m_XScale = xscale;}
00853
00854
00855 void SetZScale (
00856 double xscale
00857 ) {m_XScale = xscale;}
00858
00859 protected:
00860
00861 DRECT3D m_Extents;
00862 POINTTYPE m_PointType;
00863 double m_XScale;
00864 double m_YScale;
00865 double m_ZScale;
00866 };
00867
00868
00869 class GEOMETRIC::OBSERVER : public RVC::OBJECTOBSERVER {
00870 public:
00871 enum TYPE {
00872 TYPE_ExtentsChange = 0x00000108,
00873 TYPE_PointTypeChange = 0x00000110
00874
00875 };
00876
00877 explicit OBSERVER (
00878 RVC::GEOMETRIC& object
00879 ) : OBJECTOBSERVER(object) {}
00880
00881 virtual ~OBSERVER (
00882 ) {}
00883
00884
00885
00886
00887
00888
00889
00890 virtual void OnExtentsChanged (
00891 const DRECT3D& NewExtents
00892 ) { return; }
00893
00894
00895 virtual void OnPointTypeChanged (
00896 GEOMETRIC::POINTTYPE NewPointType
00897 ) { return; }
00898
00899 private:
00900 #ifndef GENERATING_DOXYGEN_OUTPUT
00901 virtual void OnNotifyRaw (UINT32 reason, void *data);
00902 #endif // GENERATING_DOXYGEN_OUTPUT
00903 };
00904
00905
00906
00907 class GEOMETRIC::SEARCHFILTER {
00908 public:
00909
00910
00911 virtual bool Filter (
00912 const RVC::GEOMETRIC& object,
00913 ELEMTYPE ElemType,
00914 INT32 ElemNum
00915 ) = 0;
00916
00917 protected:
00918
00919 virtual ~SEARCHFILTER () {}
00920 };
00921
00922
00923
00924 class GEOMETRIC::SEARCHFILTER_BITSET : public GEOMETRIC::SEARCHFILTER {
00925 public:
00926
00927
00928 SEARCHFILTER_BITSET (
00929 const BITSET_UNOWNED& bitset
00930 ) : m_bitset(bitset) { }
00931
00932
00933 SEARCHFILTER_BITSET (
00934 const UINT8 *set,
00935 UINT32 NumEntries
00936 ) : m_bitset(const_cast<UINT8*>(set),NumEntries) { }
00937
00938
00939 virtual ~SEARCHFILTER_BITSET () {}
00940
00941 protected:
00942
00943
00944
00945 virtual bool Filter (
00946 const RVC::GEOMETRIC& object,
00947 ELEMTYPE ElemType,
00948 INT32 ElemNum
00949 );
00950
00951 private:
00952 #ifndef GENERATING_DOXYGEN_OUTPUT
00953 BITSET_UNOWNED m_bitset;
00954 #endif // GENERATING_DOXYGEN_OUTPUT
00955 };
00956
00957
00958 class GEOMETRIC::SEARCHRESULT {
00959 public:
00960
00961 class CONST_ITERATOR;
00962 friend class CONST_ITERATOR;
00963
00964 class CONST_ITERATOR {
00965 public:
00966
00967
00968 CONST_ITERATOR (
00969 ) :
00970 m_IsRange(false),
00971 m_CurElemNum(0),
00972 m_CurIndex(0),
00973 m_sr(0)
00974 {}
00975
00976
00977 CONST_ITERATOR (
00978 const SEARCHRESULT* sr,
00979 bool CreateEnd = false
00980 );
00981
00982
00983 CONST_ITERATOR (
00984 const CONST_ITERATOR& rhs
00985 ) :
00986 m_IsRange(rhs.m_IsRange),
00987 m_CurElemNum(rhs.m_CurElemNum),
00988 m_CurIndex(rhs.m_CurIndex),
00989 m_sr(rhs.m_sr)
00990 {}
00991
00992
00993 const INT32& operator* (
00994 ) const { return (m_CurElemNum); }
00995
00996
00997 CONST_ITERATOR& operator++ (
00998 );
00999
01000
01001 CONST_ITERATOR operator++(int
01002 ) {
01003 CONST_ITERATOR temp = *this;
01004 ++*this;
01005 return (temp);
01006 }
01007
01008 bool operator== (
01009 const CONST_ITERATOR& rhs
01010 ) const { return (m_CurElemNum == rhs.m_CurElemNum); }
01011
01012 bool operator!= (
01013 const CONST_ITERATOR& rhs
01014 ) const { return (!(*this == rhs)); }
01015
01016 private:
01017 #ifndef GENERATING_DOXYGEN_OUTPUT
01018 bool m_IsRange;
01019 INT32 m_CurElemNum;
01020 INT32 m_CurIndex;
01021 const SEARCHRESULT* m_sr;
01022 #endif // GENERATING_DOXYGEN_OUTPUT
01023 };
01024
01025 SEARCHRESULT (
01026 );
01027
01028 SEARCHRESULT (
01029 const SEARCHRESULT& rhs
01030 );
01031
01032 ~SEARCHRESULT (
01033 );
01034
01035 SEARCHRESULT& operator= (
01036 const SEARCHRESULT& rhs
01037 );
01038
01039 CONST_ITERATOR Begin (
01040 ) const {return (CONST_ITERATOR(this));}
01041
01042 void Clear (
01043 );
01044
01045 CONST_ITERATOR End (
01046 ) const {return (CONST_ITERATOR(this, true));}
01047
01048 ERRVALUE FindElements (
01049 ELEMTYPE ElemType,
01050 const DRECT2D& SearchExtents,
01051 RVC::QSEARCHTREE& QTreeObj
01052 );
01053
01054 ERRVALUE FindElements (
01055 ELEMTYPE ElemType,
01056 const DRECT2D& SearchExtents,
01057 RVC::SPATIALTREE& STreeObj
01058 );
01059
01060 ERRVALUE GetElementSet (
01061 BITSET& SelectSet
01062 ) const;
01063
01064 ERRVALUE GetElementSet (
01065 SIMPLE_ARRAY<INT32>& SelectList
01066 ) const;
01067
01068 INT32 GetNumItems (
01069 ) const;
01070
01071 bool IsEmpty (
01072 ) const;
01073
01074
01075 void SetAll (
01076 INT32 NumElements
01077 );
01078
01079
01080 void SetArray (
01081 const SIMPLE_ARRAY<INT32>& ElemSet
01082 );
01083
01084
01085 void SortItemsByExtentArea (
01086 const RVC::GEOMETRIC& GeoObj,
01087 ELEMTYPE ElemType
01088 );
01089
01090 private:
01091 #ifndef GENERATING_DOXYGEN_OUTPUT
01092 SIMPLE_ARRAY<INT32> m_list;
01093 SIMPLE_ARRAY<INT32_RANGE> m_range;
01094 #endif // GENERATING_DOXYGEN_OUTPUT
01095 };
01096
01097
01098 }
01099
01100 #endif