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 #ifndef INC_RVC_DBASE_H
00181 #define INC_RVC_DBASE_H
00182
00183 #ifndef INC_RVC_OBJECT_H
00184 #include <rvc/object.h>
00185 #endif
00186
00187 #ifndef INC_MI32_ELEMTYPE_H
00188 #include <mi32/elemtype.h>
00189 #endif
00190
00191 #ifndef INC_MI32_SIMPLEAR_H
00192 #include <mi32/simplear.h>
00193 #endif
00194
00195 #ifndef INC_MI32_RVCDBASE_H
00196 #include <mi32/rvcdbase.h>
00197 #endif
00198
00199 #ifndef INC_RVC_GETOBJF_H
00200 #include <rvc/getobjf.h>
00201 #endif
00202
00203 #ifndef GENERATING_DOXYGEN_OUTPUT
00204 struct DBCALLBACKSTRUCT;
00205 struct SMLCONTEXT;
00206 #endif // GENERATING_DOXYGEN_OUTPUT
00207
00208 namespace RVC {
00209
00210 #ifndef GENERATING_DOXYGEN_OUTPUT
00211 class DBTABLE;
00212 class DBTABLE_STYLE;
00213 #endif // GENERATING_DOXYGEN_OUTPUT
00214
00215 class DBASE : public RVC::OBJECT {
00216 public:
00217 enum COPYFLAG {
00218 COPYFLAG_None = 0x00000000,
00219 COPYFLAG_TableLinks = 0x00000004,
00220 COPYFLAG_DemoteIdentityTables = 0x00000008,
00221 COPYFLAG_MinimizeTableSize = 0x00000020,
00222 COPYFLAG_DontRemoveRecords = 0x00000200,
00223 COPYFLAG_RemoveStdAttribTables = 0x00000800,
00224 COPYFLAG_IgnoreStdAttribTables = 0x00040000,
00225 COPYFLAG_CopyThemeTable = 0x01000000
00226 };
00227
00228 enum COPYTABLE {
00229 COPYTABLE_None = 0x00000000,
00230 COPYTABLE_CopyLinks = 0x00000004,
00231 COPYTABLE_RemoveStdAttTables = 0x00000800,
00232 COPYTABLE_FreezeComputedFields = 0x00080000
00233 };
00234
00235
00236 enum FINDFLAG {
00237 FINDFLAG_AllAttached = 0,
00238 FINDFLAG_NoInternal = 1,
00239 FINDFLAG_OnlyDirect = 2,
00240 FINDFLAG_FirstMatch = 8
00241 };
00242
00243 enum JOINFLAGS {
00244 JOINFLAG_None = 0x00000000,
00245 JOINFLAG_CopyThemeTable = 0x01000000,
00246 JOINFLAG_OuterRight = 0x02000000,
00247 JOINFLAG_Union = 0x04000000,
00248 JOINFLAG_Natural = 0x08000000,
00249 JOINFLAG_SameStrc = 0x10000000,
00250 JOINFLAG_SameNmSt = 0x30000000,
00251 JOINFLAG_RemoveDups = 0x40000000,
00252 JOINFLAG_Outer = 0x80000000
00253 };
00254
00255 #ifndef GENERATING_DOXYGEN_OUTPUT
00256 class BULKMODIFY;
00257 friend class BULKMODIFY;
00258 class ELEMTRANSLIST;
00259 class GETOBJFILTER_ISCAPABLE;
00260 friend class GETOBJFILTER_ISCAPABLE;
00261 class GETOBJFILTER_ISNOTEMPTY;
00262 friend class GETOBJFILTER_ISNOTEMPTY;
00263 class GETOBJFILTER_ISSELECTABLE;
00264 friend class GETOBJFILTER_ISSELECTABLE;
00265 class INVERSEDBLISTSUSPEND;
00266 class OBSERVER;
00267 class TABLEITERATOR;
00268 friend class TABLEITERATOR;
00269 class CONST_TABLEITERATOR;
00270 friend class CONST_TABLEITERATOR;
00271 #endif // GENERATING_DOXYGEN_OUTPUT
00272
00273
00274
00275
00276
00277 class CONST_TABLEITERATOR {
00278 public:
00279
00280 CONST_TABLEITERATOR (
00281 ) :
00282 m_TableNum(TABLE_InternalNode),
00283 m_CurrentObj(0)
00284 {}
00285
00286
00287 CONST_TABLEITERATOR (
00288 const RVC::DBASE* dbase,
00289 INT32 TableNum
00290 ) :
00291 m_TableNum(TableNum),
00292 m_CurrentObj(dbase)
00293 {}
00294
00295
00296 CONST_TABLEITERATOR (
00297 const TABLEITERATOR& rhs
00298 ) :
00299 m_TableNum(rhs.m_TableNum),
00300 m_CurrentObj(rhs.m_CurrentObj)
00301 {}
00302
00303
00304 CONST_TABLEITERATOR (
00305 const RVC::DBASE* dbase
00306 );
00307
00308
00309 virtual ~CONST_TABLEITERATOR (
00310 ) {}
00311
00312
00313 CONST_TABLEITERATOR& operator= (
00314 const CONST_TABLEITERATOR& rhs
00315 ) {
00316 if (this != &rhs) {
00317 m_TableNum = rhs.m_TableNum;
00318 m_CurrentObj = rhs.m_CurrentObj;
00319 }
00320 return (*this);
00321 }
00322
00323
00324 const INT32& operator* (
00325 ) const { return (m_TableNum); }
00326
00327
00328 const INT32* operator-> (
00329 ) const { return (&**this); }
00330
00331
00332 CONST_TABLEITERATOR& operator++ (
00333 );
00334
00335
00336 bool operator== (
00337 const CONST_TABLEITERATOR& rhs
00338 ) const { return (m_TableNum == rhs.m_TableNum && m_CurrentObj == rhs.m_CurrentObj); }
00339
00340
00341 bool operator!= (
00342 const CONST_TABLEITERATOR& rhs
00343 ) const { return (!(*this == rhs)); }
00344
00345 protected:
00346 INT32 m_TableNum;
00347 const DBASE *m_CurrentObj;
00348 };
00349
00350
00351
00352
00353
00354
00355 class TABLEITERATOR : public CONST_TABLEITERATOR {
00356 public:
00357
00358
00359 TABLEITERATOR (
00360 ) : CONST_TABLEITERATOR() {}
00361
00362
00363 TABLEITERATOR (
00364 CONST_TABLEITERATOR& rhs
00365 ) : CONST_TABLEITERATOR(rhs) {}
00366
00367
00368 TABLEITERATOR (
00369 const RVC::DBASE* dbase
00370 ) : CONST_TABLEITERATOR(dbase) {}
00371
00372
00373 TABLEITERATOR (
00374 const RVC::DBASE* dbase,
00375 INT32 TableNum
00376 ) : CONST_TABLEITERATOR(dbase, TableNum) {}
00377
00378
00379 const INT32& operator* (
00380 ) const { return (m_TableNum); }
00381
00382
00383 const INT32* operator-> (
00384 ) const { return (&**this); }
00385
00386
00387 TABLEITERATOR& operator++ (
00388 ) {
00389 CONST_TABLEITERATOR::operator++();
00390 return (*this);
00391 }
00392
00393
00394 bool operator== (
00395 const TABLEITERATOR& rhs
00396 ) const { return (m_TableNum == rhs.m_TableNum && m_CurrentObj == rhs.m_CurrentObj); }
00397
00398
00399 bool operator!= (
00400 const TABLEITERATOR& obj
00401 ) const { return (!(*this == obj)); }
00402 };
00403
00404
00405 DBASE (
00406 );
00407
00408
00409 DBASE (
00410 const RVC::DBASE& rhs
00411 );
00412
00413
00414 virtual ~DBASE (
00415 );
00416
00417
00418 RVC::DBASE& operator= (
00419 const RVC::DBASE& rhs
00420 );
00421
00422
00423 ERRVALUE CopyDatabaseTo (
00424 RVC::OBJECT& DestParentObj,
00425 const SIMPLE_ARRAY<INT32>& TransList,
00426 COPYFLAG flags
00427 );
00428
00429
00430 ERRVALUE CopyDatabaseTo (
00431 RVC::OBJECT& DestParentObj,
00432 RVC::DBASE& DestDBaseObj,
00433 const ELEMTRANSLIST& TransList,
00434 COPYFLAG flags
00435 );
00436
00437
00438
00439 INT32 CopyTableTo (
00440 INT32 SrcTableNum,
00441 RVC::DBASE& DestDBase,
00442 COPYTABLE flags
00443 ) const;
00444
00445
00446 ERRVALUE CreateSMLContext (
00447 SMLCONTEXT **pcontext
00448 );
00449
00450
00451
00452 ERRVALUE FindTableMatches (
00453 const RVC::DBASE& rhs,
00454 SIMPLE_ARRAY<INT32>& TableMatch
00455 ) const;
00456
00457
00458 ERRVALUE Flush (
00459 );
00460
00461
00462
00463 ERRVALUE GetKeyFieldNames (
00464 SIMPLE_ARRAY<RVC::OBJECTNAME>& FieldNames
00465 ) const;
00466
00467
00468
00469 INT32 GetNumTables (
00470 ) const;
00471
00472
00473
00474 static RVC::OBJTYPESET GetObjTypeSet (
00475 );
00476
00477
00478 ERRVALUE InverseDBListBuild (
00479 );
00480
00481
00482 void InverseDBListResume (
00483 );
00484
00485
00486 void InverseDBListSuspend (
00487 );
00488
00489
00490 ERRVALUE JoinDatabaseTo (
00491 RVC::DBASE& DestDBaseObj,
00492 const SIMPLE_ARRAY<INT32>& TransList,
00493 COPYFLAG CopyFlags,
00494 JOINFLAGS JoinFlags
00495 );
00496
00497
00498 ERRVALUE JoinDatabaseTo (
00499 RVC::DBASE& DestDBaseObj,
00500 const ELEMTRANSLIST& TransList,
00501 COPYFLAG CopyFlags,
00502 JOINFLAGS JoinFlags
00503 );
00504
00505
00506 ERRVALUE Make (
00507 const RVC::OBJECT& parent,
00508 const RVC::OBJECTNAME& name,
00509 const RVC::OBJECTDESC& desc,
00510 const char* Source = 0
00511 );
00512
00513
00514 ERRVALUE Make (
00515 const RVC::OBJITEM& ObjItem,
00516 const char* Source = 0
00517 );
00518
00519
00520 ERRVALUE RemoveDuplicateRecords (
00521 );
00522
00523
00524 ERRVALUE RemoveUnattachedRecords (
00525 );
00526
00527
00528 CONST_TABLEITERATOR TableBegin (
00529 ) const {
00530 m_NumTables = (IsOpen()) ? GetNumTables() : 0;
00531 return (CONST_TABLEITERATOR(this));
00532 }
00533
00534
00535 TABLEITERATOR TableBegin (
00536 ) {
00537 m_NumTables = (IsOpen()) ? GetNumTables() : 0;
00538 return (TABLEITERATOR(this));
00539 }
00540
00541
00542 CONST_TABLEITERATOR TableEnd (
00543 ) const { return (CONST_TABLEITERATOR(this, m_NumTables)); }
00544
00545
00546 TABLEITERATOR TableEnd (
00547 ) { return (TABLEITERATOR(this, m_NumTables)); }
00548
00549
00550 ERRVALUE Validate (
00551 MISTRING& LogString
00552 );
00553
00554
00555 ERRVALUE ValidateTableName (
00556 RVC::OBJECTNAME& name,
00557 SIMPLE_ARRAY<RVC::OBJECTNAME>& finfo
00558 ) const;
00559
00560 protected:
00561
00562 #ifndef GENERATING_DOXYGEN_OUTPUT
00563 INT32 AppendDBList (
00564 ELEMTYPE ElemType,
00565 INT32 ElemNum,
00566 const SIMPLE_ARRAY<DBLISTELMT>& DBList
00567 );
00568
00569 INT32 AppendDBList (
00570 ELEMTYPE ElemType,
00571 INT32 ElemNum,
00572 const DBLISTELMT& item
00573 );
00574
00575 ERRVALUE CleanDBList (
00576 ELEMTYPE ElemType
00577 );
00578
00579
00580 ERRVALUE GetAttachedRecordList (
00581 ELEMTYPE ElemType,
00582 INT32 ElemNum,
00583 SIMPLE_ARRAY<DBLISTELMT>& dblist,
00584 FINDFLAG FindFlag = FINDFLAG_AllAttached,
00585 INT32 BaseTableNum = -1
00586 ) const;
00587
00588 INT32 GetDBListItemSize (
00589 ELEMTYPE ElemType,
00590 INT32 ElemNum,
00591 bool ExcludeInternal = false
00592 ) const;
00593
00594 INT32 GetDBListMaxItemSize (
00595 ELEMTYPE ElemType
00596 ) const;
00597
00598 INT32 GetDBListNumElements (
00599 ELEMTYPE ElemType
00600 ) const;
00601
00602 bool IsNodeAPoint (
00603 INT32 NodeNum,
00604 SIMPLE_ARRAY<DBLISTELMT>& DBList
00605 ) const;
00606
00607
00608 ERRVALUE OpenAsSubobject (
00609 const OBJECT& parent,
00610 OPENMODE mode = OPENMODE_Read,
00611 MDLGPARENT widget = 0
00612 );
00613
00614 INT32 ReadDBList (
00615 ELEMTYPE ElemType,
00616 INT32 ElemNum,
00617 SIMPLE_ARRAY<DBLISTELMT>& DBList
00618 ) const;
00619
00620 ERRVALUE ResizeDBList (
00621 ELEMTYPE ElemType,
00622 INT32 NumItems
00623 );
00624
00625 ERRVALUE ResizeDBListItem (
00626 ELEMTYPE ElemType,
00627 INT32 ElemNum,
00628 INT32 NumItems
00629 );
00630
00631 ERRVALUE SwapDBList (
00632 ELEMTYPE ElemType,
00633 INT32 Item1,
00634 INT32 Item2
00635 );
00636
00637 INT32 WriteDBList (
00638 ELEMTYPE ElemType,
00639 INT32 ElemNum,
00640 const SIMPLE_ARRAY<DBLISTELMT>& DBList
00641 );
00642
00643 INT32 UnattachDBList (
00644 ELEMTYPE ElemType,
00645 INT32 ElemNum,
00646 const SIMPLE_ARRAY<DBLISTELMT>& DBList
00647 );
00648
00649 ERRVALUE UpdateDBListNumElements (
00650 ELEMTYPE ElemType,
00651 INT32 NumElements
00652 );
00653
00654 int m_DBaseID;
00655
00656 #endif // GENERATING_DOXYGEN_OUTPUT
00657 private:
00658 #ifndef GENERATING_DOXYGEN_OUTPUT
00659
00660 mutable INT32 m_NumTables;
00661
00662
00663 virtual ERRVALUE v_CloseObject ();
00664 virtual OBJTYPE v_GetDftObjectType () const;
00665 virtual bool v_IsMultiObject () const;
00666 virtual bool v_IsObjectOpen () const;
00667 virtual ERRVALUE v_OpenObject (OPENMODE OpenFlags, MDLGPARENT parent);
00668 virtual bool v_ValidateObjectType (const OBJTYPE otype) const;
00669
00670 INT32 FindTable (const OBJECTNAME& name) const;
00671
00672 static void DatabaseCallbackFunc (DBCALLBACKSTRUCT *cb, void *data);
00673
00674 friend class DBTABLE;
00675 friend class DBTABLE_STYLE;
00676 #endif
00677 };
00678
00679 DEFINE_ENUM_OPERATORS(DBASE::COPYFLAG);
00680 DEFINE_ENUM_OPERATORS(DBASE::COPYTABLE);
00681 DEFINE_ENUM_OPERATORS(DBASE::FINDFLAG);
00682 DEFINE_ENUM_OPERATORS(DBASE::JOINFLAGS);
00683
00684 class DBASE::BULKMODIFY {
00685 public:
00686 BULKMODIFY (
00687 RVC::DBASE& dbase
00688 ) : m_dbase(dbase) {
00689 MfDatabaseBulkModifyBegin(dbase.m_DBaseID);
00690 }
00691
00692 ~BULKMODIFY (
00693 ) {
00694 MfDatabaseBulkModifyEnd(m_dbase.m_DBaseID);
00695 }
00696
00697 private:
00698 #ifndef GENERATING_DOXYGEN_OUTPUT
00699 RVC::DBASE& m_dbase;
00700 #endif // GENERATING_DOXYGEN_OUTPUT
00701 };
00702
00703
00704
00705 class DBASE::ELEMTRANSLIST {
00706 public:
00707
00708 ELEMTRANSLIST (
00709 );
00710
00711
00712 ELEMTRANSLIST (
00713 const ELEMTRANSLIST& rhs
00714 ) {Copy(rhs);}
00715
00716
00717 ~ELEMTRANSLIST (
00718 );
00719
00720
00721 ELEMTRANSLIST& operator= (
00722 const ELEMTRANSLIST& rhs
00723 ) {
00724 if (this != &rhs) Copy(rhs);
00725 return (*this);
00726 }
00727
00728
00729 operator const DBELEMTRANSLIST* (
00730 ) const {return (m_TransList);}
00731
00732
00733 ERRVALUE AddElement (
00734 INT32 SourceNum,
00735 INT32 DestNum
00736 );
00737
00738
00739
00740 INT32 GetNumItems (
00741 ) const {return (m_TransList.GetNumItems());}
00742
00743
00744 ERRVALUE Initialize (
00745 INT32 NumItems
00746 );
00747
00748
00749 ERRVALUE Resize (
00750 INT32 NumItems
00751 );
00752
00753 private:
00754 #ifndef GENERATING_DOXYGEN_OUTPUT
00755 SIMPLE_ARRAY<DBELEMTRANSLIST> m_TransList;
00756
00757 void Copy (const ELEMTRANSLIST& rhs);
00758 #endif // GENERATING_DOXYGEN_OUTPUT
00759 };
00760
00761
00762
00763 class DBASE::GETOBJFILTER_ISCAPABLE : public RVC::GETOBJFILTER, private RVC::OBJECT::FILTER {
00764 public:
00765 GETOBJFILTER_ISCAPABLE () {}
00766 private:
00767 #ifndef GENERATING_DOXYGEN_OUTPUT
00768 virtual bool Filter (const RVC::OBJECT& Object);
00769 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00770 #endif // GENERATING_DOXYGEN_OUTPUT
00771 };
00772
00773
00774
00775 class DBASE::GETOBJFILTER_ISNOTEMPTY : public RVC::GETOBJFILTER, private RVC::OBJECT::FILTER {
00776 public:
00777 GETOBJFILTER_ISNOTEMPTY () {}
00778 private:
00779 #ifndef GENERATING_DOXYGEN_OUTPUT
00780 virtual bool Filter (const RVC::OBJECT& Object);
00781 virtual bool v_HasSelectableSubObjects (const RVC::OBJITEM& objitem);
00782 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00783 #endif // GENERATING_DOXYGEN_OUTPUT
00784 };
00785
00786
00787
00788 class DBASE::GETOBJFILTER_ISSELECTABLE : public RVC::GETOBJFILTER, private RVC::OBJECT::FILTER {
00789 public:
00790 GETOBJFILTER_ISSELECTABLE () {}
00791 private:
00792 #ifndef GENERATING_DOXYGEN_OUTPUT
00793 virtual bool Filter (const RVC::OBJECT& Object);
00794 virtual bool v_HasSelectableSubObjects (const RVC::OBJITEM& objitem);
00795 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position);
00796 #endif // GENERATING_DOXYGEN_OUTPUT
00797 };
00798
00799
00800
00801 class DBASE::INVERSEDBLISTSUSPEND {
00802 public:
00803
00804 INVERSEDBLISTSUSPEND (
00805 RVC::DBASE& DBase,
00806 bool Rebuild = false,
00807 bool Condition = true
00808 ) :
00809 m_DBase(DBase),
00810 m_Rebuild(Rebuild),
00811 m_Condition(Condition)
00812 {
00813 if (m_DBase.IsOpen() && Condition) m_DBase.InverseDBListSuspend();
00814 }
00815
00816 ~INVERSEDBLISTSUSPEND (
00817 ) {
00818 if (m_DBase.IsOpen() && m_Condition) {
00819 m_DBase.InverseDBListResume();
00820 if (m_Rebuild) m_DBase.InverseDBListBuild();
00821 }
00822 }
00823
00824 private:
00825 #ifndef GENERATING_DOXYGEN_OUTPUT
00826 DBASE& m_DBase;
00827 bool m_Rebuild;
00828 bool m_Condition;
00829 #endif // GENERATING_DOXYGEN_OUTPUT
00830 };
00831
00832
00833
00834 class DBASE::OBSERVER : public OBJECTOBSERVER {
00835 public:
00836
00837
00838 enum STRUCTCHANGE {
00839 STRUCTCHANGE_Name = 0x00000001,
00840 STRUCTCHANGE_Desc = 0x00000002,
00841 STRUCTCHANGE_ViewMode = 0x00000004,
00842 STRUCTCHANGE_Field = 0x00000008,
00843 STRUCTCHANGE_FieldsAdded = 0x00000010,
00844 STRUCTCHANGE_Flags = 0x00000020,
00845 STRUCTCHANGE_AttachmentType = 0x00000040,
00846 STRUCTCHANGE_Encoding = 0x00000080,
00847 STRUCTCHANGE_DBEditorUpdate = 0x00000100,
00848 STRUCTCHANGE_DBEditorRebuild = 0x00000200
00849 };
00850
00851
00852 explicit OBSERVER (
00853 RVC::DBASE& dbase
00854 ) : OBJECTOBSERVER(dbase) {}
00855
00856
00857 virtual ~OBSERVER (
00858 ) {}
00859
00860
00861 virtual void OnAnyChange (
00862 ) { return; }
00863
00864
00865 virtual void OnDBListAdd (
00866 ELEMTYPE ElemType,
00867 INT32 ElemNum
00868 ) { return; }
00869
00870
00871 virtual void OnDBListChanged (
00872 ELEMTYPE ElemType,
00873 INT32 ElemNum
00874 ) { return; }
00875
00876
00877 virtual void OnStructChanged (
00878 INT32 TableNum,
00879 STRUCTCHANGE SubReason
00880 ) { return; }
00881
00882
00883 virtual void OnTableAdd (
00884 INT32 TableNum
00885 ) { return; }
00886
00887
00888 virtual void OnTableDropBegin (
00889 INT32 TableNum
00890 ) { return; }
00891
00892
00893 virtual void OnTableDropEnd (
00894 INT32 TableNum
00895 ) { return; }
00896
00897 private:
00898 #ifndef GENERATING_DOXYGEN_OUTPUT
00899 virtual void OnNotifyRaw (UINT32 reason, void *data);
00900 #endif // GENERATING_DOXYGEN_OUTPUT
00901 };
00902
00903
00904 class DBELEMTYPEFILTER : public OBJECT::FILTER {
00905 public:
00906
00907 DBELEMTYPEFILTER (
00908 ELEMTYPE ElemType
00909 ) :
00910 m_ObjType(RVC::OBJTYPE_Database)
00911 {
00912 switch (ElemType) {
00913 case ELEMTYPE_Node: m_ObjType = OBJTYPE_All; break;
00914 case ELEMTYPE_Line: m_ObjType = OBJTYPE_Database_VectorLine; break;
00915 case ELEMTYPE_Point: m_ObjType = OBJTYPE_Database_VectorPoint; break;
00916 case ELEMTYPE_Polygon: m_ObjType = OBJTYPE_Database_VectorPolygon; break;
00917 case ELEMTYPE_Edge:
00918 case ELEMTYPE_Triangle: m_ObjType = OBJTYPE_Database_TIN; break;
00919 case ELEMTYPE_CAD: m_ObjType = OBJTYPE_Database_CAD; break;
00920 case ELEMTYPE_RasterCellValue: m_ObjType = OBJTYPE_Database_Raster; break;
00921 case ELEMTYPE_All: m_ObjType = OBJTYPE_Database_Shape; break;
00922 case ELEMTYPE_Label: m_ObjType = OBJTYPE_LAST; break;
00923 }
00924 }
00925
00926 virtual bool Filter (
00927 const RVC::OBJECT& object
00928 ) {
00929 if (m_ObjType == OBJTYPE_All) {
00930 OBJECT parent;
00931 if (object.GetParent(parent) < 0) return (false);
00932 m_ObjType = (parent.GetObjectType() == OBJTYPE_Vector) ? OBJTYPE_Database_VectorPoint : OBJTYPE_Database_TIN;
00933 }
00934 return (object.GetObjectType() == m_ObjType);
00935 }
00936
00937 private:
00938 #ifndef GENERATING_DOXYGEN_OUTPUT
00939 OBJTYPE m_ObjType;
00940 #endif // GENERATING_DOXYGEN_OUTPUT
00941 };
00942
00943 }
00944
00945 #endif