VR-Forces 4.5 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) 2016 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 #include <vrvOsg/DtInstanceUtils.h>
18 
19 #include <boost/unordered_map.hpp>
20 
23 
24 #include <matrix/vlTaitBryan.h>
25 #include <matrix/vlVector.h>
26 
27 #include <osg/ref_ptr>
28 
29 namespace osg
30 {
31  class Matrixd;
32  class Sequence;
33  class Node;
34  class Group;
35 }
36 
37 namespace osgSim
38 {
39  class DOFTransform;
40  class MultiSwitch;
41 }
42 
43 namespace makVrv
44 {
45  class DtInstanceManager;
46  class DtOsgSceneConnector;
47  class DtModelDefinition;
48 
53  {
54  public:
55 
56  typedef std::vector<osg::Node*> NodeList;
57  typedef boost::unordered_map<int, NodeList> NodePathCache;
58 
61 
63  virtual ~DtOsgArticulatedModel();
64 
65 
68  virtual void setModelDefinition(const std::string& str);
69 
72  virtual std::string className() const;
73 
76  virtual void setModelScalingEnabled( bool b );
77 
79  virtual bool modelScalingEnabled();
80 
84  virtual void setLocalModelScalingEnabled( bool enabled );
85 
88  virtual void setLocalModelScalingAmount( float localScl );
89 
93  virtual void setPosition( int vtx, const DtVector& position );
94 
98  virtual void setOrientation( int vtx, const DtTaitBryan& orientation );
99 
103  virtual void setVisible(bool isVisible);
104 
106 
108  virtual void setPartTranslation(int partNumber,
109  const DtVector& transform, const DtVector& velocity);
110 
112  virtual void setPartOrientation(int partNumber,
113  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
114 
116  virtual void setState(int stateNumber, int stateValue);
117 
120  int state( int stateNumber ) const;
121 
125  virtual void setDepthMask(osg::Group& parent);
126 
129  virtual void setAnimationFrame(const std::string& animationName,
130  int frameIndex);
131 
134  virtual void setAnimationRange(const std::string& animationName,
135  int firstFrameIndex, int lastFrameIndex);
136 
138  virtual void setAnimationSpeed(const std::string& animationName,
139  double framesPerSecond);
140 
142  virtual void setAnimationState(const std::string& animationName,
144 
148  virtual void setAnimationLastFrameTime(const std::string& animationName,double animationLastFrameTime);
149 
153  virtual void setAnimationLoopCount(const std::string& animationName, int loopCount);
154 
159  virtual void setUvOffset(const std::string& annotation,
160  float uOffset, float vOffset);
161 
163  virtual void setDynamicSensorRegion( const std::string& region, bool state );
164 
166  virtual bool dynamicSensorRegion( const std::string& region );
167 
169 
170  //@name Non-distributed functions
172 
176  virtual bool findPartPositionAndOrientation(int partNumber,
177  DtVector& position, DtQuat& ori);
178 
181  DtVector partTranslation(int partNumber);
182 
185  DtTaitBryan partOrientation(int partNumber);
186 
189  int state(int stateNumber);
190 
193  int animationFrameCount(const std::string& animationName);
194 
197  int animationCurrentFrame(const std::string& animationName);
198 
202  int animationFirstFrame(const std::string& animationName);
203 
207  int animationLastFrame(const std::string& animationName);
208 
211  double animationSpeed(const std::string& animationName);
212 
215  AnimationState animationState(const std::string& animationName);
216 
220  double animationLastFrameTime(const std::string& animationName);
221 
223  // default param is -1, repeat forever
225  int animationLoopCount(const std::string& animationName);
226 
228  const DtArticulatedModelParser::PartMap& parts() const;
229 
231  virtual void getParts(PartList& parts) const;
232 
234  const DtArticulatedModelParser::StateMap& states() const;
235 
237  const DtArticulatedModelParser::AnimationMap& animations() const;
238 
240  virtual void addPart(int partNumber,osgSim::DOFTransform* node);
241 
243  virtual void addState(int stateNumber,osgSim::MultiSwitch* node);
244 
247  virtual void setStateValueExists(int stateNumber, int stateValue);
248 
250  virtual void addAnimation(const std::string& animationName,
251  osg::Sequence* node);
252 
254  virtual void addAnnotationGroup(const std::string& annotation, osg::Group* group);
255 
257  virtual void setColor(float r, float g, float b, float a);
258 
260  virtual void enableColorBlending( bool b );
261 
263  virtual void setBlendColor(float r, float g, float b, float a);
264 
266  virtual void setPartVisibility(int partNumber, bool onOff);
267 
271  virtual void setIsSupportModel(bool isSupport);
272 
274  virtual void getBoundingBoxComponents( DtVector& minimum, DtVector& maximum );
275 
278  std::vector<DtVirtualBaseClass*>& modelAttachments();
279 
282  virtual bool applyMetafile(const DtModelDefinition* definition);
283 
285  virtual void slot_onShadowStateChanged(bool on);
286 
288 
292  DtUniqueID sceneObjectId();
293 
295  virtual void setElementId(DtUniqueID id);
296 
297  protected:
298 
299  virtual void addToScene( const DtUniqueID& sceneObjectId, int modelSet,
300  int visualizerType );
301  virtual void removeFromScene();
302 
303  virtual void disablePart(int partNumber);
304  virtual void enablePart(int partNumber);
305 
306  virtual void modelInstanceToBeDeleted();
307  virtual void modelInstanceCreated(bool castShadows, bool daylightControlledLights, float scale);
308 
309  void parseModel(osg::Node* root);
310 
311  protected:
316 
323  static const unsigned int theNodePathCacheSize = 4;
325 
326  typedef boost::unordered_map<std::string, bool> SensorRegionStateMap;
328 
330 
331  std::string myModelDefinition;
332 
334 
337 
340  std::vector<DtVirtualBaseClass*> myModelMetaAttachments;
341 
344 
345  DtVector myBoundMin, myBoundMax;
346 
348 
349  //needed to keep track of the initial state of the model scaling flag
351 
352  // These are used for backwards compatibility only. Even though you
353  // always call setModelDefinition (to finish constructing the model)
354  // before calling anything else, you used to be able to get away with
355  // calling setPosition() or setOrientation() first. That's no longer
356  // strictly true, so we have to store any position or orientation that
357  // gets set and then explicitly use them after setModelDefinition is
358  // called.
359 
362  DtTaitBryan mySetOrientation;
364 
365  // The model needs to hold on to this so it can provide it to the instance
366  // manager if the model is eventually instanced
368  };
369 }

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)