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
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254 #ifndef INC_RVC_GEOMETRC_H
00255 #define INC_RVC_GEOMETRC_H
00256
00257 #ifndef INC_RVC_GEOSPATL_H
00258 #include <rvc/geospatl.h>
00259 #endif
00260
00261 #ifndef INC_RVC_STYLE_H
00262 #include <rvc/style.h>
00263 #endif
00264
00265 #ifndef INC_MI32_ELEMTYPE_H
00266 #include <mi32/elemtype.h>
00267 #endif
00268
00269 #ifndef INC_MI32_SIMPLEAR_H
00270 #include <mi32/simplear.h>
00271 #endif
00272
00273 #ifndef INC_MI32_RANGE_H
00274 #include <mi32/range.h>
00275 #endif
00276
00277 #ifndef INC_RVC_GETOBJF_H
00278 #include <rvc/getobjf.h>
00279 #endif
00280
00281 #ifndef INC_MI32_REGION2D_H
00282 #include <mi32/region2d.h>
00283 #endif
00284
00285 #ifndef INC_MI32_BITSET_H
00286 #include <mi32/bitset.h>
00287 #endif
00288
00289 #ifndef INC_MI32_ELEMTYPESET_H
00290 #include <mi32/elemtypeset.h>
00291 #endif
00292
00293 #ifndef GENERATING_DOXYGEN_OUTPUT
00294 struct SMLCONTEXT;
00295 class TRANS2D_MAPGEN;
00296 class BITSET_DEQUE;
00297 #endif // GENERATING_DOXYGEN_OUTPUT
00298
00299 namespace RVC {
00300
00301 #ifndef GENERATING_DOXYGEN_OUTPUT
00302 class ELEMENT;
00303 class QSEARCHTREE;
00304 class SPATIALTREE;
00305 #endif // GENERATING_DOXYGEN_OUTPUT
00306
00307 class GEOMETRIC : public GEOSPATIAL {
00308 public:
00309
00310
00311 class ELEMSELECTFILTER;
00312 class ELEMSELECTPARMS;
00313 class ELEMTRANSLIST;
00314 class GETOBJFILTER_HASMINIMUMELEMENTS;
00315 class GETOBJFILTER_HASNOIMPLIEDGEOREF;
00316 class GETOBJFILTER_ISDISPLAYABLE;
00317 class GETOBJFILTER_ISNOTEMPTY;
00318 class GETOBJFILTER_ISSELECTABLE;
00319 class MAKEPARMSBASE;
00320 class OBSERVER;
00321 class SEARCHFILTER;
00322 class SEARCHFILTER_BITSET;
00323 class SEARCHFILTER_ELEMTRANSLIST;
00324 class SEARCHRESULT;
00325
00326
00327 enum CAPABILITY {
00328 CAPABILITY_None = 0,
00329 CAPABILITY_OwnSearchMethods = 512,
00330 CAPABILITY_CanAddToEnd,
00331 CAPABILITY_CanChangeElements,
00332 CAPABILITY_HasStyleByElement,
00333 CAPABILITY_ElementHasExtents,
00334 CAPABILITY_HasLabels,
00335 CAPABILITY_LabelHasExtents,
00336 CAPABILITY_CanDeleteLastElement,
00337 CAPABILITY_CanDeleteAnyElement
00338 };
00339
00340 enum COMPONENT {
00341 COMPONENT_Point = 0x01,
00342 COMPONENT_Line = 0x02,
00343 COMPONENT_Polygon = 0x04,
00344 COMPONENT_Label = 0x08,
00345 COMPONENT_Geometric = (COMPONENT_Point + COMPONENT_Line + COMPONENT_Polygon),
00346 COMPONENT_All = (COMPONENT_Geometric + COMPONENT_Label)
00347 };
00348
00349 enum EXTRACTFLAGS {
00350 EXTRACTFLAG_None = 0,
00351 EXTRACTFLAG_RegionMethod = 0x00000001,
00352 EXTRACTFLAG_RemExRecords = 0x00000002,
00353 EXTRACTFLAG_RemStdAttTables = 0x00000004,
00354 EXTRACTFLAG_IgnoreMissingLines = 0x00000008,
00355 EXTRACTFLAG_TableJoinNameStruct = 0x00000010,
00356 EXTRACTFLAG_TableJoinStruct = 0x00000020,
00357 EXTRACTFLAG_TableRemoveDupRec = 0x00000040,
00358 EXTRACTFLAG_IgnorePolygonTables = 0x00000080,
00359 EXTRACTFLAG_RemoveTables = 0x00000100,
00360 EXTRACTFLAG_CopyHyperIndexSub = 0x00000200,
00361 EXTRACTFLAG_DensifyPoints = 0x00000400,
00362
00363 EXTRACTFLAG_CreateNewTables = 0x00000800
00364 };
00365
00366 enum POINTTYPE {
00367 POINTTYPE_2DXY = 1,
00368 POINTTYPE_3DXY = 4,
00369 POINTTYPE_3DXYZ = 7
00370 };
00371
00372
00373 GEOMETRIC (
00374 );
00375
00376
00377 GEOMETRIC (
00378 const RVC::GEOMETRIC& rhs
00379 );
00380
00381
00382 virtual ~GEOMETRIC (
00383 ) = 0;
00384
00385
00386 RVC::GEOMETRIC& operator= (
00387 const RVC::GEOMETRIC& rhs
00388 );
00389
00390
00391 ERRVALUE AddSearchTreeElement (
00392 INT32 elemnum,
00393 ELEMTYPE ElemType,
00394 const DRECT2D& Extents
00395 ) { return (v_AddSearchTreeElement(elemnum, ElemType, Extents)); }
00396
00397
00398 ERRVALUE BuildSearchTree (
00399 INT32 InitialNumElements,
00400 ELEMTYPE ElemType,
00401 const DRECT2D& Extents
00402 ) { return (v_BuildSearchTree(InitialNumElements, ElemType, Extents)); }
00403
00404
00405 ERRVALUE ClearSearchTree (
00406 INT32 InitialNumElements,
00407 ELEMTYPE ElemType,
00408 const DRECT2D& Extents
00409 ) { return (v_ClearSearchTree(InitialNumElements, ElemType, Extents)); }
00410
00411
00412
00413 ERRVALUE CombineStylesTo (
00414 RVC::GEOMETRIC& DestObj
00415 ) const;
00416
00417
00418
00419
00420 ERRVALUE CombineStylesTo (
00421 RVC::GEOMETRIC& DestObj,
00422 SIMPLE_ARRAY<INT32>& FontTrans,
00423 SIMPLE_ARRAY<INT32> PattTrans[STYLE::PATTERN_NumTypes]
00424 ) const;
00425
00426
00427 ERRVALUE CopySearchTreeElement (
00428 INT32 SourceElement,
00429 INT32 DestElement,
00430 ELEMTYPE ElemType,
00431 const DRECT2D& Extents
00432 ) { return (v_CopySearchTreeElement(SourceElement, DestElement, ElemType, Extents)); }
00433
00434
00435 ERRVALUE CreateSMLContext (
00436 SMLCONTEXT **pcontext
00437 ) const;
00438
00439
00440 ERRVALUE DeleteSearchTreeElement (
00441 INT32 elemnum,
00442 ELEMTYPE ElemType
00443 ) { return (v_DeleteSearchTreeElement(elemnum, ElemType)); }
00444
00445
00446
00447
00448 ERRVALUE ExtractTo (
00449 RVC::GEOMETRIC& DestObj,
00450 RVC::GEOMETRIC::ELEMTRANSLIST& TransList,
00451 const TRANS2D_MAPGEN& tmg,
00452 RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags = EXTRACTFLAG_None
00453 ) const { return (v_ExtractTo(DestObj, TransList, tmg, ExtractFlags)); }
00454
00455
00456
00457 INT32 FindClosestElement (
00458 ELEMTYPE ElemType,
00459 const DPOINT2D& SearchPt,
00460 double SearchDist,
00461 double* DistFromElem
00462 ) const { return (v_FindClosestElementLow(ElemType, SearchPt, 0, SearchDist, DistFromElem)); }
00463
00464
00465
00466 INT32 FindClosestElement (
00467 ELEMTYPE ElemType,
00468 const DPOINT2D& SearchPt,
00469 SEARCHFILTER& SearchFilter,
00470 double SearchDist,
00471 double* DistFromElem
00472 ) const { return (v_FindClosestElementLow(ElemType, SearchPt, &SearchFilter, SearchDist, DistFromElem)); }
00473
00474
00475 ERRVALUE FindClosestElements (
00476 const DPOINT2D& SearchPt,
00477 double SearchDist,
00478 SIMPLE_ARRAY<RVC::ELEMENT>& ElementList,
00479 COMPONENT Component = COMPONENT_All
00480 ) const { return (v_FindClosestElementsLow(SearchPt, SearchDist, 0, ElementList, Component)); }
00481
00482
00483 ERRVALUE FindClosestElements (
00484 const DPOINT2D& SearchPt,
00485 double SearchDist,
00486 SEARCHFILTER& SearchFilter,
00487 SIMPLE_ARRAY<RVC::ELEMENT>& ElementList,
00488 COMPONENT Component = COMPONENT_All
00489 ) const { return (v_FindClosestElementsLow(SearchPt, SearchDist, &SearchFilter, ElementList, Component)); }
00490
00491
00492
00493
00494 ERRVALUE FindElementDrawSet (
00495 ELEMTYPE ElemType,
00496 const DRECT2D& SearchExtents,
00497 SEARCHRESULT& SearchResult
00498 ) const;
00499
00500
00501
00502 ERRVALUE FindElementSearchSet (
00503 ELEMTYPE ElemType,
00504 const DRECT2D& SearchExtents,
00505 SEARCHRESULT& SearchResult
00506 ) const;
00507
00508
00509
00510 INT32 GetAttachmentIndex (
00511 const RVC::ELEMENT& Element
00512 ) const { return (v_GetAttachmentIndex(Element)); }
00513
00514
00515
00516 DIMENSION GetDimension (
00517 ) const { return ((GetPointType() == POINTTYPE_3DXYZ) ? DIMENSION_3D : DIMENSION_2D); }
00518
00519
00520 ERRVALUE GetElementExtents (
00521 ELEMTYPE ElemType,
00522 INT32 ElemNum,
00523 DRECT3D& Extents
00524 ) const { return (v_GetElementExtents(ElemType, ElemNum, Extents)); }
00525
00526
00527
00528 static RVC::GEOMETRIC* GetGeometric (
00529 const RVC::OBJECT& object
00530 );
00531
00532
00533
00534 static RVC::GEOMETRIC* GetGeometric (
00535 const RVC::OBJITEM& ObjItem
00536 );
00537
00538
00539
00540 INT32 GetNextElementID (
00541 ELEMTYPE ElemType
00542 ) const { return (v_GetNextElementID(ElemType)); }
00543
00544
00545
00546
00547 INT32 GetNumElements (
00548 ELEMTYPE ElemType
00549 ) const { return (v_GetNumElements(ElemType)); }
00550
00551
00552
00553 static RVC::OBJTYPESET GetObjTypeSet (
00554 );
00555
00556
00557
00558 INT32 GetPointDimension (
00559 ) const { return (GetPointSize() / sizeof(double)); }
00560
00561
00562
00563 POINTTYPE GetPointType (
00564 ) const { return (v_GetPointType()); }
00565
00566
00567
00568 INT32 GetPointSize (
00569 ) const { return (v_GetPointSize()); }
00570
00571
00572
00573 double GetTotalLineLength (
00574 ) const { return (v_GetTotalLineLength()); }
00575
00576
00577
00578 bool IsElementDeleted (
00579 const RVC::ELEMENT& Element
00580 ) const { return (v_IsElementDeleted(Element)); }
00581
00582
00583
00584 bool IsEmpty (
00585 ) const { return (v_IsEmpty()); }
00586
00587
00588 static bool IsGeometric (
00589 RVC::OBJTYPE ObjType
00590 );
00591
00592
00593 ERRVALUE SaveSearchTrees (
00594 ) { return (v_SaveSearchTrees()); }
00595
00596
00597
00598 ERRVALUE SetExtents (
00599 const DRECT3D &extents
00600 ) { return (v_SetExtents(extents)); }
00601
00602
00603 ERRVALUE SetNextElementID (
00604 ELEMTYPE ElemType,
00605 INT32 NextElementID
00606 ) { return (v_SetNextElementID(ElemType, NextElementID)); }
00607
00608
00609 bool SetSearchTree (
00610 ELEMTYPE ElemType,
00611 RVC::QSEARCHTREE* SearchTree,
00612 bool ReplaceExisting = false
00613 ) { return (v_SetSearchTree(ElemType, SearchTree, ReplaceExisting)); }
00614
00615
00616 ERRVALUE SetTotalLineLength (
00617 double length
00618 ) { return (v_SetTotalLineLength(length)); }
00619
00620
00621
00622 int SetupElemTransList (
00623 const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms,
00624 RVC::GEOMETRIC::ELEMTRANSLIST& TransList
00625 ) const { return (SetupElemTransList(SelectParms, TransList, 0)); }
00626
00627
00628
00629 int SetupElemTransList (
00630 const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms,
00631 RVC::GEOMETRIC::ELEMTRANSLIST& TransList,
00632 RVC::GEOMETRIC::ELEMSELECTFILTER& SelectFilter
00633 ) const { return (SetupElemTransList(SelectParms, TransList, &SelectFilter)); }
00634
00635
00636
00637
00638 bool TestElementAgainstRegion (
00639 const RVC::ELEMENT& Element,
00640 const REGION2D& region,
00641 TESTCRITERIA TestMode
00642 ) const { return (v_TestElementAgainstRegion(Element, region, TestMode)); }
00643
00644
00645 ERRVALUE UpdateExtents (
00646 const DRECT3D &extents
00647 ) { return (v_UpdateExtents(extents)); }
00648
00649 protected:
00650
00651 #ifndef GENERATING_DOXYGEN_OUTPUT
00652 static void GeometricCallbackFunc (MfAnyCallbackStruct *cb, void *data);
00653 #endif // GENERATING_DOXYGEN_OUTPUT
00654
00655 private:
00656
00657
00658 virtual ERRVALUE v_AddSearchTreeElement (INT32 elemnum, ELEMTYPE ElemType, const DRECT2D& Extents) = 0;
00659 virtual ERRVALUE v_BuildSearchTree (INT32 InitialNumElements, ELEMTYPE ElemType, const DRECT2D& Extents) = 0;
00660 virtual ERRVALUE v_ClearSearchTree (INT32 InitialNumElements, ELEMTYPE ElemType, const DRECT2D& Extents) = 0;
00661 virtual ERRVALUE v_CopySearchTreeElement (INT32 SourceElement, INT32 DestElement, ELEMTYPE ElemType, const DRECT2D& Extents) = 0;
00662 virtual ERRVALUE v_DeleteSearchTreeElement (INT32 elemnum, ELEMTYPE ElemType) = 0;
00663 virtual ERRVALUE v_ExtractTo (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const = 0;
00664 virtual INT32 v_FindClosestElementLow (ELEMTYPE ElemType, const DPOINT2D& SearchPt, SEARCHFILTER* SearchFilter, double SearchDist, double* DistFromElem) const = 0;
00665 virtual ERRVALUE v_FindClosestElementsLow (const DPOINT2D& SearchPt, double SearchDist, SEARCHFILTER* SearchFilter, SIMPLE_ARRAY<RVC::ELEMENT>& ElementList, COMPONENT Component) const;
00666 virtual ERRVALUE v_FindElementDrawSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, SEARCHRESULT& SearchResult) const = 0;
00667 virtual ERRVALUE v_FindElementSearchSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, SEARCHRESULT& SearchResult) const = 0;
00668 virtual INT32 v_GetAttachmentIndex (const RVC::ELEMENT& Element) const;
00669 virtual ERRVALUE v_GetElementExtents (ELEMTYPE ElemType, INT32 ElemNum, DRECT3D& Extents) const = 0;
00670 virtual INT32 v_GetNextElementID (ELEMTYPE ElemType) const = 0;
00671 virtual INT32 v_GetNumElements (ELEMTYPE ElemType) const = 0;
00672 virtual POINTTYPE v_GetPointType () const = 0;
00673 virtual INT32 v_GetPointSize () const = 0;
00674 virtual double v_GetTotalLineLength () const = 0;
00675 virtual bool v_IsElementDeleted (const RVC::ELEMENT& Element) const = 0;
00676 virtual bool v_IsEmpty () const = 0;
00677 virtual ERRVALUE v_SaveSearchTrees () = 0;
00678 virtual ERRVALUE v_SetExtents (const DRECT3D &extents) = 0;
00679 virtual ERRVALUE v_SetNextElementID (ELEMTYPE ElemType, INT32 NextElementID) = 0;
00680 virtual bool v_SetSearchTree (ELEMTYPE ElemType, RVC::QSEARCHTREE* SearchTree, bool ReplaceExisting) = 0;
00681 virtual ERRVALUE v_SetTotalLineLength (double length) = 0;
00682 virtual int v_SetupElemTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const = 0;
00683 virtual bool v_TestElementAgainstRegion (const RVC::ELEMENT& Element, const REGION2D& region, TESTCRITERIA TestMode) const = 0;
00684 virtual ERRVALUE v_UpdateExtents (const DRECT3D &extents) = 0;
00685
00686 #ifndef GENERATING_DOXYGEN_OUTPUT
00687 int SetupElemTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
00688 #endif
00689 };
00690
00691 DEFINE_ENUM_OP_BITWISE(GEOMETRIC::EXTRACTFLAGS);
00692 DEFINE_ENUM_OP_BITWISE(GEOMETRIC::COMPONENT);
00693
00694
00695 class GEOMETRIC::ELEMSELECTFILTER {
00696 public:
00697 ELEMSELECTFILTER () {}
00698
00699
00700
00701 int FilterElement (
00702 RVC::ELEMENT& Element
00703 ) { return (v_FilterElement(Element)); }
00704
00705 private:
00706
00707 virtual int v_FilterElement (RVC::ELEMENT& element) = 0;
00708 };
00709
00710
00711 class GEOMETRIC::ELEMSELECTPARMS {
00712 public:
00713
00714 enum EXTRACT {
00715 EXTRACT_All,
00716 EXTRACT_PartInside,
00717 EXTRACT_FullInside,
00718 EXTRACT_ClipInside,
00719 EXTRACT_PartOutside,
00720 EXTRACT_FullOutside,
00721 EXTRACT_ClipOutside
00722 };
00723
00724 struct ITEM {
00725 enum SELECT {
00726 SELECT_None = 0,
00727 SELECT_All,
00728 SELECT_ByRecord,
00729 SELECT_ByScript,
00730 SELECT_ByElement,
00731 SELECT_Last
00732 };
00733
00734 ITEM (
00735 );
00736
00737 SELECT m_SelectType;
00738 MISTRING m_QueryStr;
00739 RVC::OBJECTNAME m_TableName;
00740 BITSET m_RecordList;
00741 BITSET m_ElemList;
00742 };
00743
00744 ELEMSELECTPARMS (
00745 );
00746
00747 const REGION2D& GetRegion2D (
00748 ) const { return (m_Region); }
00749
00750 EXTRACT GetRegionExtractMode (
00751 ) const { return (m_ExtractMode); }
00752
00753 TESTCRITERIA GetRegionTestCriteria (
00754 ) const {
00755 TESTCRITERIA TestCriteria = TESTCRITERIA_PartInside;
00756 switch (m_ExtractMode) {
00757 case EXTRACT_FullOutside: TestCriteria = TESTCRITERIA_FullOutside; break;
00758 case EXTRACT_PartOutside: TestCriteria = TESTCRITERIA_PartOutside; break;
00759 case EXTRACT_ClipOutside: TestCriteria = TESTCRITERIA_PartOutside; break;
00760 case EXTRACT_FullInside: TestCriteria = TESTCRITERIA_FullInside; break;
00761 case EXTRACT_PartInside: TestCriteria = TESTCRITERIA_PartInside; break;
00762 case EXTRACT_ClipInside: TestCriteria = TESTCRITERIA_PartInside; break;
00763 }
00764 return (TestCriteria);
00765 }
00766
00767 const ITEM& GetSelectParmItem (
00768 ELEMTYPE ElemType
00769 ) const;
00770
00771 ITEM& GetSelectParmItem (
00772 ELEMTYPE ElemType
00773 );
00774
00775 bool HasRegion (
00776 ) const { return (!m_Region.IsEmpty()); }
00777
00778 void SetRegion (
00779 const REGION2D& Region
00780 ) { m_Region = Region; }
00781
00782 void SetRegionExtractMode (
00783 EXTRACT ExtractMode
00784 ) { m_ExtractMode = ExtractMode; }
00785
00786 void SetSelectAll (
00787 );
00788
00789 void SetSelectNone (
00790 );
00791
00792 void SetSelectParmItem (
00793 ELEMTYPE ElemType,
00794 const ITEM& item
00795 );
00796
00797 private:
00798 #ifndef GENERATING_DOXYGEN_OUTPUT
00799 ITEM m_SelectParm[6];
00800 REGION2D m_Region;
00801 EXTRACT m_ExtractMode;
00802 #endif // GENERATING_DOXYGEN_OUTPUT
00803 };
00804
00805
00806
00807
00808
00809 class GEOMETRIC::ELEMTRANSLIST {
00810 public:
00811
00812
00813 ELEMTRANSLIST (
00814 ) {}
00815
00816
00817 ELEMTRANSLIST (
00818 const ELEMTRANSLIST& rhs
00819 );
00820
00821
00822 ~ELEMTRANSLIST (
00823 ) {}
00824
00825
00826 ELEMTRANSLIST& operator= (
00827 const ELEMTRANSLIST& rhs
00828 );
00829
00830
00831
00832 const SIMPLE_ARRAY<INT32>& GetElementTransList (
00833 ELEMTYPE ElemType
00834 ) const;
00835
00836
00837
00838 SIMPLE_ARRAY<INT32>& GetElementTransList (
00839 ELEMTYPE ElemType
00840 );
00841
00842
00843 ERRVALUE GetElementBitset (
00844 ELEMTYPE ElemType,
00845 BITSET& Bitset
00846 ) const;
00847
00848
00849 ERRVALUE GetElementBitsetDeque (
00850 ELEMTYPE ElemType,
00851 BITSET_DEQUE& BitsetDeque
00852 ) const;
00853
00854 ERRVALUE GetReverseTransList (
00855 ELEMTYPE ElemType,
00856 SIMPLE_ARRAY<INT32>& ReverseTrans,
00857 INT32 NumDestElems
00858 ) const;
00859
00860
00861 void SetElementTransList (
00862 const SIMPLE_ARRAY<INT32>& TransList,
00863 ELEMTYPE ElemType
00864 );
00865
00866
00867 ERRVALUE SetElementTransList (
00868 INT32* TransList,
00869 INT32 NumItems,
00870 ELEMTYPE ElemType
00871 );
00872
00873
00874 ERRVALUE SetIdentity (
00875 const RVC::GEOMETRIC& GeoObj
00876 );
00877
00878
00879 ERRVALUE SetIdentity (
00880 const RVC::GEOMETRIC& GeoObj,
00881 ELEMTYPE ElemType
00882 );
00883
00884 private:
00885 #ifndef GENERATING_DOXYGEN_OUTPUT
00886 SIMPLE_ARRAY<INT32> m_TransList[6];
00887 #endif // GENERATING_DOXYGEN_OUTPUT
00888 };
00889
00890
00891
00892 class GEOMETRIC::GETOBJFILTER_HASMINIMUMELEMENTS : public GETOBJFILTER {
00893 public:
00894 GETOBJFILTER_HASMINIMUMELEMENTS (
00895 const ELEMTYPESET& ElemTypeSet,
00896 INT32 MinElements = 1
00897 ) : m_ElemTypeSet(ElemTypeSet), m_MinElements(MinElements) {}
00898
00899 private:
00900 #ifndef GENERATING_DOXYGEN_OUTPUT
00901 ELEMTYPESET m_ElemTypeSet;
00902 INT32 m_MinElements;
00903
00904 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00905 #endif // GENERATING_DOXYGEN_OUTPUT
00906 };
00907
00908
00909 class GEOMETRIC::GETOBJFILTER_HASNOIMPLIEDGEOREF : public GETOBJFILTER {
00910 public:
00911 GETOBJFILTER_HASNOIMPLIEDGEOREF () {}
00912 private:
00913 #ifndef GENERATING_DOXYGEN_OUTPUT
00914 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00915 #endif // GENERATING_DOXYGEN_OUTPUT
00916 };
00917
00918
00919 class GEOMETRIC::GETOBJFILTER_ISDISPLAYABLE : public GETOBJFILTER {
00920 public:
00921 GETOBJFILTER_ISDISPLAYABLE () {}
00922 private:
00923 #ifndef GENERATING_DOXYGEN_OUTPUT
00924 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00925 #endif // GENERATING_DOXYGEN_OUTPUT
00926 };
00927
00928
00929 class GEOMETRIC::GETOBJFILTER_ISNOTEMPTY : public GETOBJFILTER {
00930 public:
00931 GETOBJFILTER_ISNOTEMPTY () {}
00932 private:
00933 #ifndef GENERATING_DOXYGEN_OUTPUT
00934 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00935 #endif // GENERATING_DOXYGEN_OUTPUT
00936 };
00937
00938
00939 class GEOMETRIC::GETOBJFILTER_ISSELECTABLE : public GETOBJFILTER {
00940 public:
00941 GETOBJFILTER_ISSELECTABLE () {}
00942 private:
00943 #ifndef GENERATING_DOXYGEN_OUTPUT
00944 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
00945 #endif // GENERATING_DOXYGEN_OUTPUT
00946 };
00947
00948
00949
00950 class GEOMETRIC::MAKEPARMSBASE {
00951 public:
00952
00953
00954 MAKEPARMSBASE (
00955 POINTTYPE PointType
00956 ) :
00957 m_PointType(PointType),
00958 m_XScale(1.0),
00959 m_YScale(1.0),
00960 m_ZScale(1.0)
00961 {}
00962
00963
00964
00965 const DRECT3D& GetExtents (
00966 ) const {return (m_Extents);}
00967
00968
00969
00970 POINTTYPE GetPointType (
00971 ) const {return (m_PointType);}
00972
00973
00974
00975 double GetXScale (
00976 ) const {return (m_XScale);}
00977
00978
00979
00980 double GetYScale (
00981 ) const {return (m_YScale);}
00982
00983
00984
00985 double GetZScale (
00986 ) const {return (m_ZScale);}
00987
00988
00989 void SetExtents (
00990 const DRECT3D& rect
00991 ) {m_Extents = rect;}
00992
00993
00994 void SetPointType (
00995 POINTTYPE PointType
00996 ) {m_PointType = PointType;}
00997
00998
00999 void SetXScale (
01000 double xscale
01001 ) {m_XScale = xscale;}
01002
01003
01004 void SetYScale (
01005 double yscale
01006 ) {m_YScale = yscale;}
01007
01008
01009 void SetZScale (
01010 double zscale
01011 ) {m_ZScale = zscale;}
01012
01013 protected:
01014
01015 DRECT3D m_Extents;
01016 POINTTYPE m_PointType;
01017 double m_XScale;
01018 double m_YScale;
01019 double m_ZScale;
01020 };
01021
01022
01023 class GEOMETRIC::OBSERVER : public RVC::OBJECTOBSERVER {
01024 public:
01025 enum TYPE {
01026 TYPE_ExtentsChange = 0x00000108,
01027 TYPE_PointTypeChange = 0x00000110
01028
01029 };
01030
01031 explicit OBSERVER (
01032 RVC::GEOMETRIC& object
01033 ) : OBJECTOBSERVER(object) {}
01034
01035 virtual ~OBSERVER (
01036 ) {}
01037
01038
01039
01040
01041
01042
01043
01044 virtual void OnExtentsChanged (
01045 const DRECT3D&
01046 ) { return; }
01047
01048
01049 virtual void OnPointTypeChanged (
01050 GEOMETRIC::POINTTYPE
01051 ) { return; }
01052
01053 private:
01054 #ifndef GENERATING_DOXYGEN_OUTPUT
01055 virtual void OnNotifyRaw (UINT32 reason, void *data);
01056 #endif // GENERATING_DOXYGEN_OUTPUT
01057 };
01058
01059
01060
01061 class GEOMETRIC::SEARCHFILTER {
01062 public:
01063
01064
01065 virtual bool Filter (
01066 const RVC::GEOMETRIC& object,
01067 ELEMTYPE ElemType,
01068 INT32 ElemNum
01069 ) = 0;
01070
01071 protected:
01072
01073 virtual ~SEARCHFILTER () {}
01074 };
01075
01076
01077
01078 class GEOMETRIC::SEARCHFILTER_BITSET : public GEOMETRIC::SEARCHFILTER {
01079 public:
01080
01081
01082 SEARCHFILTER_BITSET (
01083 const BITSET_UNOWNED& bitset
01084 ) : m_bitset(bitset) { }
01085
01086
01087 SEARCHFILTER_BITSET (
01088 const UINT8 *set,
01089 UINT32 NumEntries
01090 ) : m_bitset(const_cast<UINT8*>(set),NumEntries) { }
01091
01092
01093 virtual ~SEARCHFILTER_BITSET () {}
01094
01095 protected:
01096
01097
01098
01099 virtual bool Filter (
01100 const RVC::GEOMETRIC& object,
01101 ELEMTYPE ElemType,
01102 INT32 ElemNum
01103 );
01104
01105 private:
01106 #ifndef GENERATING_DOXYGEN_OUTPUT
01107 BITSET_UNOWNED m_bitset;
01108 #endif // GENERATING_DOXYGEN_OUTPUT
01109 };
01110
01111
01112
01113 class GEOMETRIC::SEARCHFILTER_ELEMTRANSLIST : public GEOMETRIC::SEARCHFILTER {
01114 public:
01115
01116
01117 SEARCHFILTER_ELEMTRANSLIST (
01118 const GEOMETRIC::ELEMTRANSLIST& ElemTransList
01119 ) : m_ElemTransList(ElemTransList) { }
01120
01121
01122 virtual ~SEARCHFILTER_ELEMTRANSLIST () {}
01123
01124 protected:
01125
01126
01127
01128 virtual bool Filter (
01129 const RVC::GEOMETRIC& object,
01130 ELEMTYPE ElemType,
01131 INT32 ElemNum
01132 );
01133
01134 private:
01135 #ifndef GENERATING_DOXYGEN_OUTPUT
01136 GEOMETRIC::ELEMTRANSLIST m_ElemTransList;
01137 #endif // GENERATING_DOXYGEN_OUTPUT
01138 };
01139
01140
01141 class GEOMETRIC::SEARCHRESULT {
01142 public:
01143
01144 class CONST_ITERATOR;
01145 friend class CONST_ITERATOR;
01146
01147 class CONST_ITERATOR {
01148 public:
01149
01150
01151 CONST_ITERATOR (
01152 ) :
01153 m_IsRange(false),
01154 m_CurElemNum(0),
01155 m_CurIndex(0),
01156 m_sr(0)
01157 {}
01158
01159
01160 CONST_ITERATOR (
01161 const SEARCHRESULT* sr,
01162 bool CreateEnd = false
01163 );
01164
01165
01166 CONST_ITERATOR (
01167 const CONST_ITERATOR& rhs
01168 ) :
01169 m_IsRange(rhs.m_IsRange),
01170 m_CurElemNum(rhs.m_CurElemNum),
01171 m_CurIndex(rhs.m_CurIndex),
01172 m_sr(rhs.m_sr)
01173 {}
01174
01175
01176 const INT32& operator* (
01177 ) const { return (m_CurElemNum); }
01178
01179
01180 CONST_ITERATOR& operator++ (
01181 );
01182
01183
01184 CONST_ITERATOR operator++(int
01185 ) {
01186 CONST_ITERATOR temp = *this;
01187 ++*this;
01188 return (temp);
01189 }
01190
01191 bool operator== (
01192 const CONST_ITERATOR& rhs
01193 ) const { return (m_CurElemNum == rhs.m_CurElemNum); }
01194
01195 bool operator!= (
01196 const CONST_ITERATOR& rhs
01197 ) const { return (!(*this == rhs)); }
01198
01199 private:
01200 #ifndef GENERATING_DOXYGEN_OUTPUT
01201 bool m_IsRange;
01202 INT32 m_CurElemNum;
01203 INT32 m_CurIndex;
01204 const SEARCHRESULT* m_sr;
01205 #endif // GENERATING_DOXYGEN_OUTPUT
01206 };
01207
01208 SEARCHRESULT (
01209 );
01210
01211 SEARCHRESULT (
01212 const SEARCHRESULT& rhs
01213 );
01214
01215 ~SEARCHRESULT (
01216 );
01217
01218 SEARCHRESULT& operator= (
01219 const SEARCHRESULT& rhs
01220 );
01221
01222 CONST_ITERATOR Begin (
01223 ) const {return (CONST_ITERATOR(this));}
01224
01225 void Clear (
01226 );
01227
01228 CONST_ITERATOR End (
01229 ) const {return (CONST_ITERATOR(this, true));}
01230
01231 ERRVALUE FindElements (
01232 ELEMTYPE ElemType,
01233 const DRECT2D& SearchExtents,
01234 RVC::QSEARCHTREE& QTreeObj
01235 );
01236
01237 ERRVALUE FindElements (
01238 ELEMTYPE ElemType,
01239 const DRECT2D& SearchExtents,
01240 RVC::SPATIALTREE& STreeObj
01241 );
01242
01243 ERRVALUE GetElementSet (
01244 BITSET& SelectSet
01245 ) const;
01246
01247 ERRVALUE GetElementSet (
01248 SIMPLE_ARRAY<INT32>& SelectList
01249 ) const;
01250
01251 INT32 GetNumItems (
01252 ) const;
01253
01254 bool IsEmpty (
01255 ) const;
01256
01257
01258 void SetAll (
01259 INT32 NumElements
01260 );
01261
01262
01263 void SetArray (
01264 const SIMPLE_ARRAY<INT32>& ElemSet
01265 );
01266
01267
01268 void SortItemsByExtentArea (
01269 const RVC::GEOMETRIC& GeoObj,
01270 ELEMTYPE ElemType
01271 );
01272
01273 private:
01274 #ifndef GENERATING_DOXYGEN_OUTPUT
01275 SIMPLE_ARRAY<INT32> m_list;
01276 SIMPLE_ARRAY<INT32_RANGE> m_range;
01277 #endif
01278 };
01279
01280
01281 }
01282
01283 #endif