VR-Forces 4.0.4 Class Documentation
include/vrvCore/DtVisualizerSet.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2012 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 
00008 
00009 #pragma once 
00010 
00011 #include <vrvCore/vrvCore.h>
00012 #include <vrvUtil/signalslib.h>
00013 #include <vrvCore/DtShowHideContext.h>
00014 #include <vrvCore/DtStateVisualizer.h>
00015 #include <vrvCore/DtVisualizerCreationSettingsManager.h>
00016 
00017 #include <vrvUtil/DtSignalConnectionManager.h>
00018 
00019 #include <string>
00020 #include <vector>
00021 #include <boost/bind.hpp>
00022 #include <boost/unordered_map.hpp>
00023 
00024 namespace makVrv
00025 {
00026    class DtBaseConnection;
00027    class DtMouseState;
00028    class DtSceneObjectVisualizer;
00029    class DtStateListener;
00030    class DtStateVisualizerFactory;
00031 
00032    class DtElementDefinitionNew;
00033    class DtVisualizerDefinitionSet;
00034    class DtVisualizerDefinition;
00035 
00039    class DT_DLL_VRVCORE DtVisualizerSet
00040    {
00041    public:
00042 
00043       typedef std::vector<DtStateVisualizer*> VisualizerList;
00044 
00046       DtVisualizerSet(DtBaseConnection& conn, DtStateListener& listener, 
00047          int modelSet, bool distribute);
00048 
00050       virtual ~DtVisualizerSet();
00051 
00053       virtual void visualizeElementDefinition(const DtUnicode& elementName, 
00054          const DtElementDefinitionNew& def, 
00055          const DtVisualizerCreationSettings::VisualTypeVisualizerCreationMap& creationMap );
00056 
00058       virtual void visualizeElementDefinition(const DtUnicode& elementName, 
00059          const DtElementDefinitionNew& def);
00060 
00066       virtual void createVisualizersByType( int visualType );
00067 
00070       virtual void destroyVisualizersByType( int visualType );
00071 
00073       const DtElementDefinitionNew* definition() const;
00074 
00076       int modelSet() const;
00077       
00079       template <typename VisualizerClass>
00080       inline void findVisualizers(std::vector<VisualizerClass*>& visualizers);
00081       
00085       template <typename VisualizerClass>
00086       inline void findVisualizersByDynamicCast(std::vector<VisualizerClass*>& visualizers);
00087 
00089       virtual void findVisualizers(const DtVisualizerSchema&,
00090          VisualizerList& visualizers);
00091 
00099       virtual bool setVisible(bool visible, 
00100          DtShowHideContext::ShowHideContext context =
00101          DtShowHideContext::InstanceHidden);
00102 
00104       virtual bool isVisible() const;
00105 
00108       virtual bool show(DtShowHideContext::ShowHideContext);
00109       virtual bool hide(DtShowHideContext::ShowHideContext);
00110 
00112       bool isHiddenByContext(DtShowHideContext::ShowHideContext) const;
00114       virtual DtUniqueID uniqueID() const;
00115 
00116       DtSceneObjectVisualizer* sceneObjectVisualizer() const;
00117 
00119       virtual void setPickable( bool pickable );
00120 
00122       bool pickable() const;
00123 
00125       virtual void setSelected(bool);
00126 
00128       bool selected() const;
00129 
00132       bool addVisualizer(const DtVisualizerDefinition& def);
00133     
00135       virtual void destroyAllModelVisualizers();
00136 
00138       virtual DtStateVisualizer::Type supportsVisualizerType() const;
00139 
00141       boost::signal<void (DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName,
00142          const std::string& windowName, const std::string& channelName,
00143          DtStateVisualizer* v, DtVisualizerSet* i)>
00144          signal_mouseDown;
00145       boost::signal<void (DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName,
00146          const std::string& windowName, const std::string& channelName,
00147          DtStateVisualizer* v, DtVisualizerSet* i)>
00148          signal_mouseUp;
00149       boost::signal<void (DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName,
00150          const std::string& windowName, const std::string& channelName,
00151          DtStateVisualizer* v, DtVisualizerSet* i)>
00152          signal_mouseDblClick;
00153 
00154       boost::signal< void (bool, DtVisualizerSet* vis) > signal_selectionStateChanged;
00155 
00156    protected:
00158       void destroyAllModelVisualizersInternal();
00159 
00162       virtual void visualizeVisualizerDefinitionSet(const DtVisualizerDefinitionSet& set,
00163          const  DtVisualizerCreationSettings::VisualTypeVisualizerCreationMap* creationMap);
00164 
00166       virtual DtStateVisualizer* createVisualizerFromDefinition(const DtVisualizerDefinition& def);
00167 
00171       virtual void addVisualizer(const std::string& schemaName, 
00172          DtStateVisualizer* visualizer);
00173 
00175       bool suppressVisualizerCreation( const DtVisualizerDefinition* visDef,
00176          const  DtVisualizerCreationSettings::VisualTypeVisualizerCreationMap* 
00177          creationMap ) const;
00178 
00181       int findVisualType( const DtVisualizerDefinition& visDef ) const;
00182 
00184       virtual void setModelVisualizerVisible(const std::string& schemaName,
00185          bool onOff, int context);
00186 
00188      virtual void slot_mouseDown(
00189       DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName,
00190       const std::string& windowName, const std::string& channelName, DtStateVisualizer* v);
00191      virtual void slot_mouseUp(
00192       DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName,
00193       const std::string& windowName, const std::string& channelName, DtStateVisualizer* v);
00194      virtual void slot_mouseDblClick(
00195       DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName,
00196       const std::string& windowName, const std::string& channelName, DtStateVisualizer* v);
00197 
00200      template <typename T, typename C>
00201       void connectAndUpdate(boost::signal<void (T)>& sig, void (C::*fp)(T), T val)
00202      {
00203         myConnections.manageConnection(sig.connect(boost::bind(fp, static_cast<C*>(this), _1)));
00204         ((C&)(*this).*fp)(val);
00205      }
00206 
00207    protected:
00208 
00211       const DtUnicode* chooseRandomString(const std::vector<DtUnicode>& stringList);
00212 
00213    protected:
00214       typedef boost::unordered_multimap<std::string,DtStateVisualizer* >StateVisualizerMap;
00215 
00216       DtBaseConnection& myBaseConnection;
00217       DtStateVisualizerFactory& myCachedFactory;
00218       DtStateListener& myStateListener;
00219       StateVisualizerMap myVisualizers;
00220       DtSignalConnectionManager myConnections;
00221       const DtElementDefinitionNew* myDefinition;
00222 
00223 
00224       bool mySelected;
00225       bool myPickable;
00226       bool myVisible;
00227       bool myDistribute;
00228 
00229       DtSceneObjectVisualizer* mySceneObjectVisualizer;
00230       typedef std::vector<DtShowHideContext::ShowHideContext> ShowHideContexts;
00231 
00232       ShowHideContexts myShowHideContexts;
00233       int myModelSet;
00234    };
00235 
00236    template <typename VisualizerClass>
00237    inline void DtVisualizerSet::findVisualizers(
00238       std::vector<VisualizerClass*>& visualizers)
00239    {
00240       std::pair<StateVisualizerMap::iterator,
00241          StateVisualizerMap::iterator> range = myVisualizers.equal_range(
00242          VisualizerClass::theTypeInfo().schema.name());
00243 
00244       for(; range.first != range.second; ++range.first)
00245       {
00246          VisualizerClass* instance = dynamic_cast<VisualizerClass*>(
00247             range.first->second);
00248          if(instance)
00249          {
00250             visualizers.push_back(instance);
00251          }
00252       }
00253    }
00254 
00255    template <typename VisualizerClass>
00256    inline void DtVisualizerSet::findVisualizersByDynamicCast(
00257       std::vector<VisualizerClass*>& visualizers)
00258    {
00259       StateVisualizerMap::const_iterator iter = myVisualizers.begin();
00260 
00261       for(; iter != myVisualizers.end(); iter++)
00262       {
00263          VisualizerClass* instance = dynamic_cast<VisualizerClass*>(iter->second);
00264 
00265          if (instance)
00266          {
00267             visualizers.push_back(instance);
00268          }
00269       }
00270    }
00271 }

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)