00001
00297 #ifndef INC_GRE_VIEW_H
00298 #define INC_GRE_VIEW_H
00299
00300 #ifndef INC_GRE_OBJECTBASE_H
00301 #include <gre/objectbase.h>
00302 #endif
00303
00304 #ifndef INC_GRE_VIEWPOS_H
00305 #include <gre/viewpos.h>
00306 #endif
00307
00308 #ifndef INC_GRE_GEOLOCK_H
00309 #include <gre/geolock.h>
00310 #endif
00311
00312 #ifndef INC_MI32_STEREOVIEW_H
00313 #include <mi32/stereoview.h>
00314 #endif
00315
00316 #ifndef INC_MI32_SERIALIZABLE_H
00317 #include <mi32/serializable.h>
00318 #endif
00319
00320 #ifndef INC_MI32_LATLONFM_H
00321 #include <mi32/latlonfm.h>
00322 #endif
00323
00324 #ifndef INC_MI32_COLOR_H
00325 #include <mi32/color.h>
00326 #endif
00327
00328 #ifndef INC_MI32_CRITSEC_H
00329 #include <mi32/critsec.h>
00330 #endif
00331
00332 #ifndef INC_MI32_MITHREAD_H
00333 #include <mi32/mithread.h>
00334 #endif
00335
00336 #if !defined(INC_MGUI_TIMER_H) && defined(USE_MGUI)
00337 #include <mgui/timer.h>
00338 #endif
00339
00340 #ifndef INC_MAP
00341 #define INC_MAP
00342 #include <map>
00343 #endif
00344
00345
00346 #ifndef GENERATING_DOXYGEN_OUTPUT
00347
00348 namespace RVC {
00349 class ELEMENT;
00350 }
00351
00352 namespace GRE {
00353 class DLG_VIEWZOOM;
00354 class VIEW_LEGACY_STATUSINFO;
00355 class VIEWCOMMON;
00356 }
00357
00358 namespace MGD {
00359 class DEVICE;
00360 class DEVICE_MEM32RGBA;
00361 class CONTEXT;
00362 }
00363
00364 namespace MGUI {
00365 class CTRL_TOOLTIP;
00366 }
00367
00368 namespace SPATMOD {
00369 namespace IMAGE {
00370 class STAGE_ARRAY;
00371 }
00372 }
00373
00374 namespace SML {
00375 union ARG;
00376 class FLAG;
00377 class CLASSMEMBER;
00378 class CONTEXT;
00379 }
00380
00381 class UNSIGNEDSET;
00382 class REGION2D;
00383 class RENDERBUFFER;
00384 class STEREODEVICE;
00385 class STEREORENDER;
00386 class MISTATUSMANAGER;
00387 class MISTATUSCONTEXT;
00388 class VIEW_LEGACY_DATATIP;
00389 class ZVIEW;
00390
00391 #endif
00392
00393
00394 enum GRE_PROJACCUR {
00395 GRE_PROJACCUR_Exact = 2,
00396 GRE_PROJACCUR_Auto = 3,
00397 };
00398
00399 enum VIEWFLAGS {
00400 VIEWFLAG_None = 0,
00401 VIEWFLAG_Locator = 0x00000001,
00402 VIEWFLAG_3D = 0x00000002,
00403 VIEWFLAG_AllowDiffZoom = 0x00000010,
00404 VIEWFLAG_Hardcopy = 0x00000020,
00405 VIEWFLAG_NoDrawLayers = 0x00000080,
00406 VIEWFLAG_NoDestroyShell = 0x00000100,
00407 VIEWFLAG_DialogModal = 0x00000400,
00408 VIEWFLAG_AllowGeoLock = 0x00000800,
00409 VIEWFLAG_NoCloseOption = 0x00001000,
00410 VIEWFLAG_DestroyOnClose = 0x00002000,
00411 VIEWFLAG_NoSetPixmapBG = 0x00004000,
00412 VIEWFLAG_NoSetPrevViewPos = 0x00008000,
00413 VIEWFLAG_DisableDataTips = 0x00010000,
00414 VIEWFLAG_NoRenderSeparate = 0x00020000,
00415 VIEWFLAG_AutoPanGPS = 0x00040000,
00416 VIEWFLAG_NoBlankScreen = 0x00080000,
00417 VIEWFLAG_NoEditColorHighlight = 0x00100000,
00418 VIEWFLAG_NoFillBackground = 0x00200000,
00419 VIEWFLAG_AllowPanOffEdge = 0x00400000,
00420 VIEWFLAG_NoShowTrackingCursor = 0x00800000,
00421 VIEWFLAG_AlwaysTestCancel = 0x02000000,
00422 VIEWFLAG_NoDrawOtherViews = 0x04000000,
00423 VIEWFLAG_NoShowInLocator = 0x08000000,
00424
00425 VIEWFLAG_SaveMask = (VIEWFLAG_AllowDiffZoom)
00426 };
00427 #ifndef GENERATING_DOXYGEN_OUTPUT
00428 DEFINE_ENUM_OP_BITWISE(VIEWFLAGS);
00429 #endif
00430
00431
00432 namespace GRE {
00433
00434 class VIEW : public GRE::OBJECT {
00435
00436 public:
00437
00439 enum CREATEFLAGS {
00440 CREATEFLAG_None = 0x00000000,
00441 CREATEFLAG_3D = 0x00000001,
00442 CREATEFLAG_NoCallCreateCB = 0x00000002,
00443 CREATEFLAG_NoRenderSeparate = 0x00000004,
00444 CREATEFLAG_Hardcopy = 0x00000008,
00445 CREATEFLAG_DisableDraw = 0x00000010,
00446 CREATEFLAG_Locator = 0x00000020,
00447 };
00448
00449 enum COLORUSE {
00450 COLORUSE_Background,
00451 COLORUSE_HighlightElem,
00452 COLORUSE_ActiveElem,
00453 COLORUSE_DataTipElem,
00454 COLORUSE_COUNT
00455 };
00456
00457 enum DATATIPSELECTION {
00458 DATATIPSELECTION_FromView = 0,
00459 DATATIPSELECTION_None = 1,
00460 DATATIPSELECTION_ActiveLayer = 2,
00461 DATATIPSELECTION_AllLayers = 3,
00462 DATATIPSELECTION_AllVisible = 4,
00463 DATATIPSELECTION_AutoScale = 5,
00464 DATATIPSELECTION_ObjectNames = 6,
00465 DATATIPSELECTION_ReverseGeocode = 7,
00466 };
00467
00469 typedef fastdelegate::FastDelegate<void(VIEW*)> DELEGATE_POINTERENTERLEAVE;
00470
00472 typedef fastdelegate::FastDelegate<void(VIEW*, const DPOINT2D&)> DELEGATE_POINTERMOVE;
00473
00474 #ifdef USE_MGUI
00476 static void CursorTrackRestoreAll ();
00477 #endif
00478
00479 #ifdef USE_MGUI
00481 static void CursorTrackSetPosAll (
00482 const DPOINT2D& pt,
00483 const SPATREF::COORDREFSYS& crs,
00484 const GRE::VIEW *viewskip = 0
00485 );
00486 #endif
00487
00490 static bool DlgEditGlobalSettings (
00491 MDLGPARENT dlgparent
00492 );
00493
00495 static VIEW* FindNextOfGroup (
00496 const GRE::GROUP *group,
00497 VIEW *view = 0
00498 );
00499
00501 static VIEW* FindNextOfLayer (
00502 const GRE::LAYER *layer,
00503 VIEW *view = 0
00504 );
00505
00507 static void GetDftColor (
00508 COLORUSE coloruse,
00509 COLOR& color
00510 );
00511
00513 static const VIEWCOMMON& GetGlobalOptions (
00514 ) { return (GetGlobalOptionsPriv()); }
00515
00517 static const STEREODEVICE& GetStereoDeviceShared2D (
00518 ) { return (GetStereoDevicePriv2D()); }
00519
00521 static const STEREODEVICE& GetStereoDeviceShared3D (
00522 ) { return (GetStereoDevicePriv3D()); }
00523
00525 static bool GetUpdateAfterDrawLayer (
00526 );
00527
00529 static bool GetZoomPanWaitForRMB (
00530 );
00531
00533 static void SetGlobalOptions (
00534 const VIEWCOMMON& options
00535 );
00536
00538 static void SetStereoDeviceShared2D (
00539 const STEREODEVICE& StereoDevice
00540 );
00541
00543 static void SetStereoDeviceShared3D (
00544 const STEREODEVICE& StereoDevice
00545 );
00546
00548 static void SetTrackCursor (
00549 bool TrackCursor
00550 );
00551
00553 static void SetUpdateAfterDrawLayer (
00554 bool UpdateAfterDrawLayer
00555 );
00556
00557
00558 static void SML_ClassInstall (
00559 SML::CONTEXT *context
00560 );
00561
00565 VIEW ();
00566
00568 virtual ~VIEW ();
00569
00571 void AddDelegateOnPointerEnter (
00572 DELEGATE_POINTERENTERLEAVE delegate
00573 );
00574
00576 void AddDelegateOnPointerLeave (
00577 DELEGATE_POINTERENTERLEAVE delegate
00578 );
00579
00582 void AddDelegateOnPointerMove (
00583 DELEGATE_POINTERMOVE delegate
00584 );
00585
00587 void AttachGroupView (
00588 GRE::GROUPVIEW *groupview
00589 );
00590
00592 void AttachLayerView (
00593 GRE::LAYERVIEW *layerview
00594 );
00595
00598 void CancelDrawing (
00599 ERRVALUE err = EUserCancel
00600 );
00601
00603 void ClearMessage ();
00604
00606 bool ContainsLayer (
00607 const GRE::LAYER *layer
00608 ) const;
00609
00612 double ConvertScreenUnits (
00613 GRE::LAYER *layer,
00614 double value,
00615 int iunits,
00616 int ounits
00617 );
00618
00620 ERRVALUE Create (
00621 VIEWABLE *viewable,
00622 int iwidth,
00623 int iheight,
00624 CREATEFLAGS createflags = CREATEFLAG_None
00625 );
00626
00628 DATATIPSELECTION DataTipGetSelection (
00629 ) const { return (m_DataTipSelection); }
00630
00641 ERRVALUE DataTipGetString (
00642 const DPOINT2D& point,
00643 MISTRING& string,
00644 SPATMOD::IMAGE::STAGE_ARRAY& images,
00645 FINDFLAGS findflags,
00646 int maxlines = 0,
00647 DATATIPSELECTION selection = DATATIPSELECTION_FromView,
00648 bool bForceHTML = false,
00649 MGUI::CTRL_TOOLTIP* tooltip = 0
00650 );
00651
00653 void DataTipSetDelay (
00654 INT32 delay
00655 ) { v_DataTipSetDelay(delay); }
00656
00658 void DataTipSetPixelDelta (
00659 int PixelDelta
00660 ) { v_DataTipSetPixelDelta(PixelDelta); }
00661
00664 void DataTipSetSelection (
00665 DATATIPSELECTION selection
00666 ) { m_DataTipSelection = selection; }
00667
00669 void DestroyGroupView (
00670 GRE::GROUP *group
00671 );
00672
00674 void DestroyLayerView (
00675 GRE::LAYER *layer
00676 );
00677
00680 void Detach (
00681 ) { m_viewable = 0; }
00682
00684 void DetachGroupView (
00685 GRE::GROUPVIEW *groupview
00686 );
00687
00689 void DetachLayerView (
00690 GRE::LAYERVIEW *layerview
00691 );
00692
00694 void DisableRedraw (
00695 ) { ++m_DisableRedraw; }
00696
00698 ERRVALUE Draw (
00699 );
00700
00702 ERRVALUE DrawGroup (
00703 GRE::GROUP *group,
00704 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
00705 );
00706
00709 int DrawIfNeeded (
00710 );
00711
00713 ERRVALUE DrawIfAutoUpdate (
00714 ) { if (m_RedrawOnAnyChange) return (Draw()); return (0); }
00715
00717 ERRVALUE DrawLayer (
00718 GRE::LAYER *layer,
00719 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
00720 );
00721
00723 ERRVALUE DrawLayerElement (
00724 GRE::LAYER *layer,
00725 ELEMTYPE ElemType,
00726 ELEMNUM ElemNum,
00727 GRE::RENDERTARGET Target,
00728 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
00729 );
00730
00732 ERRVALUE DrawLayerElements (
00733 GRE::LAYER *layer,
00734 ELEMTYPE ElemType,
00735 const UNSIGNEDSET *pElemSet,
00736 GRE::RENDERTARGET Target,
00737 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
00738 );
00739
00741 ERRVALUE DrawLayerHighlighted (
00742 GRE::LAYER *layer,
00743 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
00744 );
00745
00748 void DrawMargins (
00749 MGD::CONTEXT* gc,
00750 const TRANS2D_AFFINE *pTransViewDevice = 0
00751 );
00752
00754 ERRVALUE DrawLayerOverlay (
00755 GRE::LAYER *layer,
00756 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
00757 );
00758
00760 ERRVALUE DrawThisOnly (
00761 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
00762 );
00763
00766 int EditColors (
00767 );
00768
00770 void EnableRedraw (
00771 ) { if (m_DisableRedraw > 0) --m_DisableRedraw; }
00772
00775 ELEMNUM FindClosestLayerElement (
00776 GRE::LAYER *layer,
00777 int component,
00778 const DPOINT2D& point,
00779 double *distret,
00780 GRE::FINDFLAGS findflags
00781 );
00782
00785 GRE::GROUP* FindPointGroup (
00786 const DPOINT2D& point,
00787 GRE::FINDFLAGS findflags,
00788 const SPATREF::COORDREFSYS *pPointCRS = NULL
00789 ) const;
00790
00791 bool GetAutoRedrawSolid (
00792 ) const { return (m_AutoRedrawSolid); }
00793
00795 const char* GetBackgroundColorIniName (
00796 ) const;
00797
00799 const LRECT2D& GetCanvasClipRect (
00800 ) const { return (m_ClipRect); }
00801
00803 void GetCanvasExtentsUsed (
00804 LRECT2D& extents,
00805 bool UseNext = false
00806 ) const;
00807
00810 bool GetClipRegion (
00811 GRE::GROUP *group,
00812 REGION2D& ClipRegion
00813 );
00814
00816 const COLOR& GetColor (
00817 COLORUSE coloruse
00818 ) const { return (m_Colors[coloruse]); }
00819
00820 #ifdef USE_MGUI
00822 MDLGPARENT GetDlgParent (
00823 ) const { return (v_GetDlgParent()); }
00824 #endif
00825
00828 UINT32 GetDrawingAreaHeight (
00829 ) const { return (m_height); }
00830
00833 UINT32 GetDrawingAreaWidth (
00834 ) const { return (m_width); }
00835
00839 MGD::DEVICE* GetDrawingDevice (
00840 bool UseStereo = false
00841 ) const;
00842
00844 MGD::DEVICE* GetDrawingDeviceMemory (
00845 bool UseStereo = false
00846 ) const;
00847
00849 MGD::DEVICE* GetDrawingDeviceScreen (
00850 ) const { return (v_GetDrawingDeviceScreen()); }
00851
00853 bool GetDrawStereo (
00854 ) const { return (m_DrawStereo); }
00855
00857 bool GetDrawWireframe3D (
00858 ) const { return (m_DrawWireframe); }
00859
00861 const DRECT2D& GetFullExtents (
00862 ) const { return (m_FullExtents); }
00863
00865 const GEOLOCKSETTINGS& GetGeoLock (
00866 ) const { return (m_GeoLock); }
00867
00870 GRE::GROUP* GetGeorefGroup (
00871 ) const;
00872
00875 GRE::GROUP* GetGroup (
00876 ) const;
00877
00879 GRE::GROUPVIEW* GetGroupView (
00880 const GRE::GROUP *group
00881 ) const;
00882
00884 const VIEWPOS& GetLastPosn (
00885 ) const { return (m_LastPosn); }
00886
00888 GRE::LAYERVIEW* GetLayerView (
00889 const GRE::LAYER *layer
00890 ) const;
00891
00893 GRE::LAYOUT* GetLayout (
00894 ) const;
00895
00898 double GetMargin (
00899 ) const { return (m_MarginMeters); }
00900
00902 const MISTRING& GetMessage (
00903 ) const { return (m_LastMessage); }
00904
00906 void GetName (
00907 MISTRING& name
00908 ) const;
00909
00911 bool GetNeedNotifyDrawElement () const
00912 { return (m_NeedNotifyDrawElement); }
00913
00914 bool GetNeedsRedraw (
00915 ) const { return (m_NeedsRedraw); }
00916
00919 VIEW* GetNext (
00920 ) const;
00921
00922 VIEW* GetNextOfAll (
00923 ) const { return (m_nextview); }
00924
00925 const VIEWPOS& GetNextPosn (
00926 ) const { return (m_NextPosn); }
00927
00929 INT16 GetPadPixels (
00930 ) const { return (m_PadPixels); }
00931
00933 double GetPixelSizeMM (
00934 ) const;
00935
00937 void GetPixelSizeMM (
00938 DPOINT2D& pixelsize
00939 ) const;
00940
00942 GRE_PROJACCUR GetProjAccur (
00943 ) const { return (m_ProjAccur); }
00944
00946 bool GetRedrawOnAnyChange (
00947 ) { return (m_RedrawOnAnyChange); }
00948
00950 ERRVALUE GetScale (
00951 double *xscale,
00952 double *yscale
00953 );
00954
00956 double GetScale (
00957 ) const { return (m_LastPosn.GetMapScale()); }
00958
00960 ERRVALUE GetSizeMeters (
00961 DPOINT2D& size
00962 ) const;
00963
00964 MISTATUSMANAGER* GetStatusManager (
00965 ) const { return (m_pStatusMgr); }
00966
00968 const STEREODEVICE& GetStereoDevice () const;
00969
00971 const STEREORENDER& GetStereoRender () const;
00972
00973 bool GetStopDrawOnError (
00974 ) const { return (m_StopDrawOnError); }
00975
00976 double GetTimeLastRefresh (
00977 ) const { return (m_TimeLastRefresh); }
00978
00980 void GetTransDispToGroup (
00981 const GRE::GROUP *group,
00982 TRANS2D_AFFINE& DispToGroup
00983 ) const;
00984
00987 int GetTransLayerDisp (
00988 const GRE::LAYER *layer,
00989 TRANS2D_MAPGEN& trans
00990 ) const;
00991
00993 ERRVALUE GetTransLayerView (
00994 const GRE::LAYER *layer,
00995 TRANS2D_MAPGEN& trans
00996 ) const;
00997
00999 ERRVALUE GetTransToMap (
01000 TRANS2D_MAPGEN& trans,
01001 bool dooutput,
01002 const GRE::GROUP *group = 0
01003 ) const;
01004
01007 const TRANS2D_AFFINE& GetTransToDisp (
01008 ) const { return (m_LastPosn.GetTransViewDevice()); }
01009
01011 VIEWABLE* GetViewable (
01012 ) const { return (m_viewable); }
01013
01015 OBJECT::TYPE GetViewableType (
01016 ) const;
01017
01018 VIEWFLAGS GetViewFlags (
01019 ) const { return (m_viewflags); }
01020
01022 int GetViewNum (
01023 ) const;
01024
01027 VIEWPOINT3D* GetViewPoint3D (
01028 ) const { return (m_ViewPoint3D); }
01029
01031 void GetVisibleExtents (
01032 DRECT2D& extents,
01033 bool UseNext = false
01034 ) const;
01035
01037 bool GetWireframeMode (
01038 ) const;
01039
01041 const double& GetZoom (
01042 ) const { return (m_NextPosn.GetZoom().x); }
01043
01046 const ZVIEW* GetZView () const;
01047
01049 bool Has3D () const;
01050
01052 bool HasObjects () const;
01053
01056 bool HighlightElementsByPoint (
01057 const DPOINT2D& pt,
01058 bool PointInDisplayCoords,
01059 GRE::HIGHLIGHTMODE HighlightMode = GRE::HIGHLIGHTMODE_NotSet,
01060 bool ShowDftTables = false
01061 );
01062
01064 void InvalidateAllLayers (
01065 );
01066
01068 bool Is3D (
01069 ) const;
01070
01071 bool IsAllowedDiffZoom (
01072 ) const { return ((m_viewflags & VIEWFLAG_AllowDiffZoom) != 0); }
01073
01074 bool IsBeingDrawn (
01075 ) const { return (m_DoingRedraw); }
01076
01077 bool IsBeingRestored (
01078 ) const { return (m_DoingRestore); }
01079
01081 bool IsGeoLocked (
01082 ) const { return (m_GeoLocked); }
01083
01085 bool IsGoogleLocked (
01086 ) const { return (m_GoogleLocked); }
01087
01089 bool IsGroupVisible (
01090 const GRE::GROUP *group
01091 ) const;
01092
01094 bool IsInteractive (
01095 ) const { return (m_IsInteractive); }
01096
01098 bool IsLayerVisible (
01099 const GRE::LAYER *layer
01100 ) const;
01101
01102 bool IsLegacy (
01103 ) const { return (m_IsLegacy); }
01104
01106 bool IsLocator (
01107 ) const { return ((m_viewflags & VIEWFLAG_Locator) != 0); }
01108
01110 bool IsRedrawDisabled (
01111 ) const { return (m_DisableRedraw != 0); }
01112
01115 void NotifyChangeViewPoint3D (
01116 bool redraw = true,
01117 bool IsDragging = false
01118 );
01119
01121 void NotifyDrawElementBegin (
01122 GRE::LAYER *layer,
01123 const RVC::ELEMENT& element
01124 ) { v_OnDrawElementBegin(layer,element); }
01125
01127 void NotifyDrawElementEnd (
01128 GRE::LAYER *layer,
01129 const RVC::ELEMENT& element
01130 ) { v_OnDrawElementEnd(layer,element); }
01131
01133 void NotifyExposure (
01134 const LRECT2D& rect
01135 );
01136
01139 void NotifyLayerRendered (
01140 GRE::LAYER *layer
01141 );
01142
01144 void NotifyPointerEnter (
01145 );
01146
01148 void NotifyPointerLeave (
01149 );
01150
01152 void NotifyPointerMove (
01153 const DPOINT2D& point
01154 );
01155
01160 RENDERBUFFER* OverlayCreate (
01161 bool AddToFront = false
01162 );
01163
01165 void OverlayDestroy (
01166 RENDERBUFFER *& pRenderBuffer
01167 );
01168
01170 ERRVALUE PanToLayerElement (
01171 GRE::LAYER *layer,
01172 ELEMTYPE ElemType,
01173 ELEMNUM ElemNum,
01174 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
01175 );
01176
01178 void ResetCancel (
01179 ) { m_CancelDraw = 0; }
01180
01182 void RemoveDelegateOnPointerEnter (
01183 DELEGATE_POINTERENTERLEAVE delegate
01184 );
01185
01187 void RemoveDelegateOnPointerLeave (
01188 DELEGATE_POINTERENTERLEAVE delegate
01189 );
01190
01192 void RemoveDelegateOnPointerMove (
01193 DELEGATE_POINTERMOVE delegate
01194 );
01195
01199 void RestoreFromBuffers (
01200 bool RenderIfNeeded = true
01201 );
01202
01206 void RestoreFromMemory (
01207 const LRECT2D *rect = 0,
01208 bool UseScreenBuffer = false
01209 );
01210
01211 #ifdef USE_MGUI
01213 ERRVALUE SaveSnapshotQuick (
01214 );
01215 #endif
01216
01217 #ifdef USE_MGUI
01219 ERRVALUE SaveSnapshotToRaster (
01220 );
01221 #endif
01222
01223 void SetAutoRedrawSolid (
01224 bool AutoRedrawSolid
01225 ) { m_AutoRedrawSolid = AutoRedrawSolid; }
01226
01227 void SetBeingRestored (
01228 bool BeingRestored
01229 ) { m_DoingRestore = BeingRestored; }
01230
01234 int SetCenter (
01235 const DPOINT2D& pt,
01236 bool redraw = true
01237 );
01238
01240 void SetCenterByLayer (
01241 GRE::LAYER *layer,
01242 const DPOINT2D& pt,
01243 bool redraw = true
01244 );
01245
01247 void SetClipNone (
01248 );
01249
01251 void SetClipRect (
01252 const LRECT2D& cliprect
01253 );
01254
01256 void SetColor (
01257 COLORUSE coloruse,
01258 const COLOR& color
01259 );
01260
01261 void SetDrawingAreaSize (
01262 INT32 width,
01263 INT32 height
01264 );
01265
01268 void SetDrawingDevice (
01269 MGD::DEVICE *gdisp
01270 );
01271
01272 void SetDrawStereo (
01273 bool DrawStereo
01274 );
01275
01276 void SetDrawWireframe3D (
01277 bool DrawWireframe
01278 ) { m_DrawWireframe = DrawWireframe; }
01279
01281 void SetGeoLocked (
01282 bool GeoLocked = true,
01283 bool AutoScale = true
01284 );
01285
01287 void SetGeoLock (
01288 const GEOLOCKSETTINGS& GeoLockSettings
01289 ) { m_GeoLock = GeoLockSettings; }
01290
01291 void SetGoogleLocked (
01292 bool Locked
01293 ) { m_GoogleLocked = Locked; }
01294
01298 void SetMargin (
01299 double MarginMeters
01300 ) { m_MarginMeters = MarginMeters; m_NeedsRedraw = true; }
01301
01304 void SetNeedNotifyDrawElement (
01305 bool NeedNotify = true
01306 ) { m_NeedNotifyDrawElement = NeedNotify; }
01307
01308 void SetNeedsRedraw (
01309 ) { m_NeedsRedraw = true; }
01310
01312 void SetNextPlace (
01313 const VIEWPLACE& NextPlace,
01314 bool redraw = true
01315 );
01316
01318 void SetNextPosn (
01319 const VIEWPOS& NextPosn,
01320 bool redraw = true
01321 ) { m_NextPosn = NextPosn; m_NeedsRedraw = true; if (redraw) Draw(); }
01322
01323 void SetPadPixels (
01324 int pp
01325 ) { m_PadPixels = static_cast<INT16>(bound(pp,0,100)); }
01326
01327 void SetProjAccur (
01328 GRE_PROJACCUR ProjAccur
01329 ) { m_ProjAccur = ProjAccur; }
01330
01332 void SetRedrawOnAnyChange (
01333 bool RedrawOnAnyChange,
01334 bool redraw = true
01335 );
01336
01338 ERRVALUE SetScale (
01339 double NewMapScale,
01340 bool redraw = true
01341 );
01342
01344 ERRVALUE SetScaleMaxDetail (
01345 GRE::LAYER *ScaleRefLayer,
01346 bool redraw = true
01347 );
01348
01350 ERRVALUE SetScaleMaxDetail (
01351 bool redraw = true
01352 ) { return (SetScaleMaxDetail(NULL,redraw)); }
01353
01354 void SetStatusManager (
01355 MISTATUSMANAGER *pStatusMgr
01356 ) { m_pStatusMgr = pStatusMgr; }
01357
01360 void SetStereoDevice (
01361 const STEREODEVICE& StereoDevice
01362 );
01363
01365 void SetStereoRender (
01366 const STEREORENDER& StereoRender
01367 );
01368
01370 void SetStopDrawOnError (
01371 bool StopDrawOnError = true
01372 ) { m_StopDrawOnError = StopDrawOnError; }
01373
01374 void SetViewFlags (
01375 VIEWFLAGS viewflags,
01376 bool redraw = false
01377 ) { m_viewflags = viewflags; if (redraw) Draw(); }
01378
01381 bool SetViewFromGeoLock (
01382 const VIEW *refview=0
01383 );
01384
01385 void SetViewNum (
01386 int ViewNum
01387 ) { m_ViewNum = ViewNum; }
01388
01390 void SetWireframeMode (
01391 bool mode,
01392 bool redraw = true
01393 );
01394
01396 int SetZoom (
01397 double zoom,
01398 bool redraw = true
01399 );
01400
01402 int SetZoom (
01403 const DPOINT2D& zoom,
01404 bool redraw = true
01405 );
01406
01408 int SetZoomFull (
01409 bool redraw = true
01410 ) { return (SetZoom(.99,redraw)); }
01411
01413 int TestCancel (
01414 ) { return (v_TestCancel()); }
01415
01417 ERRVALUE TransDispToGroup (
01418 GRE::GROUP *group,
01419 const DPOINT2D *ipoints,
01420 DPOINT2D *opoints,
01421 int numpoints
01422 ) const;
01423
01425 ERRVALUE TransDispToLayer (
01426 GRE::LAYER *layer,
01427 const DPOINT2D *ipoints,
01428 DPOINT2D *opoints,
01429 int numpoints
01430 );
01431
01435 void TransDispToView (
01436 const DPOINT2D *ipoints,
01437 DPOINT2D *opoints,
01438 int numpoints
01439 ) const;
01440
01442 ERRVALUE TransGroupToDisp (
01443 GRE::GROUP *group,
01444 const DPOINT2D *ipoints,
01445 DPOINT2D *opoints,
01446 int numpoints
01447 ) const;
01448
01452 ERRVALUE TransGroupToView (
01453 GRE::GROUP *group,
01454 const DPOINT2D *ipoints,
01455 DPOINT2D *opoints,
01456 int numpoints
01457 ) const;
01458
01460 ERRVALUE TransLayerToDisp (
01461 GRE::LAYER *layer,
01462 const DPOINT2D *ipoints,
01463 DPOINT2D *opoints,
01464 int numpoints
01465 );
01466
01470 ERRVALUE TransLayerToView (
01471 GRE::LAYER *layer,
01472 const DPOINT2D *ipoints,
01473 DPOINT2D *opoints,
01474 int numpoints
01475 );
01476
01480 void TransViewToDisp (
01481 const DPOINT2D *ipoints,
01482 DPOINT2D *opoints,
01483 int numpoints
01484 ) const;
01485
01489 ERRVALUE TransViewToGroup (
01490 GRE::GROUP *group,
01491 const DPOINT2D *ipoints,
01492 DPOINT2D *opoints,
01493 int numpoints
01494 ) const;
01495
01499 ERRVALUE TransViewToLayer (
01500 GRE::LAYER *layer,
01501 const DPOINT2D *ipoints,
01502 DPOINT2D *opoints,
01503 int numpoints
01504 );
01505
01506 #ifdef USE_MGUI
01508 GRE::CTRL_TREEVIEW* TreeViewGetPtr (
01509 ) const { return (m_pTreeView); }
01510 #endif
01511
01512 #ifdef USE_MGUI
01515 void TreeViewSetPtr (
01516 GRE::CTRL_TREEVIEW *pTreeView
01517 ) { m_pTreeView = pTreeView; }
01518 #endif
01519
01521 ERRVALUE UpdateExtents (
01522 );
01523
01524 void UpdateLastPosn (
01525 );
01526
01528 void UpdateMessage (
01529 const MISTRING& string
01530 );
01531
01532 int UpdatePosition (
01533 );
01534
01536 void UpdateScriptUI (
01537 ) { v_UpdateScriptUI(); }
01538
01540 void UpdateTypeName (
01541 );
01542
01544 void UpdateUI (
01545 ) { v_UpdateUI(); }
01546
01548 bool UseSeparateRenderDevices (
01549 );
01550
01552 int ZoomToGroup (
01553 GRE::GROUP *group,
01554 bool redraw = true
01555 );
01556
01558 int ZoomToGroupRect (
01559 GRE::GROUP *group,
01560 const DRECT2D& rect,
01561 bool redraw = true
01562 );
01563
01565 int ZoomToLayer (
01566 GRE::LAYER *layer,
01567 bool redraw = true
01568 );
01569
01571 int ZoomToLayerRect (
01572 GRE::LAYER *layer,
01573 const DRECT2D& rect,
01574 bool redraw = true
01575 );
01576
01578 ERRVALUE ZoomToViewableRect (
01579 const DRECT2D& rect,
01580 bool redraw = true
01581 );
01582
01583 protected:
01584 #ifndef GENERATING_DOXYGEN_OUTPUT
01585
01586 static const SML::CLASSMEMBER* SML_GetClassMembers();
01587 static void SML_ViewDestroy (int, SML::ARG *args, UINT8 *, SML::CONTEXT *);
01588 #endif
01589
01590 typedef void DRAWSTATE;
01591
01592 void ClearNeedsRedraw (
01593 ) { m_NeedsRedraw = false; }
01594
01596 void DrawBackground ();
01597
01601 DRAWSTATE* DrawBegin (
01602 GRE::DRAWFLAGS drawflags
01603 );
01604
01607 void DrawEnd (
01608 GRE::DRAWFLAGS drawflags,
01609 DRAWSTATE *state
01610 );
01611
01612 ERRVALUE DrawViewable (
01613 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
01614 );
01615
01617 int GetViewNumRaw (
01618 ) const { return (m_ViewNum); }
01619
01621 void OverlayUpdatedLayers ();
01622
01625 void SetViewPosns (
01626 const VIEWPOS& ViewPos
01627 );
01628
01630 void SetInteractive (
01631 ) { m_IsInteractive = true; }
01632
01633 private:
01634 #ifndef GENERATING_DOXYGEN_OUTPUT
01635
01636 typedef GRE::VIEW THISCLASS;
01637 typedef std::map<GRE::GROUP*,GRE::GROUPVIEW*> GROUPVIEWMAP;
01638 typedef std::map<GRE::LAYER*,GRE::LAYERVIEW*> LAYERVIEWMAP;
01639
01640 VIEWABLE *m_viewable;
01641 VIEW *m_nextview;
01642 MGD::DEVICE *m_gdisp;
01643 VIEWFLAGS m_viewflags;
01644 COLOR m_Colors[COLORUSE_COUNT];
01645 VIEWPOS m_LastPosn;
01646 VIEWPOS m_NextPosn;
01647 DRECT2D m_FullExtents;
01648 MISTATUSMANAGER *m_pStatusMgr;
01649 VIEWPOINT3D *m_ViewPoint3D;
01650 int m_ViewNum;
01651 int m_CancelDraw;
01652 WPOINT2D m_TrackPos;
01653 GRE_PROJACCUR m_ProjAccur;
01654 INT32 m_width;
01655 INT32 m_height;
01656 INT16 m_PadPixels;
01657 UINT8 m_DisableRedraw;
01658 char m_TypeNameStr[32];
01659 GEOLOCKSETTINGS m_GeoLock;
01660 LRECT2D m_ClipRect;
01661 #ifdef USE_MGUI
01662 void *XXXdelete_m_pDlgViewStereo2D;
01663 GRE::DLG_VIEWZOOM *m_pDlgViewZoom;
01664 GRE::CTRL_TREEVIEW *m_pTreeView;
01665 MGUI::TIMER m_TimerOverlayUpdate;
01666 #endif
01667 DATATIPSELECTION m_DataTipSelection;
01668 GROUPVIEWMAP m_GroupViewMap;
01669 LAYERVIEWMAP m_LayerViewMap;
01670 MGD::DEVICE_MEM32RGBA *m_pDeviceWork;
01671 MISTRING m_LastMessage;
01672 double m_TimeLastRefresh;
01673 double m_MarginMeters;
01674 STEREODEVICE *m_pStereoDevice;
01675 mutable STEREORENDER *m_pStereoRender;
01676 bool m_NeedsRedraw;
01677 bool m_DoingRedraw;
01678 bool m_AutoRedrawSolid;
01679 bool m_DoingRestore;
01680 bool m_DrawWireframe;
01681 bool m_DrawStereo;
01682 bool m_HaveTrackPos;
01683 bool m_GeoLocked;
01684 bool m_IsInteractive;
01685 bool m_ClipRectUsed;
01686 bool m_StopDrawOnError;
01687 bool m_CanRestore;
01688 bool m_RedrawOnAnyChange;
01689 bool m_IsLegacy;
01690 bool m_GoogleLocked;
01691 bool m_NeedNotifyDrawElement;
01692 MILIST<DELEGATE_POINTERENTERLEAVE> m_DelegateListOnPointerEnter;
01693 MILIST<DELEGATE_POINTERENTERLEAVE> m_DelegateListOnPointerLeave;
01694 MILIST<DELEGATE_POINTERMOVE> m_DelegateListOnPointerMove;
01695 MITHREAD::QUEUE *m_pThreadQueueRemote;
01696 MITHREAD::ID m_ThreadQueueIdRemote;
01697 MITHREAD::CRITICALSECTION m_CritSec;
01698
01699 static VIEWCOMMON& GetGlobalOptionsPriv ();
01700 static STEREODEVICE& GetStereoDevicePriv2D ();
01701 static STEREODEVICE& GetStereoDevicePriv3D ();
01702
01703 static void InitStatic ();
01704
01705 void AddThreadQueueToPoolRemote ();
01706 bool CheckRenderBuffersValid ();
01707 bool CheckRenderBuffersValidGroup (GRE::GROUP *group);
01708 void ComputeAllGroupLayerTrans ();
01709 #ifdef USE_MGUI
01710 void CursorTrackDraw ();
01711 void CursorTrackRestore ();
01712 void CursorTrackSetPos (const DPOINT2D& pt);
01713 #endif
01714
01715 int DrawLayer2D (
01716 GRE::LAYER *layer,
01717 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
01718 );
01719
01720 int DrawGroup2D (
01721 GRE::GROUP *group,
01722 GRE::DRAWFLAGS drawflags
01723 );
01724
01725 int DrawGroup3D (
01726 GRE::GROUP *group,
01727 GRE::DRAWFLAGS drawflags
01728 );
01729
01730 int DrawGroup3DI (
01731 GRE::GROUP *group,
01732 GRE::DRAWFLAGS drawflags,
01733 MGD::DEVICE *pDevice,
01734 STEREOVIEW StereoView = STEREOVIEW_None,
01735 LRECT2D *DevRect = 0
01736 );
01737
01738 ERRVALUE DrawGroupBegin (
01739 GRE::GROUP *group,
01740 GRE::DRAWFLAGS drawflags
01741 );
01742
01743 ERRVALUE DrawGroupMain (
01744 GRE::GROUP *group,
01745 GRE::DRAWFLAGS drawflags
01746 );
01747
01748 void DrawGroupMatte (
01749 GRE::GROUP *group,
01750 MGD::DEVICE *pDevice,
01751 const TRANS2D_AFFINE& TransViewDevice
01752 );
01753
01754 void DrawGroupFromBuffers (
01755 GRE::GROUP *group
01756 );
01757
01758 ERRVALUE DrawLayout (
01759 GRE::LAYOUT *layout,
01760 GRE::DRAWFLAGS drawflags = GRE::DRAWFLAG_None
01761 );
01762
01763 void DrawLayoutMatte (
01764 MGD::CONTEXT *gc,
01765 const TRANS2D_AFFINE& TransViewDevice
01766 );
01767
01768 void DrawPageBackground (
01769 MGD::CONTEXT* gc,
01770 const TRANS2D_AFFINE& TransViewDevice
01771 );
01772
01773 const MGD::DEVICE* GetFirstValidDevice (bool NullIfNone) const;
01774
01775 MITHREAD::QUEUE& GetThreadQueueRemote ();
01776
01779 bool HighlightElementsByPoint (
01780 GRE::GROUP *group,
01781 const DPOINT2D& pt,
01782 GRE::HIGHLIGHTMODE HighlightMode,
01783 bool ShowDftTables
01784 );
01785
01786 void OnThreadQueueDone (
01787 MITHREAD::ID QueueID
01788 );
01789
01790 ERRVALUE SetupWorkDevice ();
01791
01792 void StartQueuedJobsRemote ();
01793
01794 void UpdateLayerColors (
01795 GRE::LAYER *layer
01796 );
01797
01798 VIEW (const VIEW&);
01799 VIEW& operator= (const VIEW&);
01800
01801 friend class TOOL;
01802
01803
01804 virtual bool v_Destroy (bool NotifyParent);
01805 virtual MICONSTRUCT* v_GetIcon () const;
01806 virtual const char* v_GetTypeName () const;
01807
01808 #endif // GENERATING_DOXYGEN_OUTPUT
01809
01810
01811
01813 virtual void v_CreateFinish ();
01814
01816 virtual void v_DataTipSetDelay (
01817 INT32 delay
01818 );
01819
01821 virtual void v_DataTipSetPixelDelta (
01822 int PixelDelta
01823 );
01824
01825 virtual ERRVALUE v_Draw ();
01826
01830 virtual ERRVALUE v_DrawThisOnly (GRE::DRAWFLAGS drawflags);
01831
01832 #ifdef USE_MGUI
01835 virtual MDLGPARENT v_GetDlgParent (
01836 ) const;
01837 #endif
01838
01841 virtual MGD::DEVICE* v_GetDrawingDeviceMemory (
01842 bool UseStereo
01843 ) const;
01844
01847 virtual MGD::DEVICE* v_GetDrawingDeviceScreen (
01848 ) const;
01849
01852 virtual int v_GetViewNum () const;
01853
01855 virtual void v_OnDrawElementBegin (GRE::LAYER *layer, const RVC::ELEMENT& element);
01857 virtual void v_OnDrawElementEnd (GRE::LAYER *layer, const RVC::ELEMENT& element);
01859 virtual void v_OnDrawGroupBegin (GRE::GROUP *group);
01861 virtual void v_OnDrawGroupEnd (GRE::GROUP *group);
01863 virtual void v_OnDrawLayerBegin (GRE::LAYER *layer);
01865 virtual void v_OnDrawLayerEnd (GRE::LAYER *layer);
01867 virtual void v_OnDrawViewableBegin ();
01869 virtual void v_OnDrawViewableEnd ();
01871 virtual void v_OnJobStarted ();
01873 virtual void v_OnJobsAllDone ();
01875 virtual void v_OnLayerRendered (GRE::LAYER *layer);
01876
01879 virtual void v_RestoreFromMemory (
01880 const LRECT2D *rect,
01881 bool UseScreenBuffer = false
01882 );
01883
01884 virtual ERRVALUE v_TestCancel ();
01885
01887 virtual void v_UpdateMessage (
01888 const MISTRING& string
01889 );
01890
01893 virtual void v_UpdateScriptUI ();
01894
01897 virtual void v_UpdateUI ();
01898
01899 friend class VIEW_LEGACY;
01900 friend class VIEW_LEGACY_DATATIP;
01901 friend class GRE::VIEW_LEGACY_STATUSINFO;
01902 };
01903
01904 #ifndef GENERATING_DOXYGEN_OUTPUT
01905 DEFINE_ENUM_OP_BITWISE(VIEW::CREATEFLAGS)
01906 #endif
01907
01908 }
01909
01910
01911
01912 #endif // INC_GRE_VIEW_H
01913