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

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)