VR-Forces 4.3 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DtOsgArticulatedModel.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2015 MAK Technologies, Inc.
3  * All rights reserved.
4  *****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvOsg/vrvOsg.h>
13 
15 
16 #include <vrvOsg/DtInstanceState.h>
17 
18 #include <boost/unordered_map.hpp>
19 
22 
23 #include <matrix/vlTaitBryan.h>
24 #include <matrix/vlVector.h>
25 
26 #include <osg/ref_ptr>
27 
28 namespace osg
29 {
30  class Matrixd;
31  class Sequence;
32  class Node;
33  class Group;
34 }
35 
36 namespace osgSim
37 {
38  class DOFTransform;
39  class MultiSwitch;
40 }
41 
42 namespace makVrv
43 {
44  class DtInstanceManager;
45  class DtOsgSceneConnector;
46  class DtModelDefinition;
47 
52  {
53  public:
54 
55  typedef std::vector<osg::Node*> NodeList;
56  typedef boost::unordered_map<int, NodeList> NodePathCache;
57 
58  typedef std::vector<osg::ref_ptr<osgSim::DOFTransform> > PartTransformList;
59  typedef boost::unordered_map<int, PartTransformList > PartMap;
60 
61  typedef std::vector< osg::ref_ptr<osgSim::MultiSwitch> > StateList;
62  typedef boost::unordered_map<int, StateList > StateMap;
63 
64  typedef std::vector< osg::ref_ptr<osg::Sequence> > AnimationList;
65  typedef boost::unordered_map<std::string, AnimationList > AnimationMap;
66 
67  typedef std::vector< osg::ref_ptr<osg::Group> > GroupList;
68  typedef boost::unordered_map<std::string, GroupList > AnnotationMap;
69 
72 
74  virtual ~DtOsgArticulatedModel();
75 
76 
79  virtual void setModelDefinition(const std::string& str);
80 
83  virtual std::string className() const;
84 
87  virtual void setModelScalingEnabled( bool b );
88 
92  virtual void setLocalModelScalingEnabled( bool enabled );
93 
96  virtual void setLocalModelScalingAmount( float localScl );
97 
101  virtual void setPosition( int vtx, const DtVector& position );
102 
106  virtual void setOrientation( int vtx, const DtTaitBryan& orientation );
107 
111  virtual void setVisible(bool isVisible);
112 
114 
116  virtual void setPartTranslation(int partNumber,
117  const DtVector& transform, const DtVector& velocity);
118 
120  virtual void setPartOrientation(int partNumber,
121  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
122 
124  virtual void setState(int stateNumber, int stateValue);
125 
128  int state( int stateNumber ) const;
129 
133  virtual void setDepthMask(osg::Group& parent);
134 
136  virtual void setAnimationFrame(const std::string& animationName,
137  int frameIndex);
138 
140  virtual void setAnimationRange(const std::string& animationName,
141  int firstFrameIndex, int lastFrameIndex);
142 
144  virtual void setAnimationSpeed(const std::string& animationName,
145  double framesPerSecond);
146 
148  virtual void setAnimationState(const std::string& animationName,
149  AnimationState mode );
150 
155  virtual void setUvOffset(const std::string& annotation,
156  float uOffset, float vOffset);
157 
159  virtual void setDynamicSensorRegion( const std::string& region, bool state );
160 
162  virtual bool dynamicSensorRegion( const std::string& region );
163 
165 
166  //@name Non-distributed functions
168 
172  virtual bool findPartPositionAndOrientation(int partNumber,
173  DtVector& position, DtQuat& ori);
174 
177  DtVector partTranslation(int partNumber);
178 
181  DtTaitBryan partOrientation(int partNumber);
182 
185  int state(int stateNumber);
186 
189  int animationFrameCount(const std::string& animationName);
190 
193  int animationCurrentFrame(const std::string& animationName);
194 
197  int animationFirstFrame(const std::string& animationName);
198 
201  int animationLastFrame(const std::string& animationName);
202 
205  double animationSpeed(const std::string& animationName);
206 
209  AnimationState animationState(const std::string& animationName);
210 
212  const PartMap& parts() const;
213 
215  virtual void getParts(PartList& parts) const;
216 
218  const StateMap& states() const;
219 
221  const AnimationMap& animations() const;
222 
224  virtual void addPart(int partNumber,osgSim::DOFTransform* node);
225 
227  virtual void addState(int stateNumber,osgSim::MultiSwitch* node);
228 
231  virtual void setStateValueExists(int stateNumber, int stateValue);
232 
234  virtual void addAnimation(const std::string& animationName,
235  osg::Sequence* node);
236 
238  virtual void addAnnotationGroup(const std::string& annotation, osg::Group* group);
239 
241  virtual void setColor(float r, float g, float b, float a);
242 
244  virtual void setBlendColor(float r, float g, float b, float a);
245 
247  virtual void setPartVisibility(int partNumber, bool onOff);
248 
250  virtual void setSolid(bool isSolid);
251 
253  virtual void getBoundingBoxComponents( DtVector& minimum, DtVector& maximum );
254 
257  std::vector<DtVirtualBaseClass*>& modelAttachments();
258 
261  virtual bool applyMetafile(const DtModelDefinition* definition);
262 
264 
268  DtUniqueID sceneObjectId();
269 
270  protected:
271 
272  virtual void addToScene( const DtUniqueID& sceneObjectId, int modelSet,
273  int visualizerType );
274  virtual void removeFromScene();
275 
276  virtual void disablePart(int partNumber);
277  virtual void enablePart(int partNumber);
278 
279  virtual void modelInstanceToBeDeleted();
280  virtual void modelInstanceCreated(bool castShadows);
281 
284  virtual void calculateInstancedBounds(double& radius, DtVector& center );
285 
286  static void matrixdToTaitBryan( const osg::Matrixd& rotation, DtTaitBryan& tb );
287  static double clampUnity( double x );
288 
289 
290  protected:
291 
292 
293 
294  typedef std::map<std::string, unsigned int> InstancedAnimationMap;
296 
297  typedef std::vector<ArrayRange> ArrayRangeList;
298  typedef std::map<std::string, ArrayRangeList> InstancedAnnotationMap;
300 
301  typedef std::vector<bool> StateExistenceList;
302  typedef boost::unordered_map<int, StateExistenceList> StateExistenceMap;
304 
305  typedef std::map<int, int > StateValueMap;
307 
314  static const unsigned int theNodePathCacheSize = 4;
316 
317  typedef boost::unordered_map<std::string, bool> SensorRegionStateMap;
319 
321 
322  std::string myModelDefinition;
323 
325 
330  std::vector<DtVirtualBaseClass*> myModelMetaAttachments;
331 
333  typedef std::vector<unsigned int> InstancedPartVec;
334 
339  typedef std::map<unsigned int, InstancedPartVec> PartToInstancedPartMap;
340 
342  {
343  public:
344  virtual ~PartMapCache();
346  };
347 
353  {
354  public:
355  virtual ~AnimationMapCache();
357  };
358 
364  {
365  public:
366  virtual ~BoundingBoxCache();
369  };
370 
374  {
375  public:
376  virtual ~AnnotationCache();
378  };
379 
382 
383  DtVector myBoundMin, myBoundMax;
384 
386 
387  // These are used for backwards compatibility only. Even though you
388  // always call setModelDefinition (to finish constructing the model)
389  // before calling anything else, you used to be able to get away with
390  // calling setPosition() or setOrientation() first. That's no longer
391  // strictly true, so we have to store any position or orientation that
392  // gets set and then explicitly use them after setModelDefinition is
393  // called.
394 
397  DtTaitBryan mySetOrientation;
399  };
400 }

Document ID: Generated on Wed Mar 11 21:20:57 EDT 2015 from SVN revision 150940
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)