VR-Forces 4.10 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) 2021 MAK Technologies, Inc.
3  * All rights reserved.
4  *****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvOsg/vrvOsg.h>
13 
15 
18 
21 
22 #include <matrix/vlTaitBryan.h>
23 #include <matrix/vlVector.h>
24 
25 #include <osg/ref_ptr>
26 #include <osg/Matrixf>
27 
28 #include <boost/thread/mutex.hpp>
29 #include <boost/unordered_map.hpp>
30 
31 #include <unordered_set>
32 
33 namespace osg
34 {
35  class Matrixd;
36  class Sequence;
37  class Node;
38  class Group;
39 }
40 
41 namespace osgSim
42 {
43  class DOFTransform;
44  class MultiSwitch;
45 }
46 
47 namespace makVrv
48 {
49  class DtIndirectEntityManager;
50  class DtOsgSceneConnector;
51  class DtModelDefinition;
52  class DtOsgModelInstance;
53 
68  {
69  public:
70 
71  typedef std::vector<osg::Node*> NodeList;
72  typedef boost::unordered_map<int, NodeList> NodePathCache;
73  typedef std::map<std::string, std::string> LinkageConfigMap;
74 
75  public:
78 
80  virtual ~DtOsgArticulatedModel();
81 
82  private:
84  DtOsgArticulatedModel() = delete;
85 
87  DtOsgArticulatedModel(const DtOsgArticulatedModel& rhs) = delete;
88 
90  DtOsgArticulatedModel& operator=(const DtOsgArticulatedModel& rhs) = delete;
91 
92  public:
97  virtual void setModelDefinition(const std::string& str);
98 
102  virtual const std::string& modelDefinition() const;
103 
106  virtual const std::string& className() const;
107 
109  virtual DtUniqueID uniqueId() const;
110 
114  virtual DtUniqueID sceneObjectId() const;
115 
117  virtual void setElementId(DtUniqueID id);
118 
120  virtual DtUniqueID elementId();
121 
122 
123  //@name <Position & Orientation functions: Start>
125 
129  virtual void setPosition(int vtx, const DtVector& position);
130 
134  virtual void setOrientation(int vtx, const DtTaitBryan& orientation);
135 
138  virtual void setPositionOffset(const DtVector& positionOffset);
139 
142  virtual void setOrientationOffset(const DtTaitBryan& orientationOffset);
143 
146  virtual void setPositionAndOrientation(int vtx, const DtVector& position, const DtTaitBryan& orientation);
147 
151  virtual void setVisible(bool isVisible);
152  // </Position & Orientation functions: End>
154 
155 
156 
157 
158  //@name <Part Management Functions: Start>
160  virtual void setPartTranslation(int partNumber,
162  const DtVector& transform, const DtVector& velocity);
163 
165  virtual void setPartOrientation(int partNumber,
166  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
167 
170  virtual void setPartRotationalVelocity(int partNumber,
171  const DtVector& rotationalVelocity, bool forceUpdate = true);
172 
176  virtual bool findPartPositionAndOrientation(int partNumber,
177  DtVector& position, DtQuat& ori) override;
178 
181  virtual DtVector partTranslation(int partNumber) const;
182 
185  virtual DtTaitBryan partOrientation(int partNumber) const;
186 
188  virtual void setPartVisibility(int partNumber, bool onOff);
189 
191  const DtArticulatedModelParser::PartMap& parts() const;
192 
194  virtual void getParts(PartList& parts) const;
195 
197  virtual void addPart(int partNumber, osgSim::DOFTransform* node);
198  // </Part Management Functions: End>
200 
201 
202 
203 
204  //@name <Animation Management Functions: Start>
206  virtual void setAnimationFrame(const std::string& animationName,
208  int frameIndex) override;
209 
211  virtual void setAnimationRange(const std::string& animationName,
212  int firstFrameIndex, int lastFrameIndex) override;
213 
215  virtual void setAnimationSpeed(const std::string& animationName,
216  double framesPerSecond) override;
217 
219  virtual void setAnimationState(const std::string& animationName,
220  AnimationState mode) override;
221 
224  virtual void setAnimationLastFrameTime(const std::string& animationName, double animationLastFrameTime);
225 
228  virtual void setAnimationLoopCount(const std::string& animationName, int loopCount);
229 
232  virtual int animationFrameCount(const std::string& animationName) const;
233 
236  virtual int animationCurrentFrame(const std::string& animationName) const;
237 
240  virtual int animationFirstFrame(const std::string& animationName) const;
241 
244  virtual int animationLastFrame(const std::string& animationName) const;
245 
248  virtual double animationSpeed(const std::string& animationName) const;
249 
252  virtual AnimationState animationState(const std::string& animationName) const;
253 
256  virtual double animationLastFrameTime(const std::string& animationName) const;
257 
259  // default param is -1, repeat forever
260  virtual int animationLoopCount(const std::string& animationName) const;
261 
263  virtual const DtArticulatedModelParser::AnimationMap& animations() const;
264 
266  virtual void addAnimation(const std::string& animationName,
267  osg::Sequence* node);
268 
270  virtual const DtArticulatedModelParser::FlipBookAnimationMap& flipBookAnimations() const;
271 
273  virtual const DtArticulatedModelParser::FlipBookAnimationMap& flipBookAnimationsWithVelocityControl() const;
274 
276  virtual void setFlipBookAnimationsSpeed(const DtVector& velocity);
277 
279  virtual const DtArticulatedModelParser::ScrollableTextureGroupMap& scrollableTextureGroupMap() const;
280 
282  virtual void scrollUvTextures(const DtVector& velocity);
283 
284  //<Animation Management Functions: End>
286 
287 
288 
289  //@name <Model scaling functions: Start>
291  virtual void setModelScalingEnabled(bool b);
294 
296  virtual bool modelScalingEnabled();
297 
301  virtual void setLocalModelScalingEnabled(bool enabled);
302 
305  virtual void setLocalModelScalingAmount(float localScl);
306 
307  // </Model scaling functions: End>
309 
310 
311 
312  //@name <Color and Blending: Start>
314  virtual void setColor(float r, float g, float b, float a);
316 
318  virtual void enableColorBlending(bool b);
319 
321  virtual void setBlendColor(float r, float g, float b, float a);
322  //</Color and Blending: End>
324 
325  //@name <Instance OtherData0: Start>
327  virtual void setOtherData0(float r, float g, float b, float a);
329  //</Instance OtherData0: End>
331 
332 
333 
334  //@name <Linkage and Config: Start>
336  virtual void setLinkageConfigPair(const std::string& linkageName, const std::string& configName);
343 
345  virtual LinkageConfigMap& linkageConfigMap();
346 
348  virtual const LinkageConfigMap& linkageConfigMap() const;
349  //</Linkage and Config: End>
351 
352 
353 
354 
355  //@name <Sensor: Start>
357  virtual void setDynamicSensorRegion(const std::string& region, bool state);
359 
361  virtual bool dynamicSensorRegion(const std::string& region);
362 
363  //</Sensor: End>
365 
366 
367 
368 
373  virtual void setUvOffset(const std::string& annotation,
374  float uOffset, float vOffset);
375 
376 
377 
378  //@name <State setting: Start>
380  virtual void setState(int stateNumber, int stateValue);
382 
384  virtual void setStateUnfiltered(int stateNumber, int stateValue);
385 
387  virtual void reapplyState();
388 
391  virtual int state(int stateNumber) const;
392 
395 
397  virtual void addState(int stateNumber, osgSim::MultiSwitch* node);
398 
401  virtual void setStateValueExists(int stateNumber, int stateValue);
402  //</State setting: End>
404 
405 
406 
407 
408  //@name <Lights: Start>
410  virtual void setLightpointMaxDistance(float distance);
413 
415  virtual void setLightPointGroup(const std::string& groupName);
416 
418  virtual const std::string& lightPointGroup() const;
419  //</Lights: End>
421 
422 
423 
427  virtual void setDepthMask(osg::Group& parent);
428 
430  virtual void addAnnotationGroup(const std::string& annotation, osg::Group* group);
431 
435  virtual void setIsSupportModel(bool isSupport);
436 
438  virtual void getBoundingBoxComponents(DtVector& minimum, DtVector& maximum);
439 
442  virtual bool applyMetafile(const DtModelDefinition* definition);
443 
445  virtual void slot_onShadowStateChanged(bool on);
446 
448  virtual void slot_atcModeEnableChanged(bool state);
449 
451 
453  virtual void setSingleChildOn(osgSim::MultiSwitch* multiSwitch, unsigned int switchIndex, int nodeTypeIndex);
454 
456  virtual void setDofHpr(osgSim::DOFTransform* dof, const DtVector& hpr, int nodeTypeIndex);
457 
459  boost::signalslib::signal<void(DtOsgArticulatedModel*, int, int)> signal_SetState;
460  protected:
461 
464  virtual void setStateInternal(int stateNumber, int stateValue);
465 
468  virtual void setUvOffsetInternal(const std::string& annotation, float uOffset, float vOffset);
469 
470 
471 
472  //@name <Part Management Internal Functions: Start>
474  virtual void setPartTranslationInternal(int partNumber,
476  const DtVector& transform, const DtVector& velocity);
477 
479  virtual void setPartOrientationInternal(int partNumber,
480  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
481 
485  virtual void setPartRotationalVelocityInternal(int partNumber,
486  const DtVector& rotationalVelocity, bool forceUpdate = true);
487 
489  virtual void disablePart(int partNumber);
490 
492  virtual void enablePart(int partNumber);
493 
494  //@name </Part Management Internal Functions: End>
496 
497 
499  virtual void addToScene(const DtUniqueID& sceneObjectId, int modelSet,
500  int visualizerType);
501 
503  virtual void removeFromScene();
504 
506  virtual void modelInstanceToBeDeleted();
507 
508 
510  virtual void modelInstanceCreatedInternal(osg::Node* root, DtOsgModelInstance* osgModelInstance, bool daylightControlledLights, float scale);
511 
515  virtual void modelInstanceCreated(bool castShadows, bool daylightControlledLights, float scale);
516 
518  virtual void mergeCurrentStateWithDefaults(DtArticulatedModelParser* parser);
519 
521  virtual void parseModel(osg::Node* root);
522 
525  virtual void backgroundLoad();
526 
528  virtual void foregroundLoad();
529 
531  virtual void backgroundLoadInternal(DtModelDefinition* definition);
532 
534  virtual void backgroundLoadFirstLoadInternal(DtModelDefinition* definition);
535 
537  virtual void foregroundLoadInternal();
538 
540  virtual void modelInstanceToBeDeletedInternal(void);
541 
542  protected:
543 
544 
551  DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMapWithVelocityControl; // This is a subset of the map of all flip book animations above
554 
556 
558  static const unsigned int theNodePathCacheSize = 4;
560 
561  typedef boost::unordered_map<std::string, std::pair<float, float> > AnnotationNameToUvsMap;
563 
564  typedef boost::unordered_map<std::string, bool> SensorRegionStateMap;
566 
568 
570 
573 
577 
580  std::vector<DtVirtualBaseClass*> myModelMetaAttachments;
581 
582  typedef std::map<int, std::pair<DtTaitBryan, DtVector> > PartOrientationMap;
584 
585  typedef std::map<int, std::pair<DtVector, DtVector> > PartTranslationMap;
587 
588  DtVector myBoundMin, myBoundMax;
589 
590  //needed to keep track of the initial state of the model scaling flag
592 
593  // These are used for backwards compatibility only. Even though you
594  // always call setModelDefinition (to finish constructing the model)
595  // before calling anything else, you used to be able to get away with
596  // calling setPosition() or setOrientation() first. That's no longer
597  // strictly true, so we have to store any position or orientation that
598  // gets set and then explicitly use them after setModelDefinition is
599  // called.
600 
603  DtTaitBryan mySetOrientation;
605 
608 
609  // The model needs to hold on to this so it can provide it to the instance
610  // manager if the model is eventually instanced
613 
614  std::string myLightPointGroup;
615 
617  protected:
618  static boost::mutex theBackgroundLoadCloneMutex;
619 
622  static const std::unordered_set<int> theStatesToFilter;
623  };
624 }
bool myModelScalingEnabled
Definition: DtOsgArticulatedModel.h:591
DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMap
Definition: DtOsgArticulatedModel.h:550
std::map< std::string, std::string > LinkageConfigMap
Definition: DtOsgArticulatedModel.h:73
NodePathCache myNodePathCache
Definition: DtOsgArticulatedModel.h:557
bool myInitialOrientationOffsetSet
Definition: DtOsgArticulatedModel.h:607
DtArticulatedModelParser::AnnotationMap myAnnotationMap
Definition: DtOsgArticulatedModel.h:552
DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMapWithVelocityControl
Definition: DtOsgArticulatedModel.h:551
PartTranslationMap myPartTranslationMap
Definition: DtOsgArticulatedModel.h:586
DtArticulatedModelParser::AnimationMap myAnimationMap
Definition: DtOsgArticulatedModel.h:549
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
AnnotationNameToUvsMap myAnnotationsUvMap
Definition: DtOsgArticulatedModel.h:562
SensorRegionStateMap mySensorRegionMap
Definition: DtOsgArticulatedModel.h:565
std::string myLightPointGroup
Definition: DtOsgArticulatedModel.h:614
std::map< int, std::pair< DtVector, DtVector > > PartTranslationMap
Definition: DtOsgArticulatedModel.h:585
Contains makVrv::DtMetaFileManager class.
bool myInitialOrientationSet
Definition: DtOsgArticulatedModel.h:604
PartOrientationMap myPartOrientationMap
Definition: DtOsgArticulatedModel.h:583
std::map< int, std::pair< DtTaitBryan, DtVector > > PartOrientationMap
Definition: DtOsgArticulatedModel.h:582
boost::unordered_map< int, NodeList > NodePathCache
Definition: DtOsgArticulatedModel.h:72
std::unordered_map< int, MultiSwitchList > MapStateNumberToMultiSwitchList
Definition: DtArticulatedModelParser.h:47
std::unordered_map< std::string, VectorSequenceAndMultipliers > FlipBookAnimationMap
Definition: DtArticulatedModelParser.h:102
An articulated model manipulator for controlling an articulated model.
Definition: DtArticulatedModel.h:31
DtArticulatedModelParser::MapStateNumberToStateValue myMapStateNumberToStateValue
Definition: DtOsgArticulatedModel.h:546
static boost::mutex theBackgroundLoadCloneMutex
Definition: DtOsgArticulatedModel.h:618
An articulated model manipulator for controlling an articulated model.
Definition: DtOsgArticulatedModel.h:67
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:38
DtOsgSceneConnector is used by models to create an OSG position/orientation transform so that it can ...
Definition: DtOsgSceneConnector.h:76
std::map< int, int > MapStateNumberToStateValue
Definition: DtArticulatedModelParser.h:52
DtIndirectEntityManager & myIndirectEntityManager
Definition: DtOsgArticulatedModel.h:567
static const std::unordered_set< int > theStatesToFilter
which states are we filtering to take additional/optional actions on?
Definition: DtOsgArticulatedModel.h:622
std::unordered_map< std::string, AnimationList > AnimationMap
Definition: DtArticulatedModelParser.h:50
DtArticulatedModelParser::MapStateNumberToMultiSwitchList myMapStateNumberToMultiSwitchList
Definition: DtOsgArticulatedModel.h:548
Contains makVrv::DtVirtualBaseClass class.
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points.
std::unordered_map< std::string, GroupList > AnnotationMap
Definition: DtArticulatedModelParser.h:57
The base class for simple OSG based model instances.
Definition: DtOsgModelInstance.h:76
AnimationState
Definition: DtArticulatedModel.h:34
DtArticulatedModelParser::ScrollableTextureGroupMap myScrollableTextureGroupMap
Definition: DtOsgArticulatedModel.h:553
std::vector< LinkageValuePair > LinkageValueVec
ex.
Definition: DtMetaFileManager.h:52
Contains makVrv::DtArticulatedModel class.
DtArticulatedModelParser::MapStateNumberToStateExistenceList myMapStateNumberToStateExistenceList
Definition: DtOsgArticulatedModel.h:545
DtVector myBoundMin
Definition: DtOsgArticulatedModel.h:588
DtMetaFileManager::LinkageValueVec myModelMetaFeatures
List of node pointers that have meta data associated with them.
Definition: DtOsgArticulatedModel.h:572
DtUniqueID mySceneObjectId
Definition: DtOsgArticulatedModel.h:569
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
std::vector< osg::Node * > NodeList
Definition: DtOsgArticulatedModel.h:71
DtUniqueID myElementId
Definition: DtOsgArticulatedModel.h:611
DtVector mySetPosition
Definition: DtOsgArticulatedModel.h:601
bool myUseSwitch
Definition: DtOsgArticulatedModel.h:559
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
std::vector< int > PartList
Definition: DtArticulatedModel.h:36
Base class to provide boost signal/slot management.
DtOsgSceneConnector * mySceneConnector
Definition: DtOsgArticulatedModel.h:555
std::unordered_map< int, PartTransformList > PartMap
Definition: DtArticulatedModelParser.h:44
Contains makVrv::DtArticulatedModelParser class.
const char int mode
Definition: ioapi.h:38
Contains DLL export macros.
boost::unordered_map< std::string, std::pair< float, float > > AnnotationNameToUvsMap
Definition: DtOsgArticulatedModel.h:561
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
A utility Quaternion class.
Definition: DtQuat.h:19
singleton class that acts as a bridge between the
Definition: DtIndirectEntityManager.h:59
bool myInitialPositionOffsetSet
Definition: DtOsgArticulatedModel.h:606
boost::signalslib::signal< void(DtOsgArticulatedModel *, int, int)> signal_SetState
signal to emit when a state is set
Definition: DtOsgArticulatedModel.h:459
DtArticulatedModelParser::PartMap myPartMap
Definition: DtOsgArticulatedModel.h:547
boost::unordered_map< std::string, bool > SensorRegionStateMap
Definition: DtOsgArticulatedModel.h:564
bool myHandlersRegisterered
Definition: DtOsgArticulatedModel.h:616
std::vector< DtVirtualBaseClass * > myModelMetaAttachments
Vector of metafile attachment on this object so they can be deleted on object destruction.
Definition: DtOsgArticulatedModel.h:580
LinkageConfigMap myLinkageConfigMap
Map of linkage names (NodeName/Annotation) from the metafile(if it exists) to config names...
Definition: DtOsgArticulatedModel.h:576
DtTaitBryan mySetOrientation
Definition: DtOsgArticulatedModel.h:603
std::map< std::string, VectorScrollableTextureGroupAndParams > ScrollableTextureGroupMap
Definition: DtArticulatedModelParser.h:129
DtSignalConnectionManager myConnections
Definition: DtOsgArticulatedModel.h:612
Default implementation of the model parser for Articulated models.
Definition: DtArticulatedModelParser.h:38
std::unordered_map< int, StateExistenceList > MapStateNumberToStateExistenceList
Definition: DtArticulatedModelParser.h:54
bool myInitialPositionSet
Definition: DtOsgArticulatedModel.h:602

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)