VR-Forces 4.3.1 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 #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 
81  virtual void setLocalModelScalingEnabled( bool enabled );
82 
85  virtual void setLocalModelScalingAmount( float localScl );
86 
90  virtual void setPosition( int vtx, const DtVector& position );
91 
95  virtual void setOrientation( int vtx, const DtTaitBryan& orientation );
96 
100  virtual void setVisible(bool isVisible);
101 
103 
105  virtual void setPartTranslation(int partNumber,
106  const DtVector& transform, const DtVector& velocity);
107 
109  virtual void setPartOrientation(int partNumber,
110  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
111 
113  virtual void setState(int stateNumber, int stateValue);
114 
117  int state( int stateNumber ) const;
118 
122  virtual void setDepthMask(osg::Group& parent);
123 
125  virtual void setAnimationFrame(const std::string& animationName,
126  int frameIndex);
127 
129  virtual void setAnimationRange(const std::string& animationName,
130  int firstFrameIndex, int lastFrameIndex);
131 
133  virtual void setAnimationSpeed(const std::string& animationName,
134  double framesPerSecond);
135 
137  virtual void setAnimationState(const std::string& animationName,
138  AnimationState mode );
139 
144  virtual void setUvOffset(const std::string& annotation,
145  float uOffset, float vOffset);
146 
148  virtual void setDynamicSensorRegion( const std::string& region, bool state );
149 
151  virtual bool dynamicSensorRegion( const std::string& region );
152 
154 
155  //@name Non-distributed functions
157 
161  virtual bool findPartPositionAndOrientation(int partNumber,
162  DtVector& position, DtQuat& ori);
163 
166  DtVector partTranslation(int partNumber);
167 
170  DtTaitBryan partOrientation(int partNumber);
171 
174  int state(int stateNumber);
175 
178  int animationFrameCount(const std::string& animationName);
179 
182  int animationCurrentFrame(const std::string& animationName);
183 
186  int animationFirstFrame(const std::string& animationName);
187 
190  int animationLastFrame(const std::string& animationName);
191 
194  double animationSpeed(const std::string& animationName);
195 
198  AnimationState animationState(const std::string& animationName);
199 
201  const DtArticulatedModelParser::PartMap& parts() const;
202 
204  virtual void getParts(PartList& parts) const;
205 
207  const DtArticulatedModelParser::StateMap& states() const;
208 
210  const DtArticulatedModelParser::AnimationMap& animations() const;
211 
213  virtual void addPart(int partNumber,osgSim::DOFTransform* node);
214 
216  virtual void addState(int stateNumber,osgSim::MultiSwitch* node);
217 
220  virtual void setStateValueExists(int stateNumber, int stateValue);
221 
223  virtual void addAnimation(const std::string& animationName,
224  osg::Sequence* node);
225 
227  virtual void addAnnotationGroup(const std::string& annotation, osg::Group* group);
228 
230  virtual void setColor(float r, float g, float b, float a);
231 
233  virtual void enableColorBlending( bool b );
234 
236  virtual void setBlendColor(float r, float g, float b, float a);
237 
239  virtual void setPartVisibility(int partNumber, bool onOff);
240 
244  virtual void setIsSupportModel(bool isSupport);
245 
247  virtual void getBoundingBoxComponents( DtVector& minimum, DtVector& maximum );
248 
251  std::vector<DtVirtualBaseClass*>& modelAttachments();
252 
255  virtual bool applyMetafile(const DtModelDefinition* definition);
256 
258  virtual void slot_onShadowStateChanged(bool on);
259 
261 
265  DtUniqueID sceneObjectId();
266 
268  virtual void setElementId(DtUniqueID id);
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 
282  void parseModel(osg::Node* root);
283 
286  virtual void calculateInstancedBounds(double& radius, DtVector& center );
287 
288  static void matrixdToTaitBryan( const osg::Matrixd& rotation, DtTaitBryan& tb );
289  static double clampUnity( double x );
290 
291 
292  protected:
297 
304  static const unsigned int theNodePathCacheSize = 4;
306 
307  typedef boost::unordered_map<std::string, bool> SensorRegionStateMap;
309 
311 
312  std::string myModelDefinition;
313 
315 
318 
321  std::vector<DtVirtualBaseClass*> myModelMetaAttachments;
322 
325 
326  DtVector myBoundMin, myBoundMax;
327 
329 
330  // These are used for backwards compatibility only. Even though you
331  // always call setModelDefinition (to finish constructing the model)
332  // before calling anything else, you used to be able to get away with
333  // calling setPosition() or setOrientation() first. That's no longer
334  // strictly true, so we have to store any position or orientation that
335  // gets set and then explicitly use them after setModelDefinition is
336  // called.
337 
340  DtTaitBryan mySetOrientation;
342  };
343 }

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)