![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtOsgOverlayManager.h,v $ $Revision: 1.13 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 #include <vrvOsg/vrvOsg.h> 00015 #include <vrvCore/DtOverlayManager.h> 00016 #include <vrvCore/DtUniqueID.h> 00017 #include <vrvUtil/DtSignalConnectionManager.h> 00018 #include <boost/unordered_map.hpp> 00019 #include <set> 00020 00021 namespace makVrv 00022 { 00023 00024 class DtOsgRenderer; 00025 class DtOsgOverlayResourceProvider; 00026 class DtChannelManager; 00027 class DtChannel; 00028 class DtOverlayRenderer; 00029 class DtWidgetPicker; 00030 class DtFontManager; 00031 00034 class DT_DLL_VRVOSG DtOsgOverlayManager : public DtOverlayManager 00035 { 00036 public: 00037 00039 DtOsgOverlayManager(DtDe& de); 00040 00042 ~DtOsgOverlayManager(); 00043 00044 inline DtDe& de() 00045 { 00046 return myDe; 00047 } 00048 00052 virtual bool handleMouseEvent(const DtMouseEvent& ev, DtChannel& channel); 00053 00057 bool processWidgetEvent( DtElementID id, const DtMouseEvent &ev, 00058 DtChannel& channel ); 00059 00061 virtual void render(DtChannel* channel, bool projectedGeocentricEffect, 00062 float projectedGeocentricAlpha, 00063 double* position, double* matrix, double viewportSize[2]); 00064 00066 virtual void releaseResources(); 00067 00069 virtual DtOsgOverlayResourceProvider* resourceProvider(); 00070 00072 DtOverlayRenderer& overlayRenderer(unsigned int layerId); 00073 00075 DtOverlayRenderer& overlayRenderer(DtChannel* channel); 00076 DtOverlayRenderer& overlayRenderer3D(DtChannel* channel); 00077 00079 virtual void enableOverlayOnChannel(unsigned int layerId, bool enabled, 00080 DtChannel& channel); 00081 00083 DtWidgetPicker& widgetPicker(unsigned int layerId); 00084 00086 DtWidgetPicker& widgetPicker(DtChannel* channel); 00087 DtWidgetPicker& widgetPicker3D(DtChannel* channel); 00088 00090 virtual void destroyOverlayLayer(unsigned int layerId); 00091 00093 virtual bool overlayLayerIsVisible(unsigned int layerId) const; 00094 00098 virtual void setOverlayLayerVisibility(unsigned int layerId, bool visible); 00099 00101 virtual void setPerformanceStatsOverlayEnabled(bool show); 00102 00104 virtual bool performanceStatsOverlayEnabled() const; 00105 00106 protected: 00107 00108 typedef boost::unordered_map<DtChannel*, unsigned int> 00109 ChannelSpecificOverlayMap; 00110 00112 virtual void slot_channelToBeDestroyed(DtChannel*); 00113 00116 unsigned int allocateChannelSpecificLayerId(); 00117 00118 void destroyChannelSpecificOverlayLayer( 00119 const ChannelSpecificOverlayMap &map, DtChannel* channel ); 00120 00122 DtOverlayRenderer& overlayRenderer( ChannelSpecificOverlayMap &map, 00123 DtChannel* channel ); 00124 00126 DtWidgetPicker& widgetPicker( ChannelSpecificOverlayMap &map, 00127 DtChannel* channel ); 00128 00129 protected: 00130 00131 class DtPickableOverlay 00132 { 00133 public: 00134 DtPickableOverlay(); 00135 ~DtPickableOverlay(); 00136 00137 DtOverlayRenderer& getOrCreateRenderer( 00138 DtOsgOverlayResourceProvider* provider); 00139 DtWidgetPicker& getOrCreatePicker( 00140 DtOsgOverlayResourceProvider* provider); 00141 DtOverlayRenderer* findRenderer(); 00142 DtWidgetPicker* findPicker(); 00143 00144 protected: 00145 DtOverlayRenderer* myRenderer; 00146 DtWidgetPicker* myPicker; 00147 00148 }; 00149 00150 typedef boost::unordered_map<unsigned int,DtPickableOverlay*> OverlayMap; 00151 00152 //Map, the sets should be in order. 00153 typedef boost::unordered_map<DtChannel*, std::set<unsigned int> > 00154 ChannelOverlayMap; 00155 00156 DtDe& myDe; 00157 DtSignalConnectionManager myConnections; 00158 OverlayMap myOverlays; 00159 ChannelOverlayMap myChannelOverlayMap; 00160 ChannelSpecificOverlayMap myChannelSpecific2DOverlayMap; 00161 ChannelSpecificOverlayMap myChannelSpecific3DOverlayMap; 00162 bool myChannelSpecificLayerIdUsageList[ 00163 Channel_SpecificEnd - Channel_SpecificStart + 1 ]; 00164 DtOsgOverlayResourceProvider* myProvider; 00165 }; 00166 00168 class DT_DLL_VRVOSG DtOsgOverlayManagerCreator : public DtOverlayManagerCreator 00169 { 00171 virtual DtOverlayManager* create(DtDe& de); 00172 }; 00173 }