![]() |
VR-Forces 4.0.4 Class Documentation
|
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 }