VR-Forces 4.0.4 Class Documentation
include/vrvOsg/DtOsgOverlayManager.h
Go to the documentation of this file.
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 }

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)