VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtOsgArticulatedModel.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2018 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>
29 
30 namespace osg
31 {
32  class Matrixd;
33  class Sequence;
34  class Node;
35  class Group;
36 }
37 
38 namespace osgSim
39 {
40  class DOFTransform;
41  class MultiSwitch;
42 }
43 
44 namespace makVrv
45 {
46  class DtInstanceManager;
47  class DtOsgSceneConnector;
48  class DtModelDefinition;
49 
54  {
55  public:
56 
57  typedef std::vector<osg::Node*> NodeList;
58  typedef boost::unordered_map<int, NodeList> NodePathCache;
59  typedef std::map<std::string, std::string> LinkageConfigMap;
60 
63 
65  virtual ~DtOsgArticulatedModel();
66 
67 
70  virtual void setModelDefinition(const std::string& str);
71 
74  virtual std::string className() const;
75 
78  virtual void setModelScalingEnabled(bool b);
79 
81  virtual bool modelScalingEnabled();
82 
86  virtual void setLocalModelScalingEnabled(bool enabled);
87 
90  virtual void setLocalModelScalingAmount(float localScl);
91 
95  virtual void setPosition(int vtx, const DtVector& position);
96 
100  virtual void setOrientation(int vtx, const DtTaitBryan& orientation);
101 
105  virtual void setVisible(bool isVisible);
106 
108 
110  virtual void setPartTranslation(int partNumber,
111  const DtVector& transform, const DtVector& velocity);
112 
114  virtual void setPartOrientation(int partNumber,
115  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
116 
118  virtual void setState(int stateNumber, int stateValue);
119 
122  int state(int stateNumber) const;
123 
126  virtual void setLightpointMaxDistance( float distance );
127 
131  virtual void setDepthMask(osg::Group& parent);
132 
135  virtual void setAnimationFrame(const std::string& animationName,
136  int frameIndex);
137 
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,
150 
154  virtual void setAnimationLastFrameTime(const std::string& animationName, double animationLastFrameTime);
155 
159  virtual void setAnimationLoopCount(const std::string& animationName, int loopCount);
160 
165  virtual void setUvOffset(const std::string& annotation,
166  float uOffset, float vOffset);
167 
169  virtual void setDynamicSensorRegion(const std::string& region, bool state);
170 
172  virtual bool dynamicSensorRegion(const std::string& region);
173 
180  virtual void setLinkageConfigPair(const std::string& linkageName, const std::string& configName);
181 
183 
184  //@name Non-distributed functions
186 
190  virtual bool findPartPositionAndOrientation(int partNumber,
191  DtVector& position, DtQuat& ori);
192 
195  DtVector partTranslation(int partNumber);
196 
199  DtTaitBryan partOrientation(int partNumber);
200 
203  int state(int stateNumber);
204 
207  int animationFrameCount(const std::string& animationName);
208 
211  int animationCurrentFrame(const std::string& animationName);
212 
216  int animationFirstFrame(const std::string& animationName);
217 
221  int animationLastFrame(const std::string& animationName);
222 
225  double animationSpeed(const std::string& animationName);
226 
229  AnimationState animationState(const std::string& animationName);
230 
234  double animationLastFrameTime(const std::string& animationName);
235 
237  // default param is -1, repeat forever
239  int animationLoopCount(const std::string& animationName);
240 
242  const DtArticulatedModelParser::PartMap& parts() const;
243 
245  virtual void getParts(PartList& parts) const;
246 
248  const DtArticulatedModelParser::StateMap& states() const;
249 
251  const DtArticulatedModelParser::AnimationMap& animations() const;
252 
254  virtual void addPart(int partNumber, osgSim::DOFTransform* node);
255 
257  virtual void addState(int stateNumber, osgSim::MultiSwitch* node);
258 
261  virtual void setStateValueExists(int stateNumber, int stateValue);
262 
264  virtual void addAnimation(const std::string& animationName,
265  osg::Sequence* node);
266 
268  virtual void addAnnotationGroup(const std::string& annotation, osg::Group* group);
269 
271  virtual void setColor(float r, float g, float b, float a);
272 
274  virtual void enableColorBlending(bool b);
275 
277  virtual void setBlendColor(float r, float g, float b, float a);
278 
280  virtual void setPartVisibility(int partNumber, bool onOff);
281 
285  virtual void setIsSupportModel(bool isSupport);
286 
288  virtual void getBoundingBoxComponents(DtVector& minimum, DtVector& maximum);
289 
292  std::vector<DtVirtualBaseClass*>& modelAttachments();
293 
296  virtual bool applyMetafile(const DtModelDefinition* definition);
297 
299  virtual void slot_onShadowStateChanged(bool on);
300 
302  virtual void slot_atcModeEnableChanged(bool state);
303 
305 
309  DtUniqueID sceneObjectId();
310 
312  virtual void setElementId(DtUniqueID id);
313 
315  virtual void setLightPointGroup(const std::string &groupName);
316 
318  virtual std::string lightPointGroup();
319 
321  virtual LinkageConfigMap& linkageConfigMap();
322 
324  virtual const LinkageConfigMap& linkageConfigMap() const;
325 
326  protected:
327 
328  virtual void addToScene(const DtUniqueID& sceneObjectId, int modelSet,
329  int visualizerType);
330  virtual void removeFromScene();
331 
332  virtual void disablePart(int partNumber);
333  virtual void enablePart(int partNumber);
334 
335  virtual void modelInstanceToBeDeleted();
336 
338  virtual void modelInstanceCreated(bool castShadows, bool daylightControlledLights, float scale);
339 
340  void parseModel(osg::Node* root);
341 
342  protected:
347 
354  static const unsigned int theNodePathCacheSize = 4;
356 
357  typedef boost::unordered_map<std::string, bool> SensorRegionStateMap;
359 
361 
362  std::string myModelDefinition;
363 
365 
368 
372 
375  std::vector<DtVirtualBaseClass*> myModelMetaAttachments;
376 
379 
380  DtVector myBoundMin, myBoundMax;
381 
383 
384  //needed to keep track of the initial state of the model scaling flag
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  // The model needs to hold on to this so it can provide it to the instance
401  // manager if the model is eventually instanced
404 
405  std::string myLightPointGroup;
406 
407  };
408 }

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)