VR-Forces 4.6.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtArticulatedModelParser.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
8 
9 #pragma once
12 
13 #include <vrvOsg/DtModelParser.h>
14 
15 #include <osg/Group>
16 #include <osg/Sequence>
17 #include <osgSim/DOFTransform>
18 #include <osgSim/MultiSwitch>
19 
20 #include <stack>
21 
22 #include <boost/unordered_map.hpp>
23 
24 namespace osg
25 {
26  class Group;
27  class Sequence;
28 }
29 
30 namespace makVrv
31 {
32  class DtOsgArticulatedModel;
33 
37  {
38  public:
41  typedef std::vector<osg::ref_ptr<osgSim::DOFTransform> > PartTransformList;
42  typedef boost::unordered_map<int, PartTransformList > PartMap;
43  typedef std::vector< osg::ref_ptr<osgSim::MultiSwitch> > StateList;
44  typedef boost::unordered_map<int, StateList > StateMap;
45  typedef std::vector< osg::ref_ptr<osg::Sequence> > AnimationList;
46  typedef boost::unordered_map<std::string, AnimationList > AnimationMap;
47  typedef std::map<int, int > StateValueMap;
48  typedef std::vector<bool> StateExistenceList;
49  typedef boost::unordered_map<int, StateExistenceList> StateExistenceMap;
50  typedef std::vector< osg::ref_ptr<osg::Group> > GroupList;
51  typedef boost::unordered_map<std::string, GroupList > AnnotationMap;
52  typedef std::vector<bool> ValueList;
53  typedef std::vector<ValueList> SwitchSetList;
54  typedef std::map<osgSim::MultiSwitch*, SwitchSetList> SwitchSetMap;
56 
59 
61  virtual ~DtArticulatedModelParser();
62 
65  static std::string parserFormat();
66 
68 
69 
70  virtual void apply(osg::Group& group);
71  virtual void apply(osg::Sequence& sequence);
72  virtual void apply(osgSim::MultiSwitch& multiswitch);
73  virtual void apply(osgSim::DOFTransform& transform);
74  virtual void apply(osg::Transform& transform);
76 
77  protected:
78 
83  virtual bool parseSwitchDeclaration( const std::string& desc,
84  osgSim::MultiSwitch& multiswitch );
85 
88  virtual bool parseDefaultMultiSwitchValues(osgSim::MultiSwitch& multiswitch);
89 
92  const DtModelSemanticsMapper::States::Id* createCustomStateId(
93  const std::string& stateName, DtModelSemanticsMapper& mapper);
94 
99  virtual bool parseStateDeclaration( const std::string& desc,
100  osg::Group& group );
101 
106  virtual bool parseAnnotationDeclaration( const std::string& desc,
107  osg::Group& group );
108 
113  virtual bool parsePartDeclaration(const std::string& desc,
114  osgSim::DOFTransform& transform);
115 
120  virtual bool parseAnimationDeclaration(const std::string& desc,
121  osg::Sequence& sequence);
122 
124  std::vector<int> parseValueList(const std::string& valueList);
125 
128  void pushStateId(int idNumber, osgSim::MultiSwitch* lastStateId);
129 
132  void popStateId();
133 
135  osgSim::MultiSwitch* lastStateId() const;
136 
138  int lastStateIdNumber() const;
139 
142  void getParts( DtArticulatedModel::PartList& parts ) const;
143  const PartMap& parts() const;
144  const StateMap& states() const;
145  const AnimationMap& animations() const;
146  void addPart( int partNumber,osgSim::DOFTransform* node );
147  void addState( int stateNumber ,osgSim::MultiSwitch* node );
148  void addAnimation( const std::string& animationName,osg::Sequence* node );
149  void setStateValueExists( int stateNumber, int stateValue );
150  void addAnnotationGroup(const std::string& annotation, osg::Group* group);
151  void setDepthMask( osg::Group& parent );
153 
154  protected:
155 
156  std::string mySwitchTag;
157  std::string myStateTag;
158  std::string myPartTag;
159  std::string myAnimationTag;
160  std::string mySkipTag;
161  std::string myNoSkipTag;
162  std::string myAnnotationTag;
163  std::string myLoopCountTag;
164  std::string myLastFrameTimeTag;
165 
166  std::stack<osg::ref_ptr<osgSim::MultiSwitch> > myStateIds;
167  std::stack<int> myStateIdNumbers;
168 
170 
171  public:
179  };
180 
184  {
185  public:
186 
189  static void registerCreator(DtDe& de);
190 
193 
196 
198  virtual DtModelParser* create(DtDe& de);
199  };
200 
201 }

Document ID: Generated on Wed Jul 25 16:57:45 EDT 2018 from SVN revision 190790
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)