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
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345 #ifndef INC_RVC_VECTOR_H
00346 #define INC_RVC_VECTOR_H
00347
00348 #ifndef INC_RVC_GEOMETRC_H
00349 #include <rvc/geometrc.h>
00350 #endif
00351
00352 #ifndef INC_MI32_RVCVECT_H
00353 #include <mi32/rvcvect.h>
00354 #endif
00355
00356 #ifndef INC_MI32_SIMPLEAR_H
00357 #include <mi32/simplear.h>
00358 #endif
00359
00360 #ifndef INC_MI32_DOUBLEAR_H
00361 #include <mi32/doublear.h>
00362 #endif
00363
00364 #ifndef INC_MI32_POLYLINE_H
00365 #include <mi32/polyline.h>
00366 #endif
00367
00368 #ifndef INC_MI32_MILIST_H
00369 #include <mi32/milist.h>
00370 #endif
00371
00372
00373 class BITSET_UNOWNED;
00374 class REGION2D;
00375 class SUBREGION2D;
00376 class TRANS2D_MAPGEN;
00377
00378 namespace RVC {
00379
00380
00381 class SPATIALTREE;
00382 class STYLE;
00383 class VECTORHANDLE;
00384 class DBASE_ELEMENT;
00385
00386 class VECTOR : public GEOMETRIC {
00387 public:
00388
00389 enum FLAGS {
00390 FLAG_None = 0,
00391 FLAG_NoStdAttribTables = 0x0001,
00392 FLAG_NoElementIDTables = 0x0002,
00393 FLAG_CannotReduceExtents = 0x0004,
00394 FLAG_CannotExpandExtents = 0x0008
00395 };
00396
00397 enum TOPOLOGYTYPE {
00398 TOPOLOGYTYPE_Polygonal = 0,
00399 TOPOLOGYTYPE_Planar,
00400 TOPOLOGYTYPE_Network,
00401 TOPOLOGYTYPE_None
00402 };
00403
00404 enum SUBTYPE {
00405 SUBTYPE_2DPolygonal = 0,
00406 SUBTYPE_2DPlanar,
00407 SUBTYPE_2DNetwork,
00408 SUBTYPE_3DPolygonal,
00409 SUBTYPE_3DPlanar,
00410 SUBTYPE_3DNetwork,
00411 SUBTYPE_3DNone
00412 };
00413
00414 #ifndef GENERATING_DOXYGEN_OUTPUT
00415 class CONGLOMERATELINEFILTER;
00416 class GETOBJFILTER_HASGEOMETRICELEMENTS;
00417 class GETOBJFILTER_HASLABELS;
00418 class GETOBJFILTER_HASLINES;
00419 class GETOBJFILTER_HASPOINTS;
00420 class GETOBJFILTER_HASPOLYGONS;
00421 class LABEL;
00422 class MAKEPARMS;
00423 #endif // GENERATING_DOXYGEN_OUTPUT
00424
00425
00426
00427
00428
00429 template <class _ELEM>
00430 class ELEMITERATOR {
00431 public:
00432
00433
00434 ELEMITERATOR (
00435 ) :
00436 m_ElemNum(-1),
00437 m_CurrentObj(0)
00438 {}
00439
00440
00441 ELEMITERATOR (
00442 int WorthlessValue
00443 ) :
00444 m_ElemNum(-1),
00445 m_CurrentObj(0)
00446 {}
00447
00448
00449 ELEMITERATOR (
00450 const RVC::VECTOR* vector,
00451 INT32 ElemNum
00452 ) :
00453 m_ElemNum(ElemNum),
00454 m_CurrentObj(vector)
00455 {}
00456
00457
00458 ELEMITERATOR (
00459 const ELEMITERATOR<_ELEM>& rhs
00460 ) :
00461 m_ElemNum(rhs.m_ElemNum),
00462 m_CurrentObj(rhs.m_CurrentObj),
00463 m_Element(rhs.m_Element)
00464 {}
00465
00466
00467 ELEMITERATOR (
00468 const RVC::VECTOR* vector
00469 ) :
00470 m_ElemNum(-1),
00471 m_CurrentObj(vector)
00472 {
00473 ERRVALUE err = 0;
00474 do {
00475 m_ElemNum ++;
00476 ERRORPOSNDISABLE disable;
00477 err = m_CurrentObj->Read(m_ElemNum, m_Element);
00478 if (err < 0) m_ElemNum = -1;
00479 } while (err >= 0 && !m_Element.IsValid());
00480 }
00481
00482
00483 virtual ~ELEMITERATOR (
00484 ) {}
00485
00486
00487 ELEMITERATOR<_ELEM>& operator= (
00488 const ELEMITERATOR<_ELEM>& rhs
00489 ) {
00490 if (this != &rhs) {
00491 m_ElemNum = rhs.m_ElemNum;
00492 m_CurrentObj = rhs.m_CurrentObj;
00493 m_Element = rhs.m_Element;
00494 }
00495 return (*this);
00496 }
00497
00498
00499 const _ELEM& operator* (
00500 ) const { return (m_Element); }
00501
00502
00503 const _ELEM* operator-> (
00504 ) const { return (&**this); }
00505
00506
00507 ELEMITERATOR<_ELEM>& operator++ (
00508 ) {
00509 ERRVALUE err = 0;
00510 do {
00511 m_ElemNum ++;
00512 ERRORPOSNDISABLE disable;
00513 err = m_CurrentObj->Read(m_ElemNum, m_Element);
00514 if (err < 0) m_ElemNum = -1;
00515 } while (err >= 0 && !m_Element.IsValid());
00516 return (*this);
00517 }
00518
00519
00520 ELEMITERATOR<_ELEM>& operator-- (
00521 ) {
00522 if (m_ElemNum < 0) return (*this);
00523 ERRVALUE err = 0;
00524 do {
00525 m_ElemNum --;
00526 ERRORPOSNDISABLE disable;
00527 err = m_CurrentObj->Read(m_ElemNum, m_Element);
00528 if (err < 0) m_ElemNum = -1;
00529 } while (err >= 0 && !m_Element.IsValid());
00530 return (*this);
00531 }
00532
00533
00534 bool operator== (
00535 const ELEMITERATOR<_ELEM>& rhs
00536 ) const { return (m_ElemNum == rhs.m_ElemNum && m_CurrentObj == rhs.m_CurrentObj); }
00537
00538
00539 bool operator!= (
00540 const ELEMITERATOR<_ELEM>& rhs
00541 ) const { return (!(*this == rhs)); }
00542
00543 INT32 GetElementNumber (
00544 ) const { return (m_ElemNum); }
00545
00546 protected:
00547 INT32 m_ElemNum;
00548 const VECTOR *m_CurrentObj;
00549 _ELEM m_Element;
00550 };
00551
00552 typedef ELEMITERATOR<LABEL> LABELITERATOR;
00553 typedef ELEMITERATOR<RVCVECTLINE> LINEITERATOR;
00554 typedef ELEMITERATOR<RVCVECTNODE> NODEITERATOR;
00555 typedef ELEMITERATOR<RVCVECTPOINT> POINTITERATOR;
00556 typedef ELEMITERATOR<RVCVECTPOLY> POLYGONITERATOR;
00557
00558
00559 VECTOR (
00560 );
00561
00562
00563 VECTOR (
00564 const RVC::VECTOR& rhs
00565 );
00566
00567
00568 virtual ~VECTOR (
00569 );
00570
00571
00572 RVC::VECTOR& operator= (
00573 const RVC::VECTOR& rhs
00574 );
00575
00576
00577
00578 INT32 Add (
00579 LABEL& label
00580 );
00581
00582
00583
00584 INT32 Add (
00585 const RVCVECTLINE& line
00586 );
00587
00588
00589
00590 INT32 Add (
00591 const RVCVECTNODE& node
00592 );
00593
00594
00595
00596 INT32 Add (
00597 const RVCVECTPOINT& point
00598 );
00599
00600
00601
00602 INT32 Add (
00603 const RVCVECTPOLY& polygon
00604 );
00605
00606
00607
00608
00609
00610 INT32 AddLine (
00611 const POLYLINE& PolyLine
00612 );
00613
00614
00615
00616
00617
00618
00619
00620 INT32 AddPolygon (
00621 const POLYLINE& Polygon
00622 );
00623
00624
00625 ERRVALUE DeleteElement (
00626 ELEMTYPE ElemType,
00627 INT32 ElemNum
00628 );
00629
00630
00631 template <class _ELEM> ELEMITERATOR<_ELEM> ElementBegin (
00632 ELEMITERATOR<_ELEM> item
00633 ) const {
00634 return (ELEMITERATOR<_ELEM>(this));
00635 }
00636
00637
00638 template <class _ELEM> ELEMITERATOR<_ELEM> ElementEnd (
00639 ELEMITERATOR<_ELEM> item
00640 ) const {
00641 return (ELEMITERATOR<_ELEM>(this, -1));
00642 }
00643
00644
00645
00646 ERRVALUE FindLabelStyleObject (
00647 RVC::STYLE& StyleObj
00648 ) const;
00649
00650
00651 ERRVALUE GenerateIsleShellList (
00652 INT32 ParentPolygon,
00653 ORIENTATION orient,
00654 SIMPLE_ARRAY<INT32>& NumShellLines,
00655 SIMPLE_ARRAY<INT32>& ShellList,
00656 SIMPLE_ARRAY<DRECT2D>* RectList = 0
00657 ) const;
00658
00659
00660 ERRVALUE GeneratePointInPolygon (
00661 INT32 PolyNum,
00662 DPOINT2D& PointInPoly
00663 ) const;
00664
00665
00666
00667 RVC::VECTOR::FLAGS GetFlags (
00668 ) const;
00669
00670
00671 ERRVALUE GetLabelStyleInfo (
00672 FILEPATH& filepath,
00673 RVC::OBJECTNAME& StyleName
00674 ) const;
00675
00676
00677 ERRVALUE GetMakeParms (
00678 RVC::VECTOR::MAKEPARMS& MakeParms
00679 ) const;
00680
00681
00682
00683 INT32 GetMaxIslands (
00684 ) const;
00685
00686
00687
00688 INT32 GetMaxLabelStringLength (
00689 ) const;
00690
00691
00692
00693 INT32 GetMaxLines (
00694 ) const;
00695
00696
00697
00698 INT32 GetMaxPoints (
00699 ) const;
00700
00701
00702
00703 INT32 GetNextLineID (
00704 ) const;
00705
00706
00707
00708 INT32 GetNextPointID (
00709 ) const;
00710
00711
00712
00713 INT32 GetNextPolygonID (
00714 ) const;
00715
00716
00717
00718 INT32 GetNumLabels (
00719 ) const;
00720
00721
00722
00723 INT32 GetNumLinePoints (
00724 INT32 LineNum
00725 ) const;
00726
00727
00728
00729 INT32 GetNumLines (
00730 ) const;
00731
00732
00733
00734 INT32 GetNumNodeLines (
00735 INT32 NodeNum
00736 ) const;
00737
00738
00739
00740 INT32 GetNumNodes (
00741 ) const;
00742
00743
00744
00745 INT32 GetNumPoints (
00746 ) const;
00747
00748
00749
00750 INT32 GetNumPolygons (
00751 ) const;
00752
00753
00754
00755 INT32 GetNumPolyIslands (
00756 INT32 PolyNum
00757 ) const;
00758
00759
00760
00761 INT32 GetNumPolyLines (
00762 INT32 PolyNum
00763 ) const;
00764
00765
00766
00767 SUBTYPE GetSubType (
00768 ) const;
00769
00770
00771
00772 TOPOLOGYTYPE GetTopologyType (
00773 ) const;
00774
00775
00776
00777 INT32 GetVertexLimit (
00778 ) const;
00779
00780
00781 bool IsElementIDTablesValid (
00782 ) const;
00783
00784
00785
00786
00787 bool IsEquivalentTo (
00788 const VECTOR& rhs,
00789 double threshold
00790 ) const;
00791
00792
00793 bool IsPointInPolygon (
00794 INT32 PolyNum,
00795 const DPOINT2D& point
00796 ) const;
00797
00798
00799 bool IsStdAttribTablesValid (
00800 ) const;
00801
00802
00803 ERRVALUE Make (
00804 const RVC::OBJECT& parent,
00805 const RVC::OBJECTNAME& name,
00806 const RVC::OBJECTDESC& desc,
00807 const MAKEPARMS& MakeParms,
00808 const char* Source = 0
00809 );
00810
00811
00812 ERRVALUE Make (
00813 const RVC::OBJITEM& ObjItem,
00814 const MAKEPARMS& MakeParms,
00815 const char* Source = 0
00816 );
00817
00818
00819 ERRVALUE OptimizeTo (
00820 RVC::OBJECT& DestParentObj,
00821 RVC::VECTOR& DestVectObj
00822 );
00823
00824
00825 ERRVALUE Read (
00826 INT32 LabelNum,
00827 LABEL& vlabel
00828 ) const;
00829
00830
00831 ERRVALUE Read (
00832 INT32 LineNum,
00833 RVCVECTLINE& vline
00834 ) const;
00835
00836
00837 ERRVALUE Read (
00838 INT32 NodeNum,
00839 RVCVECTNODE& vnode
00840 ) const;
00841
00842
00843 ERRVALUE Read (
00844 INT32 PointNum,
00845 RVCVECTPOINT& vpoint
00846 ) const;
00847
00848
00849 ERRVALUE Read (
00850 INT32 PolyNum,
00851 RVCVECTPOLY& vpoly
00852 ) const;
00853
00854 ERRVALUE ReadConglomerateLinePoints (
00855 INT32 StartLineNum,
00856 POLYLINE& ConglomerateLine,
00857 CONGLOMERATELINEFILTER& filter
00858 ) const;
00859
00860
00861 ERRVALUE ReadLinePoint (
00862 INT32 LineNum,
00863 INT32 PointNum,
00864 DPOINT3D& point
00865 ) const;
00866
00867
00868
00869
00870 INT32 ReadLinePoints (
00871 INT32 LineNum,
00872 POLYLINE& LinePoints
00873 ) const;
00874
00875
00876
00877
00878 INT32 ReadLinePoints (
00879 INT32 LineNum,
00880 POLYLINE& LinePoints,
00881 DIMENSION dimension
00882 ) const;
00883
00884
00885
00886 INT32 ReadLinePoints (
00887 INT32 LineNum,
00888 INT32 Start,
00889 INT32 Length,
00890 POLYLINE& LinePoints
00891 ) const;
00892
00893
00894
00895
00896 INT32 ReadLinePoints (
00897 INT32 LineNum,
00898 INT32 Start,
00899 INT32 Length,
00900 POLYLINE& LinePoints,
00901 DIMENSION dimension
00902 ) const;
00903
00904
00905
00906 INT32 ReadLinePoints (
00907 INT32 LineNum,
00908 INT32 Start,
00909 INT32 Length,
00910 DPOINT2D *pts
00911 ) const;
00912
00913
00914
00915
00916 INT32 ReadLinePoints (
00917 INT32 LineNum,
00918 INT32 Start,
00919 INT32 Length,
00920 DPOINT3D *pts
00921 ) const;
00922
00923
00924 ERRVALUE ReadNodeLines (
00925 INT32 NodeNum,
00926 SIMPLE_ARRAY<INT32>& LineList
00927 ) const;
00928
00929
00930 ERRVALUE ReadNodeLines (
00931 INT32 NodeNum,
00932 INT32 Start,
00933 INT32 Length,
00934 SIMPLE_ARRAY<INT32>& LineList
00935 ) const;
00936
00937
00938 ERRVALUE ReadPolyLines (
00939 INT32 PolyNum,
00940 SIMPLE_ARRAY<INT32>& LineList
00941 ) const;
00942
00943
00944 ERRVALUE ReadPolyLines (
00945 INT32 PolyNum,
00946 INT32 Start,
00947 INT32 Length,
00948 SIMPLE_ARRAY<INT32>& LineList
00949 ) const;
00950
00951
00952 ERRVALUE ReadPolyIslands (
00953 INT32 PolyNum,
00954 SIMPLE_ARRAY<INT32>& IsleList
00955 ) const;
00956
00957
00958 ERRVALUE ReadPolyIslands (
00959 INT32 PolyNum,
00960 INT32 Start,
00961 INT32 Length,
00962 SIMPLE_ARRAY<INT32>& IsleList
00963 ) const;
00964
00965
00966
00967
00968 ERRVALUE ReadPolyPoints (
00969 INT32 PolyNum,
00970 POLYLINE& LinePoints,
00971 DIMENSION dimension
00972 ) const;
00973
00974
00975 ERRVALUE ReadRegion (
00976 const BITSET_UNOWNED& PolySet,
00977 REGION2D& Region,
00978 DIMENSION dim,
00979 BITSET* LineSet = 0,
00980 bool NoIslands = false
00981 ) const;
00982
00983
00984 ERRVALUE ReadRegion (
00985 const BITSET_UNOWNED& PolySet,
00986 REGION2D& Region,
00987 BITSET* LineSet = 0,
00988 bool NoIslands = false
00989 ) const;
00990
00991
00992 ERRVALUE ReadSubRegion (
00993 INT32 PolyNum,
00994 SUBREGION2D& SubRegion,
00995 DIMENSION dim,
00996 bool NoIslands = false
00997 ) const;
00998
00999
01000 ERRVALUE ReadSubRegion (
01001 INT32 PolyNum,
01002 SUBREGION2D& SubRegion,
01003 bool NoIslands = false
01004 ) const;
01005
01006
01007 ERRVALUE SetFlags (
01008 RVC::VECTOR::FLAGS flags
01009 );
01010
01011
01012 ERRVALUE SetLabelStyleInfo (
01013 const FILEPATH& filepath,
01014 const RVC::OBJECTNAME& StyleName
01015 );
01016
01017
01018 ERRVALUE SetNextLineID (
01019 INT32 NewValue
01020 );
01021
01022
01023 ERRVALUE SetNextPointID (
01024 INT32 NewValue
01025 );
01026
01027
01028 ERRVALUE SetNextPolygonID (
01029 INT32 NewValue
01030 );
01031
01032
01033 ERRVALUE SetPointType (
01034 POINTTYPE PointType
01035 );
01036
01037
01038 ERRVALUE SetTopologyType (
01039 TOPOLOGYTYPE TopologyType
01040 );
01041
01042
01043 ERRVALUE SetVertexLimit (
01044 INT32 MaxVertices
01045 );
01046
01047
01048
01049 ERRVALUE Write (
01050 INT32 LabelNum,
01051 LABEL& vlabel
01052 );
01053
01054
01055
01056 ERRVALUE Write (
01057 INT32 LineNum,
01058 const RVCVECTLINE& vline
01059 );
01060
01061
01062
01063 ERRVALUE Write (
01064 INT32 NodeNum,
01065 const RVCVECTNODE& vnode
01066 );
01067
01068
01069
01070 ERRVALUE Write (
01071 INT32 PointNum,
01072 const RVCVECTPOINT& vpoint
01073 );
01074
01075
01076
01077 ERRVALUE Write (
01078 INT32 PolyNum,
01079 const RVCVECTPOLY& vpoly
01080 );
01081
01082
01083
01084 ERRVALUE WriteLinePoint (
01085 INT32 LineNum,
01086 INT32 vertex,
01087 const DPOINT3D& point
01088 );
01089
01090
01091
01092
01093 INT32 WriteLinePoints (
01094 INT32 LineNum,
01095 const POLYLINE& PointList
01096 );
01097
01098
01099
01100
01101 INT32 WriteLinePoints (
01102 INT32 LineNum,
01103 INT32 Start,
01104 INT32 Length,
01105 const POLYLINE& PointList
01106 );
01107
01108
01109
01110
01111 INT32 WriteNodeLines (
01112 INT32 NodeNum,
01113 const SIMPLE_ARRAY<INT32>& LineList
01114 );
01115
01116
01117
01118
01119 INT32 WriteNodeLines (
01120 INT32 NodeNum,
01121 INT32 NumLines,
01122 INT32 Start,
01123 INT32 Length,
01124 const SIMPLE_ARRAY<INT32>& LineList
01125 );
01126
01127
01128
01129
01130 INT32 WritePolyLines (
01131 INT32 PolyNum,
01132 const SIMPLE_ARRAY<INT32>& LineList
01133 );
01134
01135
01136
01137
01138 INT32 WritePolyLines (
01139 INT32 PolyNum,
01140 INT32 NumLines,
01141 INT32 Start,
01142 INT32 Length,
01143 const SIMPLE_ARRAY<INT32>& LineList
01144 );
01145
01146
01147
01148
01149 INT32 WritePolyIslands (
01150 INT32 PolyNum,
01151 const SIMPLE_ARRAY<INT32>& IsleList
01152 );
01153
01154
01155
01156
01157 INT32 WritePolyIslands (
01158 INT32 PolyNum,
01159 INT32 NumIslands,
01160 INT32 Start,
01161 INT32 Length,
01162 const SIMPLE_ARRAY<INT32>& IsleList
01163 );
01164
01165 protected:
01166
01167 ERRVALUE ClearLinePointList (
01168 );
01169
01170 ERRVALUE ClearNodeLineList (
01171 );
01172
01173 ERRVALUE ClearPolygonIslandList (
01174 );
01175
01176 ERRVALUE ClearPolygonLineList (
01177 );
01178
01179 ERRVALUE SetNumLabels (
01180 INT32 NewNumLabels
01181 );
01182
01183 ERRVALUE SetNumLines (
01184 INT32 NewNumLines
01185 );
01186
01187 ERRVALUE SetNumNodes (
01188 INT32 NewNumNodes
01189 );
01190
01191 ERRVALUE SetNumPoints (
01192 INT32 NewNumPolygons
01193 );
01194
01195 ERRVALUE SetNumPolygons (
01196 INT32 NewNumPolygons
01197 );
01198
01199 ERRVALUE SwapLinePoints (
01200 INT32 Line1,
01201 INT32 Line2
01202 );
01203
01204 ERRVALUE SwapNodeLines (
01205 INT32 Node1,
01206 INT32 Node2
01207 );
01208
01209 ERRVALUE SwapPolyIslands (
01210 INT32 Poly1,
01211 INT32 Poly2
01212 );
01213
01214 ERRVALUE SwapPolyLines (
01215 INT32 Poly1,
01216 INT32 Poly2
01217 );
01218
01219 private:
01220 #ifndef GENERATING_DOXYGEN_OUTPUT
01221
01222 ERRVALUE ExtractLabelsTo (VECTOR& DestObj, const GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg) const;
01223 ERRVALUE ExtractLinesTo (VECTOR& DestObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01224 ERRVALUE ExtractNodesTo (VECTOR& DestObj, const GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01225 ERRVALUE ExtractPointsTo (VECTOR& DestObj, GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01226 ERRVALUE ExtractPolygonsTo (VECTOR& DestObj, const GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01227
01228 ERRVALUE ExtractToCAD (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01229 ERRVALUE ExtractToRegion (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01230 ERRVALUE ExtractToVector (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01231
01232 INT32 FindBestRgnLine (SIMPLE_ARRAY<INT32>& TestList, INT32 LineNum, INT32 NodeNum) const;
01233 ERRVALUE ReadLabelBaselinePoints (INT32 LabelNum, POLYLINE& Baseline, DIMENSION dim, double Height) const;
01234 int SetupLabelTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01235 int SetupLineTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, BITSET& LineSet, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01236 int SetupPointTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01237 int SetupPolygonTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, BITSET& LineSet, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01238 int TestDatabaseEquivalence (const VECTOR& RhsVectObj, DBASE_ELEMENT& LhsDBaseobj, DBASE_ELEMENT& RhsDBaseobj, SIMPLE_ARRAY<INT32>& TableMatch) const;
01239
01240
01241 virtual ERRVALUE v_CloseObject ();
01242 virtual OBJTYPE v_GetDftObjectType () const;
01243 virtual bool v_IsObjectOpen () const;
01244 virtual ERRVALUE v_OpenObject (OPENMODE OpenFlags, MDLGPARENT parent);
01245
01246
01247 virtual void v_GetExtents (DRECT3D &extents) const;
01248 virtual void v_GetScale (double& xscale, double& yscale) const;
01249 virtual double v_GetZScale () const;
01250 virtual double v_GetZOffset () const;
01251 virtual bool v_HasCapability (int Capability) const;
01252 virtual void v_SetScale (double xscale, double yscale);
01253 virtual void v_SetZOffset (double zoffset);
01254 virtual void v_SetZScale (double zscale);
01255
01256
01257 virtual ERRVALUE v_AddSearchTreeElement (INT32 elemnum, ELEMTYPE ElemType, const DRECT2D& Extents);
01258 virtual ERRVALUE v_BuildSearchTree (INT32 InitialNumElements, ELEMTYPE ElemType, const DRECT2D& Extents);
01259 virtual ERRVALUE v_ClearSearchTree (INT32 InitialNumElements, ELEMTYPE ElemType, const DRECT2D& Extents);
01260 virtual ERRVALUE v_CopySearchTreeElement (INT32 SourceElement, INT32 DestElement, ELEMTYPE ElemType, const DRECT2D& Extents);
01261 virtual ERRVALUE v_DeleteSearchTreeElement (INT32 elemnum, ELEMTYPE ElemType);
01262 virtual ERRVALUE v_ExtractTo (RVC::GEOMETRIC& DestObj, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, const TRANS2D_MAPGEN& tmg, RVC::GEOMETRIC::EXTRACTFLAGS ExtractFlags) const;
01263 virtual INT32 v_FindClosestElementLow (ELEMTYPE ElemType, const DPOINT2D& SearchPt, GEOMETRIC::SEARCHFILTER* SearchFilter, double SearchDist, double* DistFromElem) const;
01264 virtual ERRVALUE v_FindClosestElementsLow (const DPOINT2D& SearchPt, double SearchDist, SEARCHFILTER* SearchFilter, SIMPLE_ARRAY<RVC::ELEMENT>& ElementList) const;
01265 virtual ERRVALUE v_FindElementDrawSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, SEARCHRESULT& SearchResult) const;
01266 virtual ERRVALUE v_FindElementSearchSet (ELEMTYPE ElemType, const DRECT2D& SearchExtents, SEARCHRESULT& SearchResult) const;
01267 virtual INT32 v_GetAttachmentIndex (const RVC::ELEMENT& Element) const;
01268 virtual ERRVALUE v_GetElementExtents (ELEMTYPE ElemType, INT32 ElemNum, DRECT3D& Extents) const;
01269 virtual INT32 v_GetNextElementID (ELEMTYPE ElemType) const;
01270 virtual INT32 v_GetNumElements (ELEMTYPE ElemType) const;
01271 virtual POINTTYPE v_GetPointType () const;
01272 virtual INT32 v_GetPointSize () const;
01273 virtual double v_GetTotalLineLength () const;
01274 virtual bool v_IsElementDeleted (const RVC::ELEMENT& Element) const;
01275 virtual bool v_IsEmpty () const;
01276 virtual ERRVALUE v_SaveSearchTrees ();
01277 virtual ERRVALUE v_SetExtents (const DRECT3D &extents);
01278 virtual ERRVALUE v_SetNextElementID (ELEMTYPE ElemType, INT32 NextElementID);
01279 virtual bool v_SetSearchTree (ELEMTYPE ElemType, RVC::QSEARCHTREE* SearchTree, bool ReplaceExisting);
01280 virtual ERRVALUE v_SetTotalLineLength (double length);
01281 virtual int v_SetupElemTransList (const RVC::GEOMETRIC::ELEMSELECTPARMS& SelectParms, RVC::GEOMETRIC::ELEMTRANSLIST& TransList, RVC::GEOMETRIC::ELEMSELECTFILTER* SelectFilter) const;
01282 virtual bool v_TestElementAgainstRegion (const RVC::ELEMENT& Element, const REGION2D& region, TESTCRITERIA TestMode) const;
01283 virtual ERRVALUE v_UpdateExtents (const DRECT3D &extents);
01284
01285
01286
01287 VECTORHANDLE* m_VectorHandle;
01288 POINTTYPE m_PointType;
01289 TOPOLOGYTYPE m_TopologyType;
01290 mutable QSEARCHTREE *m_LabelSearchTree;
01291 mutable QSEARCHTREE *m_LineSearchTree;
01292 mutable QSEARCHTREE *m_NodeSearchTree;
01293 mutable QSEARCHTREE *m_PointSearchTree;
01294 mutable QSEARCHTREE *m_PolySearchTree;
01295 mutable SPATIALTREE *m_SpatialTree;
01296 class OPTIMIZE;
01297 mutable OPTIMIZE* m_Optimize;
01298 mutable bool m_SetInstanceData;
01299
01300 friend class LABEL;
01301 #endif
01302
01303 };
01304
01305
01306 class VECTOR::CONGLOMERATELINEFILTER {
01307 public:
01308
01309 virtual bool Filter (
01310 const VECTOR& VectObj,
01311 INT32 TestLineNum
01312 ) = 0;
01313 };
01314
01315
01316
01317
01318
01319 class VECTOR::GETOBJFILTER_HASGEOMETRICELEMENTS : public GETOBJFILTER {
01320 public:
01321 GETOBJFILTER_HASGEOMETRICELEMENTS () {}
01322 private:
01323 #ifndef GENERATING_DOXYGEN_OUTPUT
01324 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
01325 #endif // GENERATING_DOXYGEN_OUTPUT
01326 };
01327
01328
01329 class VECTOR::GETOBJFILTER_HASLABELS : public GEOMETRIC::GETOBJFILTER_HASMINIMUMELEMENTS {
01330 public:
01331 GETOBJFILTER_HASLABELS (
01332 INT32 MinLabels = 1
01333 ) : GETOBJFILTER_HASMINIMUMELEMENTS(ELEMTYPE_Label, MinLabels) {}
01334 };
01335
01336
01337 class VECTOR::GETOBJFILTER_HASLINES : public GEOMETRIC::GETOBJFILTER_HASMINIMUMELEMENTS {
01338 public:
01339 GETOBJFILTER_HASLINES (
01340 INT32 MinLines = 1
01341 ) : GETOBJFILTER_HASMINIMUMELEMENTS(ELEMTYPE_Line, MinLines) {}
01342 };
01343
01344
01345 class VECTOR::GETOBJFILTER_HASPOINTS : public GEOMETRIC::GETOBJFILTER_HASMINIMUMELEMENTS {
01346 public:
01347 GETOBJFILTER_HASPOINTS (
01348 INT32 MinPoints = 1
01349 ) : GETOBJFILTER_HASMINIMUMELEMENTS(ELEMTYPE_Point, MinPoints) {}
01350 };
01351
01352
01353 class VECTOR::GETOBJFILTER_HASPOLYGONS : public GEOMETRIC::GETOBJFILTER_HASMINIMUMELEMENTS {
01354 public:
01355 GETOBJFILTER_HASPOLYGONS (
01356 INT32 MinPolygons = 1
01357 ) : GETOBJFILTER_HASMINIMUMELEMENTS(ELEMTYPE_Polygon, MinPolygons) {}
01358 };
01359
01360
01361 class VECTOR::LABEL {
01362 public:
01363
01364 class LEADERLINE {
01365 public:
01366
01367
01368 LEADERLINE (
01369 );
01370
01371
01372 LEADERLINE (
01373 const LEADERLINE& rhs
01374 );
01375
01376
01377 ~LEADERLINE (
01378 );
01379
01380
01381 LEADERLINE& operator= (
01382 const LEADERLINE& rhs
01383 );
01384
01385 INT32 GetElemNum (
01386 ) const {return (m_LeaderLine.ElemNum);}
01387
01388 ELEMTYPE GetElemType (
01389 ) const {return (static_cast<ELEMTYPE>(m_LeaderLine.ElemType));}
01390
01391
01392 void GetExtents (
01393 DRECT3D& extents
01394 ) const;
01395
01396 const POLYLINE& GetLeaderPoints (
01397 ) const {return (m_LeaderPts);}
01398
01399 const DPOINT3D& GetTiePoint (
01400 ) const {return (m_LeaderLine.TiePoint);}
01401
01402
01403
01404
01405 bool IsEquivalentTo (
01406 const LEADERLINE& rhs,
01407 double threshold
01408 ) const;
01409
01410 void SetElemNum (
01411 INT32 ElemNum
01412 ) {m_LeaderLine.ElemNum = ElemNum;}
01413
01414 void SetElemType (
01415 ELEMTYPE ElemType
01416 ) {m_LeaderLine.ElemType = static_cast<INT16>(ElemType);}
01417
01418 void SetLeaderPoints (
01419 const POLYLINE& LeaderPts
01420 ) {m_LeaderPts = LeaderPts;}
01421
01422 void SetTiePoint (
01423 const DPOINT3D& NewTiePoint
01424 ) {m_LeaderLine.TiePoint = NewTiePoint;}
01425
01426
01427 ERRVALUE Translate (
01428 const TRANS2D_MAPGEN& tmg
01429 );
01430
01431 private:
01432 #ifndef GENERATING_DOXYGEN_OUTPUT
01433
01434 ERRVALUE Add (VECTORHANDLE* VectorHandle, INT32 LabelNum, INT32 NumLeaderLines, INT32 LeaderLineIndex);
01435 ERRVALUE Copy (const LEADERLINE& rhs);
01436 ERRVALUE Read (VECTORHANDLE* VectorHandle, INT32 LabelNum, INT32 LeaderLineNum);
01437 ERRVALUE Write (VECTORHANDLE* VectorHandle, INT32 LabelNum, INT32 NumLeaderLines, INT32 LeaderLineIndex);
01438
01439 RVCLEADERLINE m_LeaderLine;
01440 RVCLABELSTYLE m_StyleIndex;
01441 POLYLINE m_LeaderPts;
01442
01443 friend class LABEL;
01444 #endif // GENERATING_DOXYGEN_OUTPUT
01445 };
01446
01447 typedef MILIST<LEADERLINE>::ITERATOR LEADERLINEITERATOR;
01448 typedef MILIST<LEADERLINE>::CONST_ITERATOR CONST_LEADERLINEITERATOR;
01449
01450
01451 LABEL (
01452 );
01453
01454
01455 LABEL (
01456 const LABEL& rhs
01457 );
01458
01459
01460 ~LABEL (
01461 );
01462
01463
01464 LABEL& operator= (
01465 const LABEL& rhs
01466 );
01467
01468
01469 void AddLeaderLine (
01470 const LEADERLINE& LeaderLine
01471 );
01472
01473
01474 void Clear (
01475 );
01476
01477
01478 void ClearLeaderLines (
01479 ) {m_LeaderLines.Clear();}
01480
01481
01482 void DeleteLeaderLine (
01483 MILIST<LEADERLINE>::ITERATOR it
01484 ) {m_Lead