VR-Forces 4.0.4 Class Documentation
include/vrvOsg/DtOsgArticulatedModel.h
Go to the documentation of this file.
00001 /*****************************************************************************
00002  * Copyright (c) 2011 MAK Technologies, Inc.
00003  * All rights reserved.
00004  *****************************************************************************/
00005 /*****************************************************************************
00006  * $RCSfile: DtOsgArticulatedModel.h,v $ $Revision: 1.18 $ $State: Exp $
00007  *****************************************************************************/
00008 
00012 
00013 #pragma once
00014 
00015 #include <vrvOsg/vrvOsg.h>
00016 
00017 #include <vrvCore/DtArticulatedModel.h>
00018 
00019 #include <boost/unordered_map.hpp>
00020 
00021 #include <matrix/vlTaitBryan.h>
00022 #include <matrix/vlVector.h>
00023 
00024 #include <osg/ref_ptr>
00025 
00026 namespace osg
00027 {
00028    class Matrixd;
00029    class Sequence;
00030    class Node;
00031 }
00032 
00033 namespace osgSim
00034 {
00035    class DOFTransform;
00036    class MultiSwitch;
00037 }
00038 
00039 namespace makVrv 
00040 {
00041 
00042    class DtOsgSceneConnector;
00043 
00047    class DT_DLL_VRVOSG DtOsgArticulatedModel : public DtArticulatedModel
00048    {
00049    public:
00050 
00051       typedef std::vector<osg::Node*> NodeList;
00052       typedef boost::unordered_map<int, NodeList> NodePathCache;
00053 
00054       typedef std::vector<osg::ref_ptr<osgSim::DOFTransform> > PartTransformList;
00055       typedef boost::unordered_map<int, PartTransformList > PartMap;
00056 
00057       typedef std::vector< osg::ref_ptr<osgSim::MultiSwitch> > StateList;
00058       typedef boost::unordered_map<int, StateList > StateMap;
00059 
00060       typedef std::vector< osg::ref_ptr<osg::Sequence> > AnimationList;
00061       typedef boost::unordered_map<std::string, AnimationList > AnimationMap;
00062 
00064       DtOsgArticulatedModel(DtDe&, DtUniqueID id);
00065 
00067       virtual ~DtOsgArticulatedModel();
00068 
00069 
00072       virtual void setModelDefinition(const std::string& str);
00073 
00076       virtual std::string className() const;
00077 
00080       virtual void setModelScalingEnabled( bool b );
00081 
00085       virtual void setLocalModelScalingEnabled( bool enabled );
00086 
00089       virtual void setLocalModelScalingAmount( float localScl );
00090 
00091       virtual void setPosition( int vtx, const DtVector& position );
00092       virtual void setOrientation( int vtx, const DtTaitBryan& orientation );
00093       virtual void setVisible(bool isVisible);
00094       virtual void setVisibleViaSwitch(bool isVisible);
00095 
00097 
00099       virtual void setPartTranslation(int partNumber, 
00100          const DtVector& transform, const DtVector& velocity);
00101 
00103       virtual void setPartOrientation(int partNumber, 
00104          const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
00105 
00107       virtual void setState(int stateNumber, int stateValue);
00108 
00110       virtual void setAnimationFrame(const std::string& animationName, 
00111          int frameIndex);
00112 
00114       virtual void setAnimationRange(const std::string& animationName, 
00115          int firstFrameIndex, int lastFrameIndex);
00116 
00118       virtual void setAnimationSpeed(const std::string& animationName, 
00119          double framesPerSecond);
00120 
00122 
00123       //@name Non-distributed functions
00125 
00129       virtual bool findPartPositionAndOrientation(int partNumber, 
00130          DtVector& position, DtQuat& ori);
00131 
00134       DtVector partTranslation(int partNumber);
00135 
00138       DtTaitBryan partOrientation(int partNumber);
00139 
00142       int state(int stateNumber);
00143 
00146       int animationFrameCount(const std::string& animationName);
00147 
00150       int animationCurrentFrame(const std::string& animationName);
00151 
00154       int animationFirstFrame(const std::string& animationName);
00155 
00158       int animationLastFrame(const std::string& animationName);
00159 
00162       double animationSpeed(const std::string& animationName);
00163 
00165       const PartMap& parts() const;
00166 
00168       virtual void getParts(PartList& parts) const;
00169 
00171       const StateMap& states() const;
00172 
00174       const AnimationMap& animations() const;      
00175 
00177       virtual void addPart(int partNumber,osgSim::DOFTransform* node);
00178 
00180       virtual void addState(int stateNumber,osgSim::MultiSwitch* node);
00181 
00184       virtual void setStateValueExists(int stateNumber, int stateValue);
00185 
00187       virtual void addAnimation(const std::string& animationName,
00188          osg::Sequence* node);
00189 
00190       virtual void setColor(float r, float g, float b, float a);
00191       
00192       virtual void setPartVisibility(int partNumber, bool onOff);
00193 
00195       virtual void setSolid(bool isSolid);
00196 
00198 
00199    protected:
00200 
00201       virtual void addToScene( const DtUniqueID& sceneObjectId, int modelSet,
00202          int visualizerType );
00203       virtual void removeFromScene();
00204 
00205       virtual void disablePart(int partNumber);
00206       virtual void enablePart(int partNumber);
00207 
00208       virtual void modelInstanceToBeDeleted();
00209       virtual void modelInstanceCreated(bool castShadows);
00210 
00211       static void matrixdToTaitBryan( const osg::Matrixd& rotation, DtTaitBryan& tb );
00212       static double clampUnity( double x );
00213       
00214    protected:
00215 
00216       typedef std::vector<bool> StateExistenceList;
00217       typedef boost::unordered_map<int, StateExistenceList> StateExistenceMap;
00218       StateExistenceMap myStateExistenceMap;
00219 
00220       DtOsgSceneConnector* mySceneConnector;
00221       PartMap myPartMap;
00222       StateMap myStateMap;
00223       AnimationMap myAnimationMap;
00224       NodePathCache myNodePathCache;
00225       static const unsigned int theNodePathCacheSize = 4;
00226       bool myUseSwitch;
00227    }; 
00228 } 

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)