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 #ifndef INC_RVC_STYLE_H
00188 #define INC_RVC_STYLE_H
00189
00190 #ifndef INC_RVC_OBJECT_H
00191 #include <rvc/object.h>
00192 #endif
00193
00194 #ifndef INC_MI32_RVCSTYLE_H
00195 #include <mi32/rvcstyle.h>
00196 #endif
00197
00198 #ifndef INC_MI32_ELEMTYPE_H
00199 #include <mi32/elemtype.h>
00200 #endif
00201
00202 #ifndef INC_MI32_SIMPLEAR_H
00203 #include <mi32/simplear.h>
00204 #endif
00205
00206 #ifndef INC_MI32_ELEMSTYL_H
00207 #include <mi32/elemstyl.h>
00208 #endif
00209
00210 #ifndef INC_MI32_MGD2_H
00211 #include <mi32/mgd2.h>
00212 #endif
00213
00214 #ifndef INC_RVC_GETOBJF_H
00215 #include <rvc/getobjf.h>
00216 #endif
00217
00218 namespace RVC {
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240 class STYLE : public RVC::OBJECT {
00241 public:
00242
00243 #ifndef GENERATING_DOXYGEN_OUTPUT
00244 class BASEPATTERN;
00245 class BITMAPPATTERN;
00246 class HATCHPATTERN;
00247 class GETOBJFILTER_ISSELECTABLE;
00248 class GETOBJFILTER_HASPATTERNTYPE;
00249 class GETOBJFILTER_HASSTYLETYPE;
00250 class LINEPATTERN;
00251 class SYMBOLPATTERN;
00252 class UNIQUEPATTERNNAMEFILTER;
00253 class UNIQUESTYLENAMEFILTER;
00254 #endif // GENERATING_DOXYGEN_OUTPUT
00255
00256
00257 enum TYPE {
00258 TYPE_First = 0,
00259 TYPE_Point = 0,
00260 TYPE_Line = 1,
00261 TYPE_Polygon = 2,
00262 TYPE_Text = 3,
00263 TYPE_NumTypes = 4
00264 };
00265
00266
00267 enum PATTERN {
00268 PATTERN_Symbol = 0,
00269 PATTERN_Line,
00270 PATTERN_Bitmap,
00271 PATTERN_Hatch,
00272 PATTERN_NumTypes
00273 };
00274
00275
00276 STYLE (
00277 );
00278
00279
00280 STYLE (
00281 const RVC::STYLE& obj
00282 );
00283
00284
00285 virtual ~STYLE (
00286 );
00287
00288
00289 RVC::STYLE& operator= (
00290 const RVC::STYLE& rhs
00291 );
00292
00293
00294
00295 INT32 AddPattern (
00296 PATTERN PattType,
00297 void *Pattern
00298 );
00299
00300
00301
00302 INT32 AddPattern (
00303 PATTERN PattType,
00304 const BASEPATTERN& Pattern
00305 );
00306
00307
00308
00309 INT32 AddPattern (
00310 const BITMAPPATTERN& Pattern
00311 );
00312
00313
00314
00315 INT32 AddPattern (
00316 const HATCHPATTERN& Pattern
00317 );
00318
00319
00320
00321 INT32 AddPattern (
00322 const LINEPATTERN& Pattern
00323 );
00324
00325
00326
00327 INT32 AddPattern (
00328 const SYMBOLPATTERN& Pattern
00329 );
00330
00331
00332
00333 INT32 AddStyle (
00334 RVCPOINTSTYLE& style
00335 );
00336
00337
00338
00339 INT32 AddStyle (
00340 const RVC::OBJECTNAME& name,
00341 const POINTSTYLE& style
00342 );
00343
00344
00345
00346 INT32 AddStyle (
00347 RVCPOLYSTYLE& style
00348 );
00349
00350
00351
00352 INT32 AddStyle (
00353 const RVC::OBJECTNAME& name,
00354 const POLYSTYLE& style
00355 );
00356
00357
00358
00359 INT32 AddStyle (
00360 RVCLINESTYLE& style
00361 );
00362
00363
00364
00365 INT32 AddStyle (
00366 const RVC::OBJECTNAME& name,
00367 const LINESTYLE& style
00368 );
00369
00370
00371
00372 INT32 AddStyle (
00373 RVCTEXTSTYLE& style
00374 );
00375
00376
00377
00378 INT32 AddStyle (
00379 const RVC::OBJECTNAME& name,
00380 const TEXTSTYLE& style
00381 );
00382
00383
00384
00385 ERRVALUE Combine (
00386 const RVC::OBJECT& DestParentObj,
00387 RVC::STYLE& DestStyleObj,
00388 SIMPLE_ARRAY<INT32>& FontTrans,
00389 SIMPLE_ARRAY<INT32> PattTrans[PATTERN_NumTypes]
00390 );
00391
00392
00393
00394 ERRVALUE Combine (
00395 const RVC::OBJECT& DestParentObj,
00396 RVC::STYLE& DestStyleObj
00397 );
00398
00399
00400 void ConvertStyle (
00401 RVCLINESTYLE& rvcstyle,
00402 const LINESTYLE& linestyle
00403 ) const;
00404
00405
00406 void ConvertStyle (
00407 LINESTYLE& linestyle,
00408 const RVCLINESTYLE& rvcstyle
00409 ) const;
00410
00411
00412 void ConvertStyle (
00413 RVCPOINTSTYLE& rvcstyle,
00414 const POINTSTYLE& pointstyle
00415 ) const;
00416
00417
00418 void ConvertStyle (
00419 POINTSTYLE& pointstyle,
00420 const RVCPOINTSTYLE& rvcstyle
00421 ) const;
00422
00423
00424 void ConvertStyle (
00425 RVCPOLYSTYLE& rvcstyle,
00426 const POLYSTYLE& polystyle
00427 ) const;
00428
00429
00430 void ConvertStyle (
00431 POLYSTYLE& polystyle,
00432 const RVCPOLYSTYLE& rvcstyle
00433 ) const;
00434
00435
00436 void ConvertStyle (
00437 RVCTEXTSTYLE& rvcstyle,
00438 const TEXTSTYLE& textstyle
00439 );
00440
00441
00442 void ConvertStyle (
00443 TEXTSTYLE& textstyle,
00444 const RVCTEXTSTYLE& rvcstyle
00445 ) const;
00446
00447
00448
00449 INT32 DeletePattern (
00450 PATTERN PattType,
00451 INT32 PattNum
00452 );
00453
00454
00455
00456 INT32 DeleteStyle (
00457 TYPE StyleType,
00458 INT32 StyleNum
00459 );
00460
00461
00462 ERRVALUE DeleteStyleType (
00463 TYPE StyleType
00464 );
00465
00466
00467
00468 INT32 FindFontName (
00469 INT32 start,
00470 const MISTRING& name
00471 ) const;
00472
00473
00474
00475 INT32 FontTransAdd (
00476 const MISTRING& name
00477 );
00478
00479
00480
00481 INT32 FontTransIndexToHandle (
00482 INT32 FontNum
00483 );
00484
00485
00486
00487 ERRVALUE FontTransIndexToName (
00488 INT32 FontNum,
00489 MISTRING& name
00490 ) const;
00491
00492
00493
00494 INT32 FindPattern (
00495 PATTERN PattType,
00496 INT32 StartPattNum,
00497 const RVC::OBJECTNAME& name
00498 ) const;
00499
00500
00501
00502 INT32 FindStyle (
00503 TYPE StyleType,
00504 INT32 StartStyleNum,
00505 const RVC::OBJECTNAME& name
00506 ) const;
00507
00508
00509
00510 INT32 GetFontNameCount (
00511 ) const;
00512
00513
00514
00515 INT32 GetPatternCount (
00516 PATTERN PattType
00517 ) const;
00518
00519
00520
00521 INT32 GetPatternMaxSize (
00522 PATTERN PattType
00523 ) const;
00524
00525
00526
00527 INT32 GetPatternSize (
00528 PATTERN PattType,
00529 INT32 PattNum
00530 ) const;
00531
00532
00533
00534 INT32 GetStyleCount (
00535 TYPE StyleType
00536 ) const;
00537
00538
00539 ERRVALUE Make (
00540 const RVC::OBJECT& parent,
00541 const RVC::OBJECTNAME& name,
00542 const RVC::OBJECTDESC& desc,
00543 const char* Source = 0
00544 );
00545
00546
00547 ERRVALUE Make (
00548 const RVC::OBJITEM& ObjItem,
00549 const char* Source = 0
00550 );
00551
00552
00553 ERRVALUE ReadPattern (
00554 PATTERN PattType,
00555 INT32 PatternNum,
00556 void *Pattern
00557 ) const;
00558
00559
00560 ERRVALUE ReadPattern (
00561 PATTERN PattType,
00562 INT32 PatternNum,
00563 BASEPATTERN& Pattern
00564 ) const;
00565
00566
00567 ERRVALUE ReadPattern (
00568 INT32 PatternNum,
00569 BITMAPPATTERN& Pattern
00570 ) const;
00571
00572
00573 ERRVALUE ReadPattern (
00574 INT32 PatternNum,
00575 HATCHPATTERN& Pattern
00576 ) const;
00577
00578
00579 ERRVALUE ReadPattern (
00580 INT32 PatternNum,
00581 LINEPATTERN& Pattern
00582 ) const;
00583
00584
00585 ERRVALUE ReadPattern (
00586 INT32 PatternNum,
00587 SYMBOLPATTERN& Pattern
00588 ) const;
00589
00590
00591 ERRVALUE ReadPatternHdr (
00592 PATTERN PattType,
00593 INT32 PatternNum,
00594 void *PattHdr
00595 ) const;
00596
00597
00598 ERRVALUE ReadPatternName (
00599 PATTERN PattType,
00600 INT32 PattNum,
00601 RVC::OBJECTNAME& name
00602 ) const;
00603
00604
00605 ERRVALUE ReadStyle (
00606 INT32 StyleNum,
00607 RVCPOINTSTYLE& style
00608 ) const;
00609
00610
00611 ERRVALUE ReadStyle (
00612 INT32 StyleNum,
00613 POINTSTYLE& style
00614 ) const;
00615
00616
00617 ERRVALUE ReadStyle (
00618 INT32 StyleNum,
00619 RVCPOLYSTYLE& style
00620 ) const;
00621
00622
00623 ERRVALUE ReadStyle (
00624 INT32 StyleNum,
00625 POLYSTYLE& style
00626 ) const;
00627
00628
00629 ERRVALUE ReadStyle (
00630 INT32 StyleNum,
00631 RVCLINESTYLE& style
00632 ) const;
00633
00634
00635 ERRVALUE ReadStyle (
00636 INT32 StyleNum,
00637 LINESTYLE& style
00638 ) const;
00639
00640
00641 ERRVALUE ReadStyle (
00642 INT32 StyleNum,
00643 RVCTEXTSTYLE& style
00644 ) const;
00645
00646
00647 ERRVALUE ReadStyle (
00648 INT32 StyleNum,
00649 TEXTSTYLE& style
00650 ) const;
00651
00652
00653 ERRVALUE ReadStyleName (
00654 TYPE StyleType,
00655 INT32 StyleNum,
00656 RVC::OBJECTNAME& name
00657 ) const;
00658
00659
00660 ERRVALUE WritePattern (
00661 PATTERN PattType,
00662 INT32 PatternNum,
00663 void *Pattern
00664 );
00665
00666
00667 ERRVALUE WritePattern (
00668 PATTERN PattType,
00669 INT32 PatternNum,
00670 const BASEPATTERN& Pattern
00671 );
00672
00673
00674 ERRVALUE WritePattern (
00675 INT32 PatternNum,
00676 const BITMAPPATTERN& Pattern
00677 );
00678
00679
00680 ERRVALUE WritePattern (
00681 INT32 PatternNum,
00682 const HATCHPATTERN& Pattern
00683 );
00684
00685
00686 ERRVALUE WritePattern (
00687 INT32 PatternNum,
00688 const LINEPATTERN& Pattern
00689 );
00690
00691
00692 ERRVALUE WritePattern (
00693 INT32 PatternNum,
00694 const SYMBOLPATTERN& Pattern
00695 );
00696
00697
00698 ERRVALUE WritePatternName (
00699 PATTERN PattType,
00700 INT32 PatternNum,
00701 const OBJECTNAME& name
00702 );
00703
00704
00705 ERRVALUE WriteStyle (
00706 INT32 StyleNum,
00707 RVCPOINTSTYLE& style
00708 );
00709
00710
00711 ERRVALUE WriteStyle (
00712 INT32 StyleNum,
00713 const RVC::OBJECTNAME& name,
00714 const POINTSTYLE& style
00715 );
00716
00717
00718 ERRVALUE WriteStyle (
00719 INT32 StyleNum,
00720 RVCPOLYSTYLE& style
00721 );
00722
00723
00724 ERRVALUE WriteStyle (
00725 INT32 StyleNum,
00726 const RVC::OBJECTNAME& name,
00727 const POLYSTYLE& style
00728 );
00729
00730
00731 ERRVALUE WriteStyle (
00732 INT32 StyleNum,
00733 RVCLINESTYLE& style
00734 );
00735
00736
00737 ERRVALUE WriteStyle (
00738 INT32 StyleNum,
00739 const RVC::OBJECTNAME& name,
00740 const LINESTYLE& style
00741 );
00742
00743
00744 ERRVALUE WriteStyle (
00745 INT32 StyleNum,
00746 RVCTEXTSTYLE& style
00747 );
00748
00749
00750 ERRVALUE WriteStyle (
00751 INT32 StyleNum,
00752 const RVC::OBJECTNAME& name,
00753 const TEXTSTYLE& style
00754 );
00755
00756
00757 ERRVALUE WriteStyleName (
00758 TYPE StyleType,
00759 INT32 StyleNum,
00760 const RVC::OBJECTNAME& name
00761 );
00762
00763 private:
00764 #ifndef GENERATING_DOXYGEN_OUTPUT
00765
00766
00767 virtual ERRVALUE v_CloseObject ();
00768 virtual OBJTYPE v_GetDftObjectType () const;
00769 virtual bool v_IsObjectOpen () const;
00770 virtual ERRVALUE v_OpenObject (OPENMODE OpenFlags, MDLGPARENT parent);
00771
00772 int m_StyleID;
00773 #endif
00774
00775 };
00776
00777
00778
00779 class STYLE::BASEPATTERN {
00780 public:
00781
00782
00783 BASEPATTERN (
00784 ) : m_PattBuff(0), m_PattHdrSize(sizeof(RVCPATTHDR)), m_PattBuffSize(sizeof(RVCPATTHDR)), m_BuffSizeAlloc(sizeof(RVCPATTHDR))
00785 { MmAllocCExc((void**)&m_PattBuff, m_PattBuffSize); }
00786
00787
00788 ~BASEPATTERN (
00789 ) { MmFree(m_PattBuff); }
00790
00791
00792
00793 ERRVALUE AppendColor (
00794 const COLOR& color
00795 );
00796
00797
00798 void Clear (
00799 ) { m_PattBuffSize = m_PattHdrSize; memset(m_PattBuff,0,m_PattHdrSize); }
00800
00801
00802 const RVC::OBJECTNAME& GetName (
00803 ) const { return (*reinterpret_cast<const RVC::OBJECTNAME*>(m_PattBuff)); }
00804
00805
00806 const COLOR& GetColor (
00807 UINT8 idx
00808 ) const { return (GetColors()[idx]); }
00809
00810
00811 const COLOR* GetColors (
00812 ) const { return (reinterpret_cast<COLOR*>(m_PattBuff + m_PattHdrSize)); }
00813
00814
00815 INT32 GetNumColors (
00816 ) const { return (reinterpret_cast<const RVCPATTHDR*>(m_PattBuff)->numcolors); }
00817
00818
00819 INT32 GetNumElements (
00820 ) const { return (reinterpret_cast<const RVCPATTHDR*>(m_PattBuff)->numelements); }
00821
00822
00823
00824 INT32 GetSize (
00825 ) const { return (m_PattBuffSize); }
00826
00827
00828 bool IsEqualDef (
00829 const BASEPATTERN& rhs
00830 ) const {
00831 if (m_PattBuffSize != rhs.m_PattBuffSize) return (false);
00832 return (memcmp(m_PattBuff+sizeof(RVC::OBJECTNAME),rhs.m_PattBuff+sizeof(RVC::OBJECTNAME),m_PattBuffSize-sizeof(RVC::OBJECTNAME))==0);
00833 }
00834
00835
00836 void SetColor (
00837 UINT8 idx,
00838 const COLOR& color
00839 ) { if (idx < GetNumColors()) reinterpret_cast<COLOR*>(m_PattBuff + m_PattHdrSize)[idx] = color; }
00840
00841
00842 void SetName (
00843 const OBJECTNAME& name
00844 ) { *reinterpret_cast<RVC::OBJECTNAME*>(m_PattBuff) = name; }
00845
00846
00847
00848 operator const void* (
00849 ) const { return (m_PattBuff); }
00850
00851 protected:
00852
00853
00854 BASEPATTERN (
00855 int PattHdrSize
00856 ) : m_PattBuff(0), m_PattHdrSize(PattHdrSize), m_PattBuffSize(PattHdrSize), m_BuffSizeAlloc(PattHdrSize)
00857 { MmAllocCExc((void**)&m_PattBuff, m_PattBuffSize); }
00858
00859
00860 BASEPATTERN (const BASEPATTERN& rhs);
00861
00862
00863 BASEPATTERN& operator= (const BASEPATTERN& rhs);
00864
00865
00866 void DeleteColorSet (
00867 const UINT8 *set
00868 );
00869
00870
00871 void DeleteFromBuffer (
00872 INT32 offset,
00873 INT32 numbytes
00874 );
00875
00876
00877 const UINT8* GetPattBuffer (
00878 ) const { return (m_PattBuff); }
00879
00880
00881 UINT8* GetPattBuffer (
00882 ) { return (m_PattBuff); }
00883
00884
00885 const UINT8* GetFirstElemPtr (
00886 ) const { return (m_PattBuff+m_PattHdrSize+GetNumColors()*sizeof(COLOR)); }
00887
00888
00889 UINT8* GetFirstElemPtr (
00890 ) { return (m_PattBuff+m_PattHdrSize+GetNumColors()*sizeof(COLOR)); }
00891
00892
00893 ERRVALUE InsertIntoBuffer (
00894 INT32 offset,
00895 INT32 numbytes,
00896 const void *data = 0
00897 );
00898
00899 #ifndef GENERATING_DOXYGEN_OUTPUT
00900 UINT8* m_PattBuff;
00901 INT32 m_PattHdrSize;
00902 INT32 m_PattBuffSize;
00903 mutable SIMPLE_ARRAY<UINT32> m_OffsetArray;
00904 #endif // GENERATING_DOXYGEN_OUTPUT
00905
00906 private:
00907 #ifndef GENERATING_DOXYGEN_OUTPUT
00908
00909 INT32 m_BuffSizeAlloc;
00910
00911 friend class STYLE;
00912 #endif // GENERATING_DOXYGEN_OUTPUT
00913 };
00914
00915
00916
00917 class STYLE::BITMAPPATTERN : public STYLE::BASEPATTERN {
00918 public:
00919
00920
00921 BITMAPPATTERN (
00922 ) : BASEPATTERN(sizeof(BITMAPPATTHDR)) {}
00923
00924
00925 BITMAPPATTERN (
00926 const BITMAPPATTERN& rhs
00927 ) : BASEPATTERN(rhs) {}
00928
00929
00930 ~BITMAPPATTERN (
00931 ) { }
00932
00933
00934 BITMAPPATTERN& operator= (
00935 const BITMAPPATTERN& rhs
00936 ) { if (this != &rhs) { BASEPATTERN::operator=(rhs); } return (*this); }
00937
00938 ERRVALUE Create (
00939 INT16 xsize,
00940 INT16 ysize
00941 );
00942
00943 UINT8 GetCell (
00944 INT16 x,
00945 INT16 y
00946 ) const { return (GetFirstElemPtr()[y*GetSizeX()+x]); }
00947
00948 INT16 GetHotSpotX (
00949 ) const { return (reinterpret_cast<const BITMAPPATTHDR*>(m_PattBuff)->xhot); }
00950
00951 INT16 GetHotSpotY (
00952 ) const { return (reinterpret_cast<const BITMAPPATTHDR*>(m_PattBuff)->yhot); }
00953
00954 INT16 GetIntervalX (
00955 ) const { return (reinterpret_cast<const BITMAPPATTHDR*>(m_PattBuff)->xspace); }
00956
00957 INT16 GetIntervalY (
00958 ) const { return (reinterpret_cast<const BITMAPPATTHDR*>(m_PattBuff)->yspace); }
00959
00960 INT16 GetSizeX (
00961 ) const { return (reinterpret_cast<const BITMAPPATTHDR*>(m_PattBuff)->xsize); }
00962
00963 INT16 GetSizeY (
00964 ) const { return (reinterpret_cast<const BITMAPPATTHDR*>(m_PattBuff)->ysize); }
00965
00966 void SetCell (
00967 INT16 x,
00968 INT16 y,
00969 UINT8 value
00970 ) { GetFirstElemPtr()[y*GetSizeX()+x] = value; }
00971
00972 void SetHotSpotX (
00973 INT16 hotspotx
00974 ) { reinterpret_cast<BITMAPPATTHDR*>(m_PattBuff)->xhot = hotspotx; }
00975
00976 void SetHotSpotY (
00977 INT16 hotspoty
00978 ) { reinterpret_cast<BITMAPPATTHDR*>(m_PattBuff)->yhot = hotspoty; }
00979
00980 void SetIntervalX (
00981 INT16 intervalx
00982 ) { reinterpret_cast<BITMAPPATTHDR*>(m_PattBuff)->xspace = intervalx; }
00983
00984 void SetIntervalY (
00985 INT16 intervaly
00986 ) { reinterpret_cast<BITMAPPATTHDR*>(m_PattBuff)->yspace = intervaly; }
00987
00988 };
00989
00990
00991
00992 class STYLE::HATCHPATTERN : public STYLE::BASEPATTERN {
00993 public:
00994 HATCHPATTERN (
00995 ) : BASEPATTERN(sizeof(HATCHPATTHDR)) {}
00996
00997
00998 HATCHPATTERN (
00999 const HATCHPATTERN& rhs
01000 ) : BASEPATTERN(rhs) {}
01001
01002
01003 ~HATCHPATTERN (
01004 ) { }
01005
01006
01007 HATCHPATTERN& operator= (
01008 const HATCHPATTERN& rhs
01009 ) { if (this != &rhs) { BASEPATTERN::operator=(rhs); } return (*this); }
01010
01011 };
01012
01013
01014
01015 class STYLE::LINEPATTERN : public STYLE::BASEPATTERN {
01016 public:
01017
01018 enum ELEMENT_TYPE {
01019 ELEMENT_TYPE_Line = 0,
01020 ELEMENT_TYPE_CrossLine = 1,
01021 ELEMENT_TYPE_Circle = 2,
01022 ELEMENT_TYPE_Polyline = 3,
01023 ELEMENT_TYPE_Polygon = 4,
01024 ELEMENT_TYPE_Text = 5,
01025 ELEMENT_TYPE_Symbol = 6,
01026 ELEMENT_TYPE_COUNT
01027 };
01028
01029 class ITERATOR;
01030 class ELEMENT;
01031
01032
01033
01034 class ELEMENT_SHARED {
01035 public:
01036
01037
01038
01039 MGD::LINECAP GetCapStyle (
01040 ) const { return ((m_pData->flags & LINEPATTFLAG_CapRound) ? MGD::LINECAP_Round : MGD::LINECAP_Butt); }
01041
01042
01043
01044 UINT8 GetColorIndex (
01045 ) const { return (m_pData->colornum); }
01046
01047
01048
01049 INT16 GetInterval (
01050 ) const { return (m_pData->xspacing); }
01051
01052 MGD::LINEJOIN GetJoinStyle (
01053 ) const { return ((m_pData->flags & LINEPATTFLAG_JoinMiter) ? MGD::LINEJOIN_Miter : (m_pData->flags & LINEPATTFLAG_JoinBevel) ? MGD::LINEJOIN_Bevel : MGD::LINEJOIN_Round); }
01054
01055
01056
01057 INT16 GetOffsetAlong (
01058 ) const { return (m_pData->xoffset); }
01059
01060
01061
01062 INT16 GetOffsetAside (
01063 ) const { return ((m_pData->type != ELEMENT_TYPE_Line) ? -m_pData->yoffset : m_pData->yoffset); }
01064
01065
01066
01067 INT16 GetSize (
01068 ) const { return (m_pData->xsize); }
01069
01070
01071
01072 INT16 GetThickness (
01073 ) const { return (m_pData->thickness); }
01074
01075
01076
01077 ELEMENT_TYPE GetType (
01078 ) const { return (static_cast<ELEMENT_TYPE>(m_pData->type)); }
01079
01080
01081
01082 bool IsFilled (
01083 ) const { return ((m_pData->flags & LINEPATTFLAG_Filled) != 0); }
01084
01085 private:
01086 #ifndef GENERATING_DOXYGEN_OUTPUT
01087
01088 const LINEPATTELEM *m_pData;
01089 void *m_pExtra;
01090
01091
01092 ELEMENT_SHARED (
01093 ): m_pData(0), m_pExtra(0) { }
01094
01095 explicit ELEMENT_SHARED (const void *pElemData)
01096 : m_pData(static_cast<const LINEPATTELEM*>(pElemData)), m_pExtra(static_cast<UINT8*>(const_cast<void*>(pElemData)) + sizeof(LINEPATTELEM))
01097 { }
01098
01099
01100 ~ELEMENT_SHARED (
01101 ) { }
01102
01103 friend class RVC::STYLE::LINEPATTERN;
01104 friend class ELEMENT;
01105 friend class ITERATOR;
01106 #endif // GENERATING_DOXYGEN_OUTPUT
01107 };
01108
01109
01110 class ELEMENT : public ELEMENT_SHARED {
01111 public:
01112
01113
01114 ELEMENT (
01115 ) { memset(&m_MyData,0,sizeof(m_MyData)); m_pData = &m_MyData; }
01116
01117
01118 ELEMENT (
01119 const ELEMENT& rhs
01120 );
01121
01122
01123 ELEMENT (
01124 const ELEMENT_SHARED& rhs
01125 );
01126
01127
01128 explicit ELEMENT (
01129 ELEMENT_TYPE type
01130 );
01131
01132
01133 ~ELEMENT (
01134 ) { if (m_pExtra != 0) free(m_pExtra); }
01135
01136
01137 ELEMENT& operator= (
01138 const ELEMENT& rhs
01139 );
01140
01141
01142 ELEMENT& operator= (
01143 const ELEMENT_SHARED& rhs
01144 );
01145
01146
01147 void SetCapStyle (
01148 MGD::LINECAP linecap
01149 ) { if (linecap == MGD::LINECAP_Round) m_MyData.flags |= LINEPATTFLAG_CapRound; else m_MyData.flags &= ~LINEPATTFLAG_CapRound; }
01150
01151
01152 void SetColorIndex (
01153 UINT8 idx
01154 ) { m_MyData.colornum = idx; }
01155
01156 void SetFilled (
01157 bool filled
01158 ) { if (filled) m_MyData.flags |= LINEPATTFLAG_Filled; else m_MyData.flags &= ~LINEPATTFLAG_Filled; }
01159
01160 void SetInterval (
01161 INT16 interval
01162 ) { m_MyData.xspacing = interval; }
01163
01164 void SetJoinStyle (
01165 MGD::LINEJOIN linejoin
01166 ) {
01167 m_MyData.flags &= ~(LINEPATTFLAG_JoinMiter|LINEPATTFLAG_JoinBevel);
01168 if (linejoin == MGD::LINEJOIN_Miter) m_MyData.flags |= LINEPATTFLAG_JoinMiter;
01169 else if (linejoin == MGD::LINEJOIN_Bevel) m_MyData.flags |= LINEPATTFLAG_JoinBevel;
01170 }
01171
01172 void SetOffsetAlong (
01173 INT16 offset
01174 ) { m_MyData.xoffset = offset; }
01175
01176 void SetOffsetAside (
01177 INT16 offset
01178 ) { m_MyData.yoffset = (m_MyData.type != ELEMENT_TYPE_Line) ? -offset : offset; }
01179
01180 void SetSize (
01181 INT16 size
01182 ) { m_MyData.xsize = size; }
01183
01184 void SetThickness (
01185 INT16 thickness
01186 ) { m_MyData.thickness = thickness; }
01187
01188 private:
01189 #ifndef GENERATING_DOXYGEN_OUTPUT
01190 LINEPATTELEM m_MyData;
01191 #endif // GENERATING_DOXYGEN_OUTPUT
01192 };
01193
01194
01195 class ITERATOR {
01196 public:
01197
01198
01199 ITERATOR (
01200 ): m_pEnd(0) { }
01201
01202
01203 ~ITERATOR (
01204 ) { }
01205
01206
01207 const ELEMENT_SHARED& operator* (
01208 ) const { return (m_element); }
01209
01210
01211 const ELEMENT_SHARED* operator-> (
01212 ) const { return (&m_element); }
01213
01214
01215 ITERATOR& operator++ ();
01216
01217
01218 bool operator== (
01219 const ITERATOR& rhs
01220 ) const { return ((m_pEnd == 0 && rhs.m_pEnd == 0) || m_element.m_pData == rhs.m_element.m_pData); }
01221
01222
01223 bool operator!= (
01224 const ITERATOR& rhs
01225 ) const { return (!(*this == rhs)); }
01226
01227 private:
01228 #ifndef GENERATING_DOXYGEN_OUTPUT
01229
01230 ELEMENT_SHARED m_element;
01231 const void *m_pEnd;
01232
01233 ITERATOR (const void *pData, const void *pEnd)
01234 : m_element(pData), m_pEnd(pEnd)
01235 { }
01236
01237 friend class RVC::STYLE::LINEPATTERN;
01238 #endif // GENERATING_DOXYGEN_OUTPUT
01239 };
01240
01241
01242 LINEPATTERN (
01243 ) : BASEPATTERN(sizeof(LINEPATTHDR)) {}
01244
01245
01246 LINEPATTERN (
01247 const LINEPATTERN& rhs
01248 ) : BASEPATTERN(rhs) {}
01249
01250
01251 ~LINEPATTERN (
01252 ) { }
01253
01254
01255 LINEPATTERN& operator= (
01256 const LINEPATTERN& rhs
01257 ) { if (this != &rhs) { BASEPATTERN::operator=(rhs); } return (*this); }
01258
01259
01260 ITERATOR Begin (
01261 ) const { return (ITERATOR(GetFirstElemPtr(),GetPattBuffer()+GetSize())); }
01262
01263
01264
01265 ERRVALUE DeleteElement (
01266 unsigned idx
01267 );
01268
01269
01270
01271 void DeleteUnusedColors (
01272 );
01273
01274
01275 ITERATOR End (
01276 #ifdef WIN32
01277 ) const { return (ITERATOR()); }
01278 #else
01279 ) const { ITERATOR it; return (it); }
01280 #endif
01281
01282
01283
01284 ELEMENT GetElement (
01285 unsigned idx
01286 ) const;
01287
01288
01289 INT16 GetExtentLeft (
01290 ) const { return (reinterpret_cast<LINEPATTHDR*>(m_PattBuff)->extentsa); }
01291
01292
01293 INT16 GetExtentRight (
01294 ) const { return (reinterpret_cast<LINEPATTHDR*>(m_PattBuff)->extentsb); }
01295
01296
01297
01298 ERRVALUE InsertElement (
01299 unsigned idx,
01300 const ELEMENT& element
01301 );
01302
01303
01304
01305 ERRVALUE SetElement (
01306 unsigned idx,
01307 const ELEMENT& element
01308 );
01309
01310 private:
01311 #ifndef GENERATING_DOXYGEN_OUTPUT
01312
01313 ERRVALUE BuildOffsetIndex () const;
01314 INT32 GetOffset (unsigned idx) const;
01315 #endif
01316
01317 };
01318
01319
01320
01321 class STYLE::SYMBOLPATTERN : public STYLE::BASEPATTERN {
01322 public:
01323 SYMBOLPATTERN (
01324 ) : BASEPATTERN(sizeof(SYMBOLHDR)) {}
01325
01326
01327 SYMBOLPATTERN (
01328 const SYMBOLPATTERN& rhs
01329 ) : BASEPATTERN(rhs) {}
01330
01331
01332 ~SYMBOLPATTERN (
01333 ) { }
01334
01335
01336 SYMBOLPATTERN& operator= (
01337 const SYMBOLPATTERN& rhs
01338 ) { if (this != &rhs) { BASEPATTERN::operator=(rhs); } return (*this); }
01339 };
01340
01341
01342 DEFINE_ENUM_OP_INCREMENT(RVC::STYLE::TYPE);
01343 DEFINE_ENUM_OP_INCREMENT(RVC::STYLE::PATTERN);
01344
01345
01346
01347 class STYLE::GETOBJFILTER_ISSELECTABLE : public GETOBJFILTER {
01348 public:
01349 GETOBJFILTER_ISSELECTABLE (
01350 bool IsSaving = false
01351 );
01352 private:
01353 #ifndef GENERATING_DOXYGEN_OUTPUT
01354 bool m_IsSaving;
01355 virtual bool v_HasSelectableSubObjects (const RVC::OBJITEM& objitem);
01356 virtual bool v_IsSelectable (const RVC::OBJITEM& ObjItem, int position);
01357 #endif // GENERATING_DOXYGEN_OUTPUT
01358 };
01359
01360
01361
01362
01363 class STYLE::GETOBJFILTER_HASPATTERNTYPE : public GETOBJFILTER {
01364 public:
01365 GETOBJFILTER_HASPATTERNTYPE (
01366 STYLE::PATTERN PatternType
01367 ) : m_PatternType(PatternType) {}
01368
01369 private:
01370 #ifndef GENERATING_DOXYGEN_OUTPUT
01371 STYLE::PATTERN m_PatternType;
01372
01373 virtual bool v_HasSele