![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtStateVisualizer.h,v $ $Revision: 1.43 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 #include <vrvCore/DtUniqueID.h> 00015 #include <vrvCore/DtVisualizerSchema.h> 00016 #include <vrvUtil/DtSignalConnectionManager.h> 00017 #include <vrvUtil/DtUnicode.h> 00018 #include <makArchives/DtSchemaEntry.h> 00019 #include <boost/bind.hpp> 00020 #include <string> 00021 00022 namespace makVrv 00023 { 00024 class DtSceneObjectAgent; 00025 class DtBaseConnection; 00026 class DtMouseState; 00027 class DtStateListener; 00028 class DtVisualizerDefinition; 00029 00033 class DT_DLL_VRVCORE DtStateVisualizer 00034 { 00035 00036 public: 00040 enum Type 00041 { 00042 AllVisualizerTypes = 0, 00043 EntityVisualizerType = 1, 00044 EnvironmentalVisualizerType, 00045 InteractionVisualizerType, 00046 AggregateVisualizerType, 00047 IntervisibilityVisualizerType, 00048 UserType = 10000 00049 }; 00050 00054 struct DT_DLL_VRVCORE TypeInfo 00055 { 00056 TypeInfo(const std::string& fname, 00057 const DtUnicode& sname, 00058 DtStateVisualizer::Type type, 00059 const DtVisualizerSchema& s) 00060 : functionalTypeName(fname) 00061 , screenName(sname) 00062 , supportedVisualizerType(type) 00063 , schema(s) 00064 { 00065 } 00066 00067 const std::string functionalTypeName; 00068 const DtUnicode screenName; 00069 const DtStateVisualizer::Type supportedVisualizerType; 00070 const DtVisualizerSchema& schema; 00071 }; 00072 00073 public: 00075 DtStateVisualizer(DtBaseConnection& connection, DtStateListener& listener, 00076 int modelSet); 00077 00079 virtual ~DtStateVisualizer(); 00080 00083 virtual void createModelAgents() = 0; 00084 00086 virtual void destroyModelAgents() = 0; 00087 00090 virtual const TypeInfo& typeInfo() const = 0; 00091 00095 virtual void setParent(DtStateVisualizer*); 00096 00098 void setModelDefinition(const std::string& definition); 00099 00101 const std::string& modelDefinition() const; 00102 00109 virtual bool setVisible(bool visible, int context); 00110 00112 virtual void initialize(); 00113 00115 virtual bool isVisible() const; 00116 00118 virtual void setSelected(bool); 00119 virtual bool selected() const; 00120 00123 void setName(const std::string&); 00124 const std::string& name() const; 00125 00127 virtual void setPickable(bool); 00128 virtual bool pickable() const; 00129 00130 virtual void setUniqueID(DtUniqueID id); 00131 00132 DtUniqueID uniqueID() const 00133 { 00134 return myUniqueID; 00135 } 00136 00137 int visualizerType() const 00138 { 00139 return myVisualizerType; 00140 } 00141 00143 void setShowHideContext(const std::vector<int>& s) 00144 { 00145 myShowHideContexts = s; 00146 } 00147 00150 virtual void setVisualizerDefinition(const DtVisualizerDefinition&); 00151 00152 //Get the listener for this visualizer. 00153 inline DtStateListener& listener() 00154 { 00155 return myListener; 00156 } 00157 00159 inline DtBaseConnection& simulation() 00160 { 00161 return mySimulation; 00162 } 00163 00165 void setDistribute(bool b) 00166 { 00167 myDistributeFlag = b; 00168 } 00169 00170 bool distribute() const 00171 { 00172 return myDistributeFlag; 00173 } 00174 00178 boost::signal<void (DtStateVisualizer*, DtStateVisualizer*, 00179 DtStateVisualizer*)> signal_reparented; 00180 00182 boost::signal<void (DtMouseState&, const DtUniqueID&, const std::string&, 00183 const std::string&,const std::string&, DtStateVisualizer*)> 00184 signal_mouseDown; 00185 boost::signal<void (DtMouseState&, const DtUniqueID&, const std::string&, 00186 const std::string&,const std::string&, DtStateVisualizer*)> 00187 signal_mouseUp; 00188 boost::signal<void (DtMouseState&, const DtUniqueID&, const std::string&, 00189 const std::string&,const std::string&, DtStateVisualizer*)> 00190 signal_mouseDblClick; 00191 00192 protected: 00193 00195 virtual void slot_mouseDown(DtMouseState& mouseState, 00196 const std::string& displayEngineName, const std::string& windowName, 00197 const std::string& channelName); 00198 virtual void slot_mouseUp(DtMouseState& mouseState, 00199 const std::string& displayEngineName, const std::string& windowName, 00200 const std::string& channelName); 00201 virtual void slot_mouseDblClick(DtMouseState& mouseState, 00202 const std::string& displayEngineName, const std::string& windowName, 00203 const std::string& channelName); 00204 00205 protected: 00209 virtual bool hide(int context); 00210 00214 virtual bool show(int context); 00215 00218 virtual bool supportsShowHideContext(int) const; 00219 00223 virtual void setModelDefinitionForAgents() = 0; 00224 00226 template <typename T, typename C> 00227 void connectAndUpdate(boost::signal<void (T)>& sig,void (C::*fp)(T),T val) 00228 { 00229 myConnections.manageConnection(sig.connect(boost::bind(fp, 00230 static_cast<C*>(this), _1))); 00231 //Call this connection. 00232 ((C&)(*this).*fp)(val); 00233 } 00234 00235 protected: 00236 00237 DtBaseConnection& mySimulation; 00238 DtStateListener& myListener; 00239 00240 bool myDistributeFlag; 00241 00242 DtUniqueID myUniqueID; 00243 std::string myName; 00244 std::string myModelDefinition; 00245 DtSignalConnectionManager myConnections; 00246 int myModelSet; 00247 int myVisualizerType; 00248 00249 std::vector<int> myShowHideContexts; 00250 bool mySelected; 00251 bool myPickable; 00252 bool myVisible; 00253 00254 DtStateVisualizer* myParent; 00255 DtSceneObjectAgent* mySceneObjectAgent; 00256 }; 00257 00260 class DT_DLL_VRVCORE DtStateVisualizerCreator 00261 { 00262 public: 00263 00265 DtStateVisualizerCreator() 00266 { 00267 } 00268 00270 virtual ~DtStateVisualizerCreator() 00271 { 00272 } 00273 00275 virtual DtStateVisualizerCreator* clone() const = 0; 00276 00278 virtual DtStateVisualizer* create(DtBaseConnection& simulation, 00279 DtStateListener& listener, int modelSet) const = 0; 00280 00282 virtual const DtStateVisualizer::TypeInfo& visualizerTypeInfo() const = 0; 00283 00285 virtual const std::string& tag() = 0; 00286 00287 }; 00288 00289 template <typename StateVisualizer> 00290 class DtStateVisualizerCreatorTemplate : public DtStateVisualizerCreator 00291 { 00292 public: 00293 00295 DtStateVisualizerCreatorTemplate() 00296 { 00297 } 00298 00300 virtual ~DtStateVisualizerCreatorTemplate() 00301 { 00302 } 00303 00304 virtual DtStateVisualizerCreator* clone() const 00305 { 00306 return new DtStateVisualizerCreatorTemplate<StateVisualizer>(); 00307 } 00308 00310 virtual DtStateVisualizer* create(DtBaseConnection& simulation, 00311 DtStateListener& listener, int modelSet) const 00312 { 00313 return new StateVisualizer(simulation, listener, modelSet); 00314 } 00315 00317 virtual const DtStateVisualizer::TypeInfo& visualizerTypeInfo() const 00318 { 00319 return StateVisualizer::theTypeInfo(); 00320 } 00321 00322 virtual const std::string& tag() 00323 { 00324 #ifdef DtDIS 00325 const static std::string str("DIS"); 00326 #elif DtHLA_1516_EVOLVED 00327 const static std::string str("HLA1516e"); 00328 #elif DtHLA_1516 00329 const static std::string str("HLA1516"); 00330 #elif DtHLA 00331 const static std::string str("HLA13"); 00332 #else 00333 const static std::string str(""); 00334 #endif 00335 return str; 00336 } 00337 }; 00338 00339 } 00340