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