VR-Forces Development_Version 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 
128  virtual void setAnimationFrame(const std::string& animationName,
129  int frameIndex);
130 
132  virtual void setAnimationRange(const std::string& animationName,
133  int firstFrameIndex, int lastFrameIndex);
134 
136  virtual void setAnimationSpeed(const std::string& animationName,
137  double framesPerSecond);
138 
140  virtual void setAnimationState(const std::string& animationName,
141  AnimationState mode );
142 
147  virtual void setUvOffset(const std::string& annotation,
148  float uOffset, float vOffset);
149 
151  virtual void setDynamicSensorRegion( const std::string& region, bool state );
152 
154  virtual bool dynamicSensorRegion( const std::string& region );
155 
157 
158  //@name Non-distributed functions
160 
164  virtual bool findPartPositionAndOrientation(int partNumber,
165  DtVector& position, DtQuat& ori);
166 
169  DtVector partTranslation(int partNumber);
170 
173  DtTaitBryan partOrientation(int partNumber);
174 
177  int state(int stateNumber);
178 
181  int animationFrameCount(const std::string& animationName);
182 
185  int animationCurrentFrame(const std::string& animationName);
186 
189  int animationFirstFrame(const std::string& animationName);
190 
193  int animationLastFrame(const std::string& animationName);
194 
197  double animationSpeed(const std::string& animationName);
198 
201  AnimationState animationState(const std::string& animationName);
202 
204  const DtArticulatedModelParser::PartMap& parts() const;
205 
207  virtual void getParts(PartList& parts) const;
208 
210  const DtArticulatedModelParser::StateMap& states() const;
211 
213  const DtArticulatedModelParser::AnimationMap& animations() const;
214 
216  virtual void addPart(int partNumber,osgSim::DOFTransform* node);
217 
219  virtual void addState(int stateNumber,osgSim::MultiSwitch* node);
220 
223  virtual void setStateValueExists(int stateNumber, int stateValue);
224 
226  virtual void addAnimation(const std::string& animationName,
227  osg::Sequence* node);
228 
230  virtual void addAnnotationGroup(const std::string& annotation, osg::Group* group);
231 
233  virtual void setColor(float r, float g, float b, float a);
234 
236  virtual void enableColorBlending( bool b );
237 
239  virtual void setBlendColor(float r, float g, float b, float a);
240 
242  virtual void setPartVisibility(int partNumber, bool onOff);
243 
247  virtual void setIsSupportModel(bool isSupport);
248 
250  virtual void getBoundingBoxComponents( DtVector& minimum, DtVector& maximum );
251 
254  std::vector<DtVirtualBaseClass*>& modelAttachments();
255 
258  virtual bool applyMetafile(const DtModelDefinition* definition);
259 
261  virtual void slot_onShadowStateChanged(bool on);
262 
264 
268  DtUniqueID sceneObjectId();
269 
271  virtual void setElementId(DtUniqueID id);
272 
273  protected:
274 
275  virtual void addToScene( const DtUniqueID& sceneObjectId, int modelSet,
276  int visualizerType );
277  virtual void removeFromScene();
278 
279  virtual void disablePart(int partNumber);
280  virtual void enablePart(int partNumber);
281 
282  virtual void modelInstanceToBeDeleted();
283  virtual void modelInstanceCreated(bool castShadows);
284 
285  void parseModel(osg::Node* root);
286 
287  protected:
292 
299  static const unsigned int theNodePathCacheSize = 4;
301 
302  typedef boost::unordered_map<std::string, bool> SensorRegionStateMap;
304 
306 
307  std::string myModelDefinition;
308 
310 
313 
316  std::vector<DtVirtualBaseClass*> myModelMetaAttachments;
317 
320 
321  DtVector myBoundMin, myBoundMax;
322 
324 
325  //needed to keep track of the initial state of the model scaling flag
327 
328  // These are used for backwards compatibility only. Even though you
329  // always call setModelDefinition (to finish constructing the model)
330  // before calling anything else, you used to be able to get away with
331  // calling setPosition() or setOrientation() first. That's no longer
332  // strictly true, so we have to store any position or orientation that
333  // gets set and then explicitly use them after setModelDefinition is
334  // called.
335 
338  DtTaitBryan mySetOrientation;
340 
341  // The model needs to hold on to this so it can provide it to the instance
342  // manager if the model is eventually instanced
344  };
345 }

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)