VR-Forces 4.3.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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
10 #include <vrvOsg/vrvOsg.h>
11 
14 
15 #include <vrvOsg/DtModelParser.h>
16 
17 #include <osg/Group>
18 #include <osg/Sequence>
19 #include <osgSim/DOFTransform>
20 #include <osgSim/MultiSwitch>
21 
22 #include <stack>
23 
24 #include <boost/unordered_map.hpp>
25 
26 namespace osg
27 {
28  class Group;
29  class Sequence;
30 }
31 
32 namespace makVrv
33 {
34  class DtOsgArticulatedModel;
35 
39  {
40  public:
43  typedef std::vector<osg::ref_ptr<osgSim::DOFTransform> > PartTransformList;
44  typedef boost::unordered_map<int, PartTransformList > PartMap;
45  typedef std::vector< osg::ref_ptr<osgSim::MultiSwitch> > StateList;
46  typedef boost::unordered_map<int, StateList > StateMap;
47  typedef std::vector< osg::ref_ptr<osg::Sequence> > AnimationList;
48  typedef boost::unordered_map<std::string, AnimationList > AnimationMap;
49  typedef std::map<int, int > StateValueMap;
50  typedef std::vector<bool> StateExistenceList;
51  typedef boost::unordered_map<int, StateExistenceList> StateExistenceMap;
52  typedef std::vector< osg::ref_ptr<osg::Group> > GroupList;
53  typedef boost::unordered_map<std::string, GroupList > AnnotationMap;
55 
58 
60  virtual ~DtArticulatedModelParser();
61 
64  static std::string parserFormat();
65 
67 
68 
69  virtual void apply(osg::Group& group);
70  virtual void apply(osg::Sequence& sequence);
71  virtual void apply(osgSim::MultiSwitch& multiswitch);
72  virtual void apply(osgSim::DOFTransform& transform);
73  virtual void apply(osg::Transform& transform);
75 
76  protected:
77 
82  virtual bool parseSwitchDeclaration( const std::string& desc,
83  osgSim::MultiSwitch& multiswitch );
84 
87  const DtModelSemanticsMapper::States::Id* createCustomStateId(
88  const std::string& stateName, DtModelSemanticsMapper& mapper);
89 
94  virtual bool parseStateDeclaration( const std::string& desc,
95  osg::Group& group );
96 
101  virtual bool parseAnnotationDeclaration( const std::string& desc,
102  osg::Group& group );
103 
108  virtual bool parsePartDeclaration(const std::string& desc,
109  osgSim::DOFTransform& transform);
110 
115  virtual bool parseAnimationDeclaration(const std::string& desc,
116  osg::Sequence& sequence);
117 
119  std::vector<int> parseValueList(const std::string& valueList);
120 
123  void pushStateId(int idNumber, osgSim::MultiSwitch* lastStateId);
124 
127  void popStateId();
128 
130  osgSim::MultiSwitch* lastStateId() const;
131 
133  int lastStateIdNumber() const;
134 
137  void getParts( DtArticulatedModel::PartList& parts ) const;
138  const PartMap& parts() const;
139  const StateMap& states() const;
140  const AnimationMap& animations() const;
141  void addPart( int partNumber,osgSim::DOFTransform* node );
142  void addState( int stateNumber ,osgSim::MultiSwitch* node );
143  void addAnimation( const std::string& animationName,osg::Sequence* node );
144  void setStateValueExists( int stateNumber, int stateValue );
145  void addAnnotationGroup(const std::string& annotation, osg::Group* group);
146  void setDepthMask( osg::Group& parent );
148 
149  protected:
150 
151  std::string mySwitchTag;
152  std::string myStateTag;
153  std::string myPartTag;
154  std::string myAnimationTag;
155  std::string mySkipTag;
156  std::string myNoSkipTag;
157  std::string myAnnotationTag;
158 
159  std::stack<osg::ref_ptr<osgSim::MultiSwitch> > myStateIds;
160  std::stack<int> myStateIdNumbers;
161 
163 
164  public:
171  };
172 
176  {
177  public:
178 
181  static void registerCreator(DtDe& de);
182 
185 
188 
190  virtual DtModelParser* create(DtDe& de);
191  };
192 
193 }

Document ID: Generated on Wed Jul 29 00:55:00 EDT 2015 from SVN revision 155257
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)