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 #ifndef INC_RVC_VECTTOOL_H
00145 #define INC_RVC_VECTTOOL_H
00146
00147 #ifndef INC_MI32_ELEMTYPE_H
00148 #include <mi32/elemtype.h>
00149 #endif
00150
00151 #ifndef INC_MI32_SIMPLEAR_H
00152 #include <mi32/simplear.h>
00153 #endif
00154
00155 #ifndef INC_MI32_BITSET_H
00156 #include <mi32/bitset.h>
00157 #endif
00158
00159 #ifndef INC_RVC_VECTOR_H
00160 #include <rvc/vector.h>
00161 #endif
00162
00163 #ifndef INC_RVC_HYPERINDEX_H
00164 #include <rvc/hyperidx.h>
00165 #endif
00166
00167 #ifndef INC_RVC_STYLE_H
00168 #include <rvc/style.h>
00169 #endif
00170
00171 #ifndef INC_MI32_OBSERVER_H
00172 #include <mi32/observer.h>
00173 #endif
00174
00175 #ifndef INC_RVC_MSTDATT_H
00176 #include <rvc/mstdatt.h>
00177 #endif
00178
00179 #ifndef INC_RVC_DBPOINT_H
00180 #include <rvc/dbpoint.h>
00181 #endif
00182
00183 #ifndef INC_RVC_DBLINE_H
00184 #include <rvc/dbline.h>
00185 #endif
00186
00187 #ifndef INC_RVC_DBPOLY_H
00188 #include <rvc/dbpoly.h>
00189 #endif
00190
00191 #ifndef INC_RVC_DBNODE_H
00192 #include <rvc/dbnode.h>
00193 #endif
00194
00195 #ifndef INC_RVC_DBTABLE_H
00196 #include <rvc/dbtable.h>
00197 #endif
00198
00199 #ifndef INC_RVC_LIST_H
00200 #include <rvc/list.h>
00201 #endif
00202
00203 #ifndef INC_MI32_POLYLINE_H
00204 #include <mi32/polyline.h>
00205 #endif
00206
00207 #include <vector>
00208
00209 #ifndef GENERATING_DOXYGEN_OUTPUT
00210
00211 class REGION2D;
00212 #endif // GENERATING_DOXYGEN_OUTPUT
00213
00214 namespace RVC {
00215
00216 #ifndef GENERATING_DOXYGEN_OUTPUT
00217
00218 class VECTORTOOLKITOBSERVER;
00219 #endif // GENERATING_DOXYGEN_OUTPUT
00220
00221
00222
00223
00224 class VECTORTOOLKIT : public SUBJECT<VECTORTOOLKITOBSERVER> {
00225 private:
00226
00227 #ifndef GENERATING_DOXYGEN_OUTPUT
00228 class LINEELEMENT;
00229 #endif // GENERATING_DOXYGEN_OUTPUT
00230
00231 public:
00232
00233 #ifndef GENERATING_DOXYGEN_OUTPUT
00234 class POLYGONDELETEFILTER;
00235 #endif // GENERATING_DOXYGEN_OUTPUT
00236
00237 class SNAPOBJECT {
00238 public:
00239
00240 SNAPOBJECT (
00241 );
00242
00243 ~SNAPOBJECT (
00244 );
00245
00246 const RVC::VECTOR& GetVectorObject (
00247 ) const { return (m_VectorObj); }
00248
00249 const TRANS2D_MAPGEN& GetTransGen (
00250 ) const { return (m_VectorToObject); }
00251
00252 bool IsSameAsEditor (
00253 ) const { return (m_SameAsEditor); }
00254
00255 void SetValues (
00256 const VECTORTOOLKIT& vtk
00257 );
00258
00259 void SetValues (
00260 const VECTOR& VectorObj,
00261 const TRANS2D_MAPGEN& VectorToObject
00262 );
00263
00264 private:
00265
00266 #ifndef GENERATING_DOXYGEN_OUTPUT
00267 bool m_SameAsEditor;
00268 VECTOR m_VectorObj;
00269 TRANS2D_MAPGEN m_VectorToObject;
00270 friend class VECTORTOOLKIT;
00271 friend class LINEELEMENT;
00272
00273 SNAPOBJECT (const VECTORTOOLKIT& vtk);
00274
00275 SNAPOBJECT& operator= (const SNAPOBJECT& rhs);
00276 #endif // GENERATING_DOXYGEN_OUTPUT
00277
00278 };
00279 friend class SNAPOBJECT;
00280
00281 class SNAPPARMS {
00282 public:
00283
00284 class PANEL;
00285
00286 enum SNAPTOELEM {
00287 SNAPTOELEM_AnyElement = 0,
00288 SNAPTOELEM_Line,
00289 SNAPTOELEM_Point,
00290 SNAPTOELEM_Node,
00291 SNAPTOELEM_Nothing,
00292 SNAPTOELEM_Vertex
00293 };
00294
00295 enum SNAPTYPE {
00296 SNAPTYPE_AddVertexSnap = 0,
00297 SNAPTYPE_DirectSnap,
00298 SNAPTYPE_ContinueSnap
00299 };
00300
00301 enum SNAPEND {
00302 SNAPEND_Both = 0,
00303 SNAPEND_Start,
00304 SNAPEND_End
00305 };
00306
00307 SNAPPARMS (
00308 );
00309
00310 bool CanCrossLines (
00311 ) const { return (!m_DontCrossLines); }
00312
00313 bool CanRemoveOvershoots (
00314 ) const { return (m_RemOvershoots); }
00315
00316 bool CanSnapToSelf (
00317 ) const { return (!m_DontSnapToSelf); }
00318
00319 SNAPTOELEM GetElementSnap (
00320 ) const { return (m_SnapToElem); }
00321
00322 UINT32 GetLegacyFlags (
00323 ) const;
00324
00325 double GetSnapBackAngle (
00326 ) const { return (m_SnapBackAngle); }
00327
00328 double GetSnapDist (
00329 ) const { return (m_SnapDist); }
00330
00331 SNAPEND GetSnapEnd (
00332 ) const { return (m_SnapEnd); }
00333
00334 SNAPTYPE GetSnapType (
00335 ) const { return (m_SnapType); }
00336
00337 void SetCrossLines (
00338 bool CrossLines
00339 ) { m_DontCrossLines = !CrossLines; }
00340
00341 void SetElementSnap (
00342 SNAPTOELEM element
00343 ) { m_SnapToElem = element; }
00344
00345 void SetFromLegacyFlags (
00346 UINT32 flags
00347 );
00348
00349 void SetRemoveOvershoots (
00350 bool RemoveOvershoots
00351 ) { m_RemOvershoots = RemoveOvershoots; }
00352
00353 void SetSnapBackAngle (
00354 double angle
00355 ) { m_SnapBackAngle = bound(angle, 0.0, PI); }
00356
00357 void SetSnapDist (
00358 double dist
00359 ) { m_SnapDist = dist; }
00360
00361 void SetSnapEnd (
00362 SNAPEND SnapEnd
00363 ) { m_SnapEnd = SnapEnd; }
00364
00365 void SetSnapToSelf (
00366 bool SnapToSelf
00367 ) { m_DontSnapToSelf = !SnapToSelf; }
00368
00369 void SetSnapType (
00370 SNAPTYPE SnapType
00371 ) { m_SnapType = SnapType; }
00372
00373 private:
00374
00375 #ifndef GENERATING_DOXYGEN_OUTPUT
00376 SNAPTOELEM m_SnapToElem;
00377 SNAPTYPE m_SnapType;
00378 SNAPEND m_SnapEnd;
00379 double m_SnapDist;
00380 double m_SnapBackAngle;
00381 bool m_RemOvershoots;
00382 bool m_DontCrossLines;
00383 bool m_DontSnapToSelf;
00384 #endif // GENERATING_DOXYGEN_OUTPUT
00385
00386 };
00387
00388 enum CLIPFLAGS {
00389 CLIPFLAG_None = 0x00000000,
00390 CLIPFLAG_ForceClipBorder = 0x00000200,
00391 CLIPFLAG_NoClipBorder = 0x00000400,
00392 CLIPFLAG_OnlyClipLines = 0x00000800,
00393 CLIPFLAG_NoStdAttrib = 0x00001000,
00394 CLIPFLAG_RemUnusedDBRec = 0x00002000
00395 };
00396
00397 enum DELETELINE {
00398 DELETELINE_None = 0x0000,
00399 DELETELINE_RemoveExcessNodes = 0x0001
00400 };
00401
00402 enum DELETEPOLYGON {
00403 DELETEPOLYGON_None = 0x0000,
00404 DELETEPOLYGON_LongLineDelete = 0x0001,
00405 DELETEPOLYGON_NoDeleteSpurs = 0x0002,
00406 DELETEPOLYGON_CombineAttrib = 0x0004,
00407 DELETEPOLYGON_RemoveAllIslands = 0x0008
00408 };
00409
00410 enum TOOLKITFLAG {
00411 TOOLKITFLAG_None = 0x00,
00412 TOOLKITFLAG_NoConvIfElemID = 0x01,
00413 TOOLKITFLAG_RemExNodesDelLine = 0x02,
00414 TOOLKITFLAG_NoStatusText = 0x04,
00415 TOOLKITFLAG_NoSaveQTree = 0x08,
00416 TOOLKITFLAG_NoCreateElemID = 0x10,
00417 TOOLKITFLAG_NoQTrees = 0x20,
00418 TOOLKITFLAG_KeepAttachedLabels = 0x40
00419 };
00420
00421 enum OPENFLAGS {
00422 OPENFLAGS_None = 0x00000000,
00423 OPENFLAGS_NoQtree = 0x00000001,
00424 OPENFLAGS_NoLineQtree = 0x00000002,
00425 OPENFLAGS_NoNodeQtree = 0x00000004,
00426 OPENFLAGS_NoPolygonQtree = 0x00000008,
00427 OPENFLAGS_NoPointQtree = 0x00000010,
00428 OPENFLAGS_NoLabelQtree = 0x00000020,
00429 OPENFLAGS_NoDatabase = 0x00000040,
00430 OPENFLAGS_NoCreateTables = 0x00000080,
00431 OPENFLAGS_NoCreateElemID = 0x00000100,
00432 OPENFLAGS_NoDBStatTable = 0x00000200,
00433 OPENFLAGS_NoCreateStyle = 0x00000400,
00434 OPENFLAGS_NoChangeTopoType = 0x00000800,
00435 OPENFLAGS_NoHyper = 0x00001000,
00436 OPENFLAGS_NoStyle = 0x00002000,
00437 OPENFLAGS_NoValidateNodes = 0x00004000,
00438 OPENFLAGS_WriteAbsolute = 0x00008000,
00439 OPENFLAGS_NoLegacyDelete = 0x00010000
00440 };
00441
00442 enum SAVEFLAGS {
00443 SAVEFLAG_None = 0x0000,
00444 SAVEFLAG_RemoveExcessNodes = 0x0001,
00445 SAVEFLAG_RemoveExcessRecords = 0x0002,
00446 SAVEFLAG_Optimize = 0x0004
00447 };
00448
00449 enum STDATTRIBSTATE {
00450 STDATTRIBSTATE_NonExistant = 1,
00451 STDATTRIBSTATE_NeedRebuilding,
00452 STDATTRIBSTATE_Valid
00453 };
00454
00455 enum VALIDATEFLAG {
00456 VALIDATEFLAG_None = 0x0000,
00457 VALIDATEFLAG_RebuildPolys = 0x0001,
00458 VALIDATEFLAG_RebuildIslands = 0x0002,
00459 VALIDATEFLAG_RebuildNodeLineList = 0x0004,
00460 VALIDATEFLAG_DontValidateZ = 0x0008,
00461 VALIDATEFLAG_NoRemoveNodes = 0x0080,
00462 VALIDATEFLAG_NoDBStatTable = 0x0100
00463 };
00464
00465 enum NODEFLAG {
00466 NODEFLAG_None = 0x0000,
00467 NODEFLAG_NoCheckDatabase = 0x0001,
00468 NODEFLAG_NoCheckHyper = 0x0002,
00469 NODEFLAG_NoStdAttrib = 0x0004,
00470 NODEFLAG_RemoveIfPoint = 0x0008
00471 };
00472
00473
00474 static ERRVALUE BuildPolygons (
00475 VECTOR& VectObj
00476 );
00477
00478
00479 static ERRVALUE DepthSortPolygons (
00480 VECTOR& VectObj
00481 );
00482
00483
00484 static ERRVALUE RemoveExcessNodes (
00485 VECTOR& VectObj,
00486 NODEFLAG flags
00487 );
00488
00489
00490
00491 static int SplitLinesAtMaxPoints (
00492 const VECTOR& VectorObj,
00493 INT32 MaxPoints,
00494 OBJECT& ParentObj,
00495 VECTOR& NewObject
00496 );
00497
00498
00499 static ERRVALUE ValidateElementID (
00500 VECTOR& VectorObj
00501 );
00502
00503
00504 static ERRVALUE ValidateVectorTopology (
00505 VECTOR& VectorObj,
00506 MISTRING& LogString,
00507 OPENFLAGS OpenFlags,
00508 VALIDATEFLAG flags
00509 );
00510
00511
00512
00513 VECTORTOOLKIT (
00514 );
00515
00516
00517 ~VECTORTOOLKIT (
00518 );
00519
00520 ERRVALUE AddLabel (
00521 VECTOR::LABEL& label
00522 );
00523
00524 ERRVALUE AddLine (
00525 POLYLINE& PolyLine
00526 );
00527
00528 ERRVALUE AddLineSnapPoints (
00529 INT32 LineNum,
00530 POLYLINE& PolyLine
00531 );
00532
00533 ERRVALUE AddNode (
00534 DPOINT3D& point
00535 );
00536
00537 ERRVALUE AddPoint (
00538 const DPOINT3D& pt
00539 );
00540
00541 ERRVALUE AddPolygon (
00542 POLYLINE& PolyLine
00543 );
00544
00545 ERRVALUE AddSnapPoints (
00546 POLYLINE& PolyLine,
00547 bool& SnappedStart,
00548 bool& SnappedEnd
00549 );
00550
00551 ERRVALUE BuildPolygons (
00552 );
00553
00554 ERRVALUE ChangeLabel (
00555 INT32 LabelNum,
00556 VECTOR::LABEL& label
00557 );
00558
00559 ERRVALUE ChangeLine (
00560 INT32 LineNum,
00561 POLYLINE& PolyLine
00562 );
00563
00564 ERRVALUE ChangeNode (
00565 INT32 NodeNum,
00566 const DPOINT3D& NewPoint,
00567 const std::vector<POLYLINE>& NodeLines
00568 );
00569
00570 ERRVALUE ChangePoint (
00571 INT32 PointNum,
00572 const DPOINT3D& pt,
00573 bool IsNode = false
00574 );
00575
00576 ERRVALUE ClipToRegion (
00577 const REGION2D& region,
00578 TESTCRITERIA RegionTest,
00579 const BITSET* PolygonSet,
00580 CLIPFLAGS flags
00581 );
00582
00583 ERRVALUE Close (
00584 bool ForceClose
00585 );
00586
00587 ERRVALUE CombineNodes (
00588 INT32 NodeNum,
00589 const DPOINT3D* NewPoint,
00590 const SIMPLE_ARRAY<INT32>& NodeList
00591 );
00592
00593 ERRVALUE ConvertForward (
00594 const TRANS2D_MAPGEN& tmg
00595 );
00596
00597 ERRVALUE ConvertNodeToPoint (
00598 INT32 NodeNum
00599 );
00600
00601 ERRVALUE ConvertPointType (
00602 GEOMETRIC::POINTTYPE NewPointType
00603 );
00604
00605 ERRVALUE DeleteLabel (
00606 INT32 LabelNum
00607 );
00608
00609 ERRVALUE DeleteLabels (
00610 const SIMPLE_ARRAY<INT32>& LabelList
00611 );
00612
00613 ERRVALUE DeleteLine (
00614 INT32 LineNum,
00615 DELETELINE flags,
00616 POLYGONDELETEFILTER* PolyDelFilt = 0
00617 );
00618
00619 ERRVALUE DeleteLines (
00620 const SIMPLE_ARRAY<INT32>& LineList,
00621 DELETELINE flags,
00622 POLYGONDELETEFILTER* PolyDelFilt = 0
00623 );
00624
00625 INT32 DeleteNode (
00626 INT32 NodeNum,
00627 NODEFLAG NodeFlag
00628 );
00629
00630 ERRVALUE DeleteNodes (
00631 const SIMPLE_ARRAY<INT32>& NodeList,
00632 NODEFLAG NodeFlag
00633 );
00634
00635 ERRVALUE DeletePoint (
00636 INT32 PointNum
00637 );
00638
00639 ERRVALUE DeletePoints (
00640 const SIMPLE_ARRAY<INT32>& PointList
00641 );
00642
00643 ERRVALUE DeletePolygon (
00644 INT32 PolyNum,
00645 DELETEPOLYGON flags
00646 );
00647
00648 ERRVALUE DeletePolygons (
00649 SIMPLE_ARRAY<INT32>& PolyList,
00650 DELETEPOLYGON flags
00651 );
00652
00653 ERRVALUE ExtractToRegion (
00654 const REGION2D& region,
00655 TESTCRITERIA RegionTest,
00656 CLIPFLAGS flags
00657 );
00658
00659 INT32 FindClosestLineVertex (
00660 INT32 LineNum,
00661 const DPOINT2D& testpt,
00662 DPOINT3D *retpt
00663 );
00664
00665 ERRVALUE GenerateElementIDTables (
00666 );
00667
00668 ERRVALUE GenerateIntersections (
00669 const POLYLINE& PolyLine,
00670 POLYLINE::INTERSECTINFO& ints,
00671 INT32 MaxIntersections = 0
00672 );
00673
00674 DIMENSION GetDimension (
00675 ) const { return (m_VectorObj.GetDimension()); }
00676
00677 ERRVALUE GetDatabaseObject (
00678 ELEMTYPE ElemType,
00679 DBASE_ELEMENT& DBaseObj
00680 );
00681
00682 INT32 GetNumElements (
00683 ELEMTYPE ElemType
00684 ) const;
00685
00686 ERRVALUE GetObjectItem (
00687 OBJITEM& ObjItem
00688 ) const;
00689
00690 const SNAPOBJECT& GetSnapObject (
00691 ) { return (m_SnapObject); }
00692
00693 const SNAPPARMS& GetSnapParms (
00694 ) const { return (m_SnapParms); }
00695
00696 ERRVALUE GetStyleObject (
00697 STYLE& StyleObj
00698 ) const;
00699
00700 TOOLKITFLAG GetToolkitFlags (
00701 ) const { return (m_ToolkitFlags); }
00702
00703 ERRVALUE GetVectorObject (
00704 VECTOR& VectorObj
00705 ) const;
00706
00707 ERRVALUE GetZValue (
00708 ELEMTYPE ElemType,
00709 INT32 ElemNum,
00710 double& zvalue
00711 ) const;
00712
00713 bool IsOpen (
00714 ) const { return (m_VectorObj.IsOpen()); }
00715
00716 ERRVALUE LocateIslands (
00717 bool LineLeftRightValid
00718 );
00719
00720 ERRVALUE Open (
00721 const RVC::OBJITEM& ObjItem,
00722 OPENFLAGS flags
00723 );
00724
00725 ERRVALUE Open (
00726 const VECTOR& VectorObj,
00727 OPENFLAGS flags
00728 );
00729
00730 ERRVALUE RecoverFromUndo (
00731 );
00732
00733 int RemoveDangleLine (
00734 INT32 LineNum,
00735 double maxdist
00736 );
00737
00738 INT32 RemoveDangleLineSet (
00739 double maxdist
00740 );
00741
00742 INT32 RemoveDangleLineSet (
00743 const SIMPLE_ARRAY<INT32>& LineList,
00744 double maxdist
00745 );
00746
00747 ERRVALUE RemoveElementIDTables (
00748 );
00749
00750 int RemoveExcessNodes (
00751 const BITSET *NodeSet = 0,
00752 NODEFLAG NodeFlags = NODEFLAG_None
00753 );
00754
00755 INT32 RemoveIslandSet (
00756 double MaxArea,
00757 DELETEPOLYGON flags,
00758 INT32 *NumTotalIslands
00759 );
00760
00761 ERRVALUE RemoveStandardAttributeTables (
00762 );
00763
00764 ERRVALUE ReverseLines (
00765 const SIMPLE_ARRAY<INT32>& LineList
00766 );
00767
00768 ERRVALUE Save (
00769 RVC::OBJITEM& ObjItem,
00770 SAVEFLAGS flags
00771 );
00772
00773 ERRVALUE SnapLine (
00774 INT32 LineNum
00775 );
00776
00777 ERRVALUE SnapLines (
00778 const BITSET_UNOWNED& LineSet,
00779 BITSET* UnsnappedSet,
00780 bool AttemptAllElements
00781 );
00782
00783 ERRVALUE SetPrecision (
00784 int Precision
00785 );
00786
00787 void SetSnapObject (
00788 );
00789
00790 void SetSnapObject (
00791 const VECTOR& VectorObj,
00792 const TRANS2D_MAPGEN& VectorToObject
00793 );
00794
00795 void SetSnapParms (
00796 const SNAPPARMS& SnapParms
00797 ) { m_SnapParms = SnapParms; }
00798
00799 void SetToolkitFlags (
00800 TOOLKITFLAG ToolkitFlags
00801 ) { m_ToolkitFlags = ToolkitFlags; }
00802
00803 ERRVALUE SetTopologyType (
00804 VECTOR::TOPOLOGYTYPE VectorType
00805 );
00806
00807 ERRVALUE SetZValue (
00808 ELEMTYPE ElemType,
00809 INT32 ElemNum,
00810 double zvalue
00811 );
00812
00813 ERRVALUE SplineLine (
00814 INT32 LineNum,
00815 POLYLINE::SPLINE SplineType,
00816 INT32 NumKnots,
00817 double Tolerance,
00818 POLYLINE::SPLINEFLAGS flags
00819 );
00820
00821 ERRVALUE SplineLines (
00822 const BITSET* LineList,
00823 POLYLINE::SPLINE SplineType,
00824 INT32 NumKnots,
00825 double Tolerance,
00826 POLYLINE::SPLINEFLAGS flags,
00827 bool AttemptAllElements
00828 );
00829
00830 ERRVALUE SplitLineAtMaxPoints (
00831 INT32 MaxPoints,
00832 bool SetMaxPoints
00833 );
00834
00835 ERRVALUE StraightenLine (
00836 INT32 LineNum
00837 );
00838
00839 ERRVALUE ThinLine (
00840 INT32 LineNum,
00841 POLYLINE::THINMETHOD method,
00842 double Factor,
00843 POLYLINE::SPLINE SplineType,
00844 POLYLINE::SPLINEFLAGS flags
00845 );
00846
00847 ERRVALUE ThinLines (
00848 const BITSET* LineList,
00849 POLYLINE::THINMETHOD method,
00850 double Factor,
00851 POLYLINE::SPLINE SplineType,
00852 POLYLINE::SPLINEFLAGS flags,
00853 bool AttemptAllElements
00854 );
00855
00856 ERRVALUE Update (
00857 );
00858
00859 ERRVALUE UpdateStandardAttrib (
00860 MSTDATT::ADDSTAT flags
00861 );
00862
00863 STDATTRIBSTATE ValidateStandardAttribTables (
00864 );
00865
00866 ERRVALUE ValidateTopology (
00867 VALIDATEFLAG flags,
00868 MISTRING& LogString
00869 );
00870
00871 private:
00872
00873 #ifndef GENERATING_DOXYGEN_OUTPUT
00874 enum LINEORIENT {
00875 LINEORIENT_Start = 0,
00876 LINEORIENT_End
00877 };
00878
00879 class BASEELEMENT {
00880 public:
00881
00882 BASEELEMENT (
00883 VECTORTOOLKIT& vtk,
00884 ELEMTYPE elemtype
00885 );
00886
00887 virtual ~BASEELEMENT (
00888 );
00889
00890 virtual INT32 GetNumElements (
00891 ) const = 0;
00892
00893 virtual ERRVALUE GetZValue (
00894 INT32 ElemNum,
00895 double& zvalue
00896 ) const = 0;
00897
00898 virtual ERRVALUE SetZValue (
00899 INT32 ElemNum,
00900 double zvalue
00901 ) = 0;
00902
00903 ERRVALUE AddQTreeElem (
00904 INT32 elemnum,
00905 const DRECT2D& Extents
00906 );
00907
00908 ERRVALUE BuildQTree (
00909 );
00910
00911 ERRVALUE ChangeQTreeElem (
00912 INT32 ElemNum,
00913 const DRECT2D& Extents
00914 ) { return (CopyQTreeElem(ElemNum, ElemNum, Extents)); }
00915
00916 ERRVALUE ClearQTree (
00917 const DRECT2D& Extents,
00918 INT32 NumElements
00919 );
00920
00921 void CloseBase (
00922 );
00923
00924 ERRVALUE CopyQTreeElem (
00925 INT32 source,
00926 INT32 dest,
00927 const DRECT2D& Extents
00928 );
00929
00930 ERRVALUE DeleteQTreeElem (
00931 INT32 elemnum
00932 );
00933
00934 void DisableQTree (
00935 ) { m_DisableQTree = true; }
00936
00937 bool HasSearchTree (
00938 ) const { return (m_HasSearchTree); }
00939
00940 bool IsQTreeDisabled (
00941 ) const { return (m_DisableQTree); }
00942
00943 ERRVALUE Open (
00944 OPENFLAGS flags
00945 );
00946
00947 ERRVALUE RecoverFromUndo (
00948 );
00949
00950 protected:
00951
00952 ELEMTYPE m_ElemType;
00953 VECTORTOOLKIT& m_vtk;
00954 bool m_DisableQTree;
00955 bool m_HasSearchTree;
00956
00957 friend class SNAPOBJECT;
00958
00959 };
00960 friend class BASEELEMENT;
00961
00962 class DATABASEELEMENT : public BASEELEMENT {
00963 public:
00964
00965 DATABASEELEMENT (
00966 VECTORTOOLKIT& vtk,
00967 ELEMTYPE elemtype,
00968 DBASE_ELEMENT& Database
00969 );
00970
00971 virtual ~DATABASEELEMENT (
00972 );
00973
00974 virtual INT32 GetElemIDCount (
00975 ) const = 0;
00976
00977 virtual bool HasStatHandle (
00978 ) const { return (false); }
00979
00980 virtual ERRVALUE SetElemIDCount (
00981 INT32 NewValue
00982 ) = 0;
00983
00984 virtual ERRVALUE ValidateElementIDTable (
00985 );
00986
00987 ERRVALUE AddElemDBList (
00988 INT32 ElemNum
00989 );
00990
00991 ERRVALUE Close (
00992 );
00993
00994 ERRVALUE CombineDBLists (
00995 INT32 SourceElem,
00996 INT32 DestElem
00997 );
00998
00999 int CompareDBLists (
01000 INT32 ElemNum1,
01001 INT32 ElemNum2
01002 );
01003
01004 INT32 CopyDBRecordRaw (
01005 INT32 TableNum,
01006 INT32 SourceRecord,
01007 INT32 DestRecord
01008 );
01009
01010 ERRVALUE CopyElemDBRecords (
01011 INT32 SourceElem,
01012 INT32 DestElem,
01013 bool DeleteIdentityRecord
01014 );
01015
01016 ERRVALUE GenerateElementIDTable (
01017 );
01018
01019 SIMPLE_ARRAY<DBLISTELMT>& GetDBListBuffer (
01020 ) { return (m_DBList); }
01021
01022 ERRVALUE GetElementIDTable (
01023 ) const { return (m_ElemIDTableNum); }
01024
01025 DBASE_ELEMENT& GetDatabase (
01026 ) { return (m_Database); }
01027
01028 bool HasElementIDTable (
01029 ) const { return (m_ElemIDTableNum >= 0); }
01030
01031 ERRVALUE MakeElementIDTable (
01032 bool SetInvalid
01033 );
01034
01035 ERRVALUE Open (
01036 OPENFLAGS flags
01037 );
01038
01039 ERRVALUE RecoverFromUndo (
01040 );
01041
01042 ERRVALUE RemoveElementIDTable (
01043 );
01044
01045 ERRVALUE RemoveTable (
01046 INT32 TableNum
01047 );
01048
01049 ERRVALUE SwapDBRecords (
01050 INT32 ElemNum1,
01051 INT32 ElemNum2,
01052 bool DeleteElemNum2Records
01053 );
01054
01055 ERRVALUE UpdateCurrentElemID (
01056 INT32 ElemNum
01057 );
01058
01059 ERRVALUE UpdateNumElements (
01060 INT32 NumElements
01061 );
01062
01063 protected:
01064
01065 class LOCALOBSERVER : public DBASE::OBSERVER {
01066 public:
01067
01068 LOCALOBSERVER (
01069 DBASE_ELEMENT& Database,
01070 INT32& ElemIDTableNum
01071 ) : DBASE::OBSERVER(Database), m_ElemIDTableNum(ElemIDTableNum) {}
01072
01073 private:
01074 virtual void OnTableDropEnd (INT32 TableNum);
01075
01076 INT32& m_ElemIDTableNum;
01077 };
01078
01079 DBASE_ELEMENT& m_Database;
01080 INT32 m_ElemIDTableNum;
01081 DBTABLE::RECORD m_Record;
01082 SIMPLE_ARRAY<DBLISTELMT> m_DBList;
01083 bool m_MaintainElementIDTables;
01084 LOCALOBSERVER* m_Observer;
01085
01086 void AllocateObserver (
01087 DBASE_ELEMENT& Database
01088 );
01089
01090 };
01091 friend class DATABASEELEMENT;
01092
01093 class STATELEMENT : public DATABASEELEMENT {
01094 public:
01095
01096 class DISABLESTATS {
01097 public:
01098
01099 DISABLESTATS (
01100 STATELEMENT& StatElem,
01101 bool Condition
01102 ) : m_StatElem(StatElem), m_TempSdh(0), m_Condition(Condition && StatElem.m_sdh != 0) {
01103 if (Condition) {
01104 m_TempSdh = StatElem.m_sdh;
01105 StatElem.m_sdh = 0;
01106 }
01107 }
01108
01109 ~DISABLESTATS (
01110 ) {
01111 if (m_Condition) {
01112 m_StatElem.m_sdh = m_TempSdh;
01113 if (m_StatElem.m_sdh != 0) {
01114 ERRORPOSNDISABLE Disable;
01115 m_StatElem.m_sdh->RebuildTable(MSTDATT::ADDSTAT_None);
01116 }
01117 }
01118 }
01119
01120 bool IsDisabled (
01121 ) const { return (m_TempSdh != 0 && m_StatElem.m_sdh == 0); }
01122
01123 private:
01124 STATELEMENT& m_StatElem;
01125 VECTSTDATT* m_TempSdh;
01126 bool m_Condition;
01127 };
01128 friend class DISABLESTATS;
01129
01130 STATELEMENT (
01131 VECTORTOOLKIT& vtk,
01132 ELEMTYPE elemtype,
01133 DBASE_ELEMENT& Database
01134 );
01135
01136 virtual ~STATELEMENT (
01137 );
01138
01139 virtual bool HasStatHandle (
01140 ) const { return (m_sdh != 0); }
01141
01142 void CloseStat (
01143 );
01144
01145 ERRVALUE Close (
01146 );
01147
01148 INT32 GetNumRecords (
01149 ) const;
01150
01151 bool IsInitialized (
01152 ) const { return (m_sdh != 0); }
01153
01154 ERRVALUE Open (
01155 OPENFLAGS flags
01156 );
01157
01158 ERRVALUE RebuildTable (
01159 MSTDATT::ADDSTAT flags
01160 );
01161
01162 ERRVALUE RecoverFromUndo (
01163 );
01164
01165 ERRVALUE RemoveStatTable (
01166 );
01167
01168 protected:
01169 VECTSTDATT *m_sdh;
01170 bool m_MaintainStdAttribIDTables;
01171 };
01172 friend class STATELEMENT;
01173
01174 class LINEELEMENT : public STATELEMENT {
01175 public:
01176
01177 enum LINESNAP {
01178 LINESNAP_None = 0x0000,
01179 LINESNAP_ForceNode = 0x0001
01180 };
01181
01182 LINEELEMENT (
01183 VECTORTOOLKIT& vtk
01184 );
01185
01186 virtual ~LINEELEMENT (
01187 );
01188
01189 virtual INT32 GetElemIDCount (
01190 ) const;
01191
01192 virtual INT32 GetNumElements (
01193 ) const;
01194
01195 virtual ERRVALUE GetZValue (
01196 INT32 ElemNum,
01197 double& zvalue
01198 ) const;
01199
01200 virtual ERRVALUE SetElemIDCount (
01201 INT32 NewValue
01202 );
01203
01204 virtual ERRVALUE SetZValue (
01205 INT32 ElemNum,
01206 double zvalue
01207 );
01208
01209 INT32 Add (
01210 const POLYLINE& PolyLine
01211 );
01212
01213 int AddSnapPoint (
01214 LINEORIENT LineOrient,
01215 POLYLINE& PolyLine,
01216 LINESNAP LineSnap
01217 );
01218
01219 ERRVALUE Change (
01220 INT32 LineNum,
01221 const POLYLINE& PolyLine
01222 );
01223
01224 ERRVALUE ChangeLine (
01225 INT32 LineNum,
01226 const POLYLINE& PolyLine
01227 );
01228
01229 ERRVALUE ChangeSnapLine (
01230 POLYLINE& PolyLine
01231 );
01232
01233 int CheckIfIntersect (
01234 INT32 SkipLineNum,
01235 const POLYLINE& PolyLine
01236 );
01237
01238 ERRVALUE Close (
01239 );
01240
01241 ERRVALUE Delete (
01242 INT32 LineNum
01243 );
01244
01245 ERRVALUE FindLineAndSplit (
01246 const DPOINT3D& point,
01247 DPOINT3D& retpt
01248 );
01249
01250 BITSET& GetLineBitset (
01251 ) { return (m_ElemList); }
01252
01253 ERRVALUE JoinLines (
01254 INT32 NodeNum,
01255 INT32 RepLineNum,
01256 INT32 DelLineNum
01257 );
01258
01259 ERRVALUE Open (
01260 OPENFLAGS flags
01261 );
01262
01263 ERRVALUE OtherLineIntersect (
01264 const POLYLINE& PolyLine
01265 );
01266
01267 ERRVALUE RecoverFromUndo (
01268 );
01269
01270 ERRVALUE RemoveOvershoots (
01271 POLYLINE& PolyLine
01272 ) const;
01273
01274 ERRVALUE SelfLineIntersect (
01275 const POLYLINE& PolyLine
01276 );
01277
01278 INT32 SplitLineAtVertex (
01279 INT32 OldLineNum,
01280 INT32 vertex,
01281 INT32& NewLineNum
01282 );
01283
01284 INT32 SplitLineNearPoint (
01285 INT32 LineNum,
01286 const DPOINT2D& point,
01287 INT32& NewLineNum
01288 );
01289
01290 ERRVALUE UpdateStats (
01291 INT32 ElemNum
01292 );
01293
01294 private:
01295
01296 class OTHERLINESPLIT;
01297 friend class OTHERLINESPLIT;
01298 class SELFLINESPLIT;
01299 friend class SELFLINESPLIT;
01300
01301 BITSET m_ElemList;
01302 DBASE_LINE m_LineDB;
01303
01304 ERRVALUE AddLineSegment (const POLYLINE& PolyLine);
01305 ERRVALUE ChangeLineSegment (const POLYLINE& PolyLine);
01306 ERRVALUE ComputeLineExtents (INT32 LineNum, RVCVECTLINE& vline);
01307 INT32 FindBestLineSnapPoint (LINEORIENT LineOrient, const POLYLINE& Polyline, DPOINT3D& retpt, double& maxdist) const;
01308 int GenerateExtendSnapPoint (LINEORIENT LineOrient, const POLYLINE& PolyLine, DPOINT3D& retpt, LINESNAP LineSnap);
01309 int GenerateSnapToPoint (LINEORIENT LineOrient, const POLYLINE& PolyLine, DPOINT3D& retpt, LINESNAP LineSnap);
01310 int InsertLinePoint (INT32 LineNum, INT32 segment, DPOINT3D& insertpt);
01311 ERRVALUE ResetLineNodeLink (LINEORIENT LineOrient, INT32 LineNum);
01312
01313 class EXTENDSPLIT;
01314 class SNAPFILTINFO;
01315
01316 friend class VECTORTOOLKIT;
01317 };
01318 friend class LINEELEMENT;
01319 friend class LINEELEMENT::EXTENDSPLIT;
01320 friend class LINEELEMENT::SNAPFILTINFO;
01321 class LINEPOLYJOIN;
01322 friend class LINEPOLYJOIN;
01323
01324 class POINTELEMENT : public DATABASEELEMENT {
01325 public:
01326
01327 POINTELEMENT (
01328 VECTORTOOLKIT& vtk
01329 );
01330
01331 virtual ~POINTELEMENT (
01332 );
01333
01334 virtual INT32 GetElemIDCount (
01335 ) const;
01336
01337 virtual INT32 GetNumElements (
01338 ) const;
01339
01340 virtual ERRVALUE GetZValue (
01341 INT32 ElemNum,
01342 double& zvalue
01343 ) const;
01344
01345 virtual ERRVALUE SetElemIDCount (
01346 INT32 NewValue
01347 );
01348
01349 virtual ERRVALUE SetZValue (
01350 INT32 ElemNum,
01351 double zvalue
01352 );
01353
01354 virtual ERRVALUE ValidateElementIDTable (
01355 );
01356
01357 ERRVALUE Add (
01358 const DPOINT3D& point
01359 );
01360
01361 ERRVALUE Close (
01362 );
01363
01364 ERRVALUE Open (
01365 OPENFLAGS flags
01366 );
01367
01368 ERRVALUE RecoverFromUndo (
01369 );
01370
01371 ERRVALUE RemoveElementIDRecord (
01372 INT32 PointNum
01373 );
01374
01375 private:
01376 DBASE_POINT m_PointDB;
01377 };
01378 friend class POINTELEMENT;
01379
01380 class POLYGONELEMENT : public STATELEMENT {
01381 public:
01382 class POLYLINEDELETE;
01383
01384 POLYGONELEMENT (
01385 VECTORTOOLKIT& vtk
01386 );
01387
01388 virtual ~POLYGONELEMENT (
01389 );
01390
01391 virtual INT32 GetElemIDCount (
01392 ) const;
01393
01394 virtual INT32 GetNumElements (
01395 ) const;
01396
01397 virtual ERRVALUE GetZValue (
01398 INT32 ElemNum,
01399 double& zvalue
01400 ) const;
01401
01402 virtual ERRVALUE SetElemIDCount (
01403 INT32 NewValue
01404 );
01405
01406 virtual ERRVALUE SetZValue (
01407 INT32 ElemNum,
01408 double zvalue
01409 );
01410
01411 ERRVALUE AddIsland (
01412 INT32 PolyNum,
01413 INT32 IslandNum
01414 );
01415
01416 ERRVALUE Build (
01417 );
01418
01419 ERRVALUE ChangeIsland (
01420 INT32 PolyNum,
01421 INT32 OldIsleNum,
01422 INT32 NewIsleNum
01423 );
01424
01425 ERRVALUE ChangeLine (
01426 INT32 PolyNum,
01427 INT32 OldLineNum,
01428 INT32 NewLineNum
01429 );
01430
01431 ERRVALUE Close (
01432 );
01433
01434 ERRVALUE Delete (
01435 INT32 PolyNum
01436 );
01437
01438 ERRVALUE DeleteByLine (
01439 INT32 PolyNum,
01440 DELETEPOLYGON flags
01441 );
01442
01443 ERRVALUE DeleteIsland (
01444 INT32 PolyNum,
01445 INT32 IslandNum
01446 );
01447
01448 ERRVALUE DeleteLine (
01449 INT32 PolyNum,
01450 INT32 LineNum
01451 );
01452
01453 int FindPolygons (
01454 INT32 StartLine,
01455 INT32 PolyInside
01456 );
01457
01458 BITSET& GetPolygonBitset (
01459 ) { return (m_ElemList); }
01460
01461 ERRVALUE MergePolygons (
01462 INT32 LeftPolyNum,
01463 INT32 RightPolyNum,
01464 INT32 LineNum,
01465 POLYGONDELETEFILTER* PolyDelFilt
01466 );
01467
01468 ERRVALUE Open (
01469 OPENFLAGS flags
01470 );
01471
01472 ERRVALUE RecoverFromUndo (
01473 );
01474
01475 ERRVALUE RemoveIslandInfo (
01476 );
01477
01478 ERRVALUE RemovePolygonInfo (
01479 bool IsPolyRebuild
01480 );
01481
01482 ERRVALUE SplitLineInPolygons (
01483 INT32 OrigLineNum,
01484 const RVCVECTLINE& Origvline,
01485 INT32 NewLineNum
01486 );
01487
01488 ERRVALUE SplitLineInPoly (
01489 INT32 OrigLineNum,
01490 const RVCVECTLINE& Origvline,
01491 INT32 NewLineNum,
01492 SIMPLE_ARRAY<INT32>& LineList
01493 ) const;
01494
01495 ERRVALUE SplitLineInSamePoly (
01496 INT32 OrigLineNum,
01497 const RVCVECTLINE& Origvline,
01498 INT32 NewLineNum,
01499 SIMPLE_ARRAY<INT32>& LineList
01500 ) const;
01501
01502 ERRVALUE Update (
01503 INT32 PolyNum
01504 );
01505
01506 void UpdateStats (
01507 BITSET& PolySet
01508 );
01509
01510 ERRVALUE ValidatePolyInside (
01511 );
01512
01513 private:
01514 struct LOCATEPOLY;
01515
01516 DBASE_POLYGON m_PolyDB;
01517 BITSET m_ElemList;
01518
01519 ERRVALUE ComputePolyExtents (INT32 PolyNum);
01520 INT32 FindNextLine (LOCATEPOLY& LocatePoly);
01521 ERRVALUE GenerateShellPolyList (INT32 ParentPoly, const SIMPLE_ARRAY<INT32>& LineList, SIMPLE_ARRAY<INT32>& PolyList);
01522 ORIENTATION OrientList (const SIMPLE_ARRAY<INT32>& LineList, const SIMPLE_ARRAY<bool>& LineOrientList) const;
01523 ERRVALUE RemoveZeroAreaPolygon (INT32 StartLine, LOCATEPOLY& LocatePoly);
01524 ERRVALUE ReparentIslands (INT32 PolyNum, INT32 NewParent, bool MoveToNewParent);
01525 ERRVALUE ReparentNestedIslands (INT32 CheckPoly, const SIMPLE_ARRAY<INT32>& LineList);
01526 ERRVALUE SearchNestedIslands (INT32 PolyInside, INT32 IslePoly, bool AddingPolygon);
01527 ERRVALUE SetLeftRight (const LOCATEPOLY& LocatePoly, INT32 PolyNum, INT32 ParentPolyNum);
01528 ERRVALUE UnparentIslets (INT32 OldParentPoly, INT32 NewParentPoly, const INT32 *LineList, INT32 NumLines);
01529 void ValidatePoly (LOCATEPOLY& LocatePoly, INT32 StartLine);
01530
01531 };
01532 friend class POLYGONELEMENT;
01533 friend class POLYGONELEMENT::POLYLINEDELETE;
01534 class POLYLISTDELETE;
01535 friend class POLYLISTDELETE;
01536 class POLYISLANDDELETE;
01537
01538 struct NODELINEANGLE {
01539 double m_Angle;
01540 INT32 m_LineNum;
01541 bool m_Orient;
01542
01543 NODELINEANGLE (
01544 ) { memset(this, 0, sizeof(*this)); }
01545
01546 static int CompareAngle (
01547 NODELINEANGLE *d1,
01548 NODELINEANGLE *d2,
01549 void *data
01550 );
01551
01552 };
01553
01554 class NODEELEMENT : public DATABASEELEMENT {
01555 public:
01556 NODEELEMENT (
01557 VECTORTOOLKIT& vtk
01558 );
01559
01560 virtual ~NODEELEMENT (
01561 );
01562
01563 virtual INT32 GetElemIDCount (
01564 ) const;
01565
01566 virtual INT32 GetNumElements (
01567 ) const;
01568
01569 virtual ERRVALUE GetZValue (
01570 INT32 ElemNum,
01571 double& zvalue
01572 ) const;
01573
01574 virtual ERRVALUE SetElemIDCount (
01575 INT32 NewValue
01576 );
01577
01578 virtual ERRVALUE SetZValue (
01579 INT32 ElemNum,
01580 double zvalue
01581 );
01582
01583 virtual ERRVALUE ValidateElementIDTable (
01584 ) { return (0); }
01585
01586 INT32 AddNode (
01587 const DPOINT3D& point
01588 );
01589
01590 ERRVALUE AddNodeLine (
01591 INT32 NodeNum,
01592 INT32 LineNum
01593 );
01594
01595 ERRVALUE BuildNodeLineList (
01596 );
01597
01598 ERRVALUE ChangeNode (
01599 INT32 NodeNum,
01600 const DPOINT3D& point
01601 );
01602
01603 ERRVALUE ChangeNodeLine (
01604 INT32 NodeNum,
01605 INT32 OldLineNum,
01606 INT32 NewLineNum
01607 );
01608
01609 bool CheckIsPoint (
01610 INT32 NodeNum
01611 );
01612
01613 ERRVALUE Close (
01614 );
01615
01616 ERRVALUE ConvertNodePointToNode (
01617 INT32 NodeNum
01618 );
01619
01620 ERRVALUE ConvertToPoint (
01621 INT32 NodeNum
01622 );
01623
01624 ERRVALUE Delete (
01625 INT32 NodeNum
01626 );
01627
01628 ERRVALUE DeleteNodeLine (
01629 INT32 NodeNum,
01630 INT32 LineNum
01631 );
01632
01633 ERRVALUE FindNodeLineAngles (
01634 INT32 NodeNum,
01635 SIMPLE_ARRAY<NODELINEANGLE>& list
01636 ) const;
01637
01638 DBASE_NODE& GetNodeDatabase (
01639 ) { return (m_NodeDB); }
01640
01641 ERRVALUE Open (
01642 OPENFLAGS flags
01643 );
01644
01645 ERRVALUE RecoverFromUndo (
01646 );
01647
01648 ERRVALUE ValidateNodes (
01649 );
01650
01651 private:
01652 DBASE_NODE m_NodeDB;
01653 };
01654 friend class NODEELEMENT;
01655
01656 class LABELELEMENT : public BASEELEMENT {
01657 public:
01658
01659 LABELELEMENT (
01660 VECTORTOOLKIT& vtk
01661 );
01662
01663 virtual ~LABELELEMENT (
01664 );
01665
01666
01667 virtual INT32 GetNumElements (
01668 ) const;
01669
01670 virtual ERRVALUE GetZValue (
01671 INT32 ElemNum,
01672 double& zvalue
01673 ) const;
01674
01675 virtual ERRVALUE SetZValue (
01676 INT32 ElemNum,
01677 double zvalue
01678 );
01679
01680
01681 ERRVALUE AddLabelAttach (
01682 INT32 LabelNum,
01683 const VECTOR::LABEL& label,
01684 bool CheckAttach = false
01685 );
01686
01687 ERRVALUE ChangeAttachPosn (
01688 ELEMTYPE ElemType,
01689 INT32 ElemNum,
01690 const DPOINT3D& point
01691 );
01692
01693 ERRVALUE ChangeLabelAttach (
01694 ELEMTYPE ElemType,
01695 INT32 OldElemNum,
01696 INT32 NewElemNum
01697 );
01698
01699 ERRVALUE CheckAttachments (
01700 STATUSCONTEXT& sc
01701 );
01702
01703 void CheckLabelAttach (
01704 const VECTOR::LABEL& label
01705 );
01706
01707 void CleanupElemToLabelTrans (
01708 );
01709
01710 ERRVALUE Close (
01711 );
01712
01713 ERRVALUE DeleteLabelAttach (
01714 ELEMTYPE ElemType,
01715 INT32 ElemNum
01716 );
01717
01718 ERRVALUE Open (
01719 OPENFLAGS flags
01720 );
01721
01722 ERRVALUE PickLineLabelAttach (
01723 INT32 OldLineNum,
01724 INT32 NewLineNum
01725 );
01726
01727 ERRVALUE PickPolyLabelAttach (
01728 INT32 OldPolyNum,
01729 INT32 NewPolyNum
01730 );
01731
01732 ERRVALUE RecoverFromUndo (
01733 );
01734
01735 ERRVALUE RemoveLabelAttach (
01736 INT32 LabelNum
01737 );
01738
01739 ERRVALUE ResizeLabelAttach (
01740 ELEMTYPE ElemType,
01741 INT32 NumItems
01742 );
01743
01744 ERRVALUE SetupElemToLabelTrans (
01745 );
01746
01747 ERRVALUE SwapElementLabelAttach (
01748 ELEMTYPE ElemType,
01749 INT32 FirstElem,
01750 INT32 LastElem
01751 );
01752
01753 ERRVALUE SwapLabelAttach (
01754 INT32 FirstLabel,
01755 INT32 LastLabel
01756 );
01757
01758 private:
01759
01760 LIST& GetTransList (ELEMTYPE ElemType);
01761 ERRVALUE ResizeLabelTransList (ELEMTYPE ElemType);
01762
01763 OBJECT m_LabelTransFile;
01764 LIST m_LineToLabelID;
01765 LIST m_NodeToLabelID;
01766 LIST m_PointToLabelID;
01767 LIST m_PolygonToLabelID;
01768 LIST m_DummyID;
01769
01770 };
01771 friend class LABELELEMENT;
01772
01773 class OPENVECTOR : public VECTOR {
01774 public:
01775
01776 OPENVECTOR (
01777 ) : VECTOR() {}
01778
01779 OPENVECTOR (
01780 const OPENVECTOR& rhs
01781 ) : VECTOR(rhs) {}
01782
01783 virtual ~OPENVECTOR (
01784 ) {}
01785
01786 ERRVALUE ClearLinePointList (
01787 ) { return (VECTOR::ClearLinePointList()); }
01788
01789 ERRVALUE ClearNodeLineList (
01790 ) { return (VECTOR::ClearNodeLineList()); }
01791
01792 ERRVALUE ClearPolygonIslandList (
01793 ) { return (VECTOR::ClearPolygonIslandList()); }
01794
01795 ERRVALUE ClearPolygonLineList (
01796 ) { return (VECTOR::ClearPolygonLineList()); }
01797
01798 ERRVALUE SetNumLabels (
01799 INT32 NewNumLabels
01800 ) { return (VECTOR::SetNumLabels(NewNumLabels)); }
01801
01802 ERRVALUE SetNumLines (
01803 INT32 NewNumLines
01804 ) { return (VECTOR::SetNumLines(NewNumLines)); }
01805
01806 ERRVALUE SetNumNodes (
01807 INT32 NewNumNodes
01808 ) { return (VECTOR::SetNumNodes(NewNumNodes)); }
01809
01810 ERRVALUE SetNumPoints (
01811 INT32 NewNumPoints
01812 ) { return (VECTOR::SetNumPoints(NewNumPoints)); }
01813
01814 ERRVALUE SetNumPolygons (
01815 INT32 NewNumPolygons
01816 ) { return (VECTOR::SetNumPolygons(NewNumPolygons)); }
01817
01818 ERRVALUE SwapLinePoints (
01819 INT32 Line1,
01820 INT32 Line2
01821 ) { return (VECTOR::SwapLinePoints(Line1, Line2)); }
01822
01823 ERRVALUE SwapNodeLines (
01824 INT32 Node1,
01825 INT32 Node2
01826 ) { return (VECTOR::SwapNodeLines(Node1, Node2)); }
01827
01828 ERRVALUE SwapPolyIslands (
01829 INT32 Poly1,
01830 INT32 Poly2
01831 ) { return (VECTOR::SwapPolyIslands(Poly1, Poly2)); }
01832
01833
01834 ERRVALUE SwapPolyLines (
01835 INT32 Poly1,
01836 INT32 Poly2
01837 ) { return (VECTOR::SwapPolyLines(Poly1, Poly2)); }
01838 };
01839
01840 class DISABLETEXT {
01841 public:
01842
01843 DISABLETEXT (
01844