VR-Forces 5.0.1 Developer's Guide
 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) 2022 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 <tbb/atomic.h>
29 
30 #include <boost/thread/mutex.hpp>
31 
32 #include <unordered_map>
33 #include <unordered_set>
34 
35 namespace osg
36 {
37  class Matrixd;
38  class Sequence;
39  class Node;
40  class Group;
41 }
42 
43 namespace osgSim
44 {
45  class DOFTransform;
46  class MultiSwitch;
47 }
48 
49 namespace makVrv
50 {
51  class DtIndirectEntityManager;
52  class DtOsgSceneConnector;
53  class DtModelDefinition;
54  class DtOsgModelInstance;
55 
70  {
71  public:
72 
73  typedef std::vector<osg::Node*> NodeList;
74  typedef std::unordered_map<int, NodeList> NodePathCache;
75  typedef std::map<std::string, std::string> LinkageConfigMap;
76 
77  typedef std::unordered_map<std::string, std::pair<float, float> > AnnotationNameToUvsMap;
78 
79  public:
82 
84  virtual ~DtOsgArticulatedModel();
85 
86  private:
88  DtOsgArticulatedModel() = delete;
89 
91  DtOsgArticulatedModel(const DtOsgArticulatedModel& rhs) = delete;
92 
94  DtOsgArticulatedModel& operator=(const DtOsgArticulatedModel& rhs) = delete;
95 
96  public:
101  virtual void setModelDefinition(const std::string& str);
102 
106  virtual const std::string& modelDefinition() const;
107 
110  virtual const std::string& className() const;
111 
113  virtual DtUniqueID uniqueId() const;
114 
118  virtual DtUniqueID sceneObjectId() const;
119 
121  virtual void setElementId(DtUniqueID id);
122 
124  virtual DtUniqueID elementId();
125 
126 
127  //@name <Position & Orientation functions: Start>
129 
133  virtual void setPosition(int vtx, const DtVector& position);
134 
138  virtual void setOrientation(int vtx, const DtTaitBryan& orientation);
139 
142  virtual void setPositionOffset(const DtVector& positionOffset);
143 
146  virtual void setOrientationOffset(const DtTaitBryan& orientationOffset);
147 
150  virtual void setPositionAndOrientation(int vtx, const DtVector& position, const DtTaitBryan& orientation);
151 
155  virtual void setVisible(bool isVisible);
156  // </Position & Orientation functions: End>
158 
159 
160 
161 
162  //@name <Part Management Functions: Start>
164  virtual void setPartTranslation(int partNumber,
166  const DtVector& transform, const DtVector& velocity);
167 
169  virtual void setPartOrientation(int partNumber,
170  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
171 
174  virtual void setPartRotationalVelocity(int partNumber,
175  const DtVector& rotationalVelocity, bool forceUpdate = true);
176 
180  virtual bool findPartPositionAndOrientation(int partNumber,
181  DtVector& position, DtQuat& ori) override;
182 
185  virtual DtVector partTranslation(int partNumber) const;
186 
189  virtual DtTaitBryan partOrientation(int partNumber) const;
190 
192  virtual void setPartVisibility(int partNumber, bool onOff);
193 
195  const DtArticulatedModelParser::PartMap& parts() const;
196 
198  virtual void getParts(PartList& parts) const;
199 
201  virtual void addPart(int partNumber, osgSim::DOFTransform* node);
202  // </Part Management Functions: End>
204 
205 
206 
207 
208  //@name <Animation Management Functions: Start>
210  virtual void setAnimationFrame(const std::string& animationName,
212  int frameIndex) override;
213 
215  virtual void setAnimationRange(const std::string& animationName,
216  int firstFrameIndex, int lastFrameIndex) override;
217 
219  virtual void setAnimationSpeed(const std::string& animationName,
220  double framesPerSecond) override;
221 
223  virtual void setAnimationState(const std::string& animationName,
224  AnimationState mode) override;
225 
228  virtual void setAnimationLastFrameTime(const std::string& animationName, double animationLastFrameTime);
229 
232  virtual void setAnimationLoopCount(const std::string& animationName, int loopCount);
233 
236  virtual int animationFrameCount(const std::string& animationName) const;
237 
240  virtual int animationCurrentFrame(const std::string& animationName) const;
241 
244  virtual int animationFirstFrame(const std::string& animationName) const;
245 
248  virtual int animationLastFrame(const std::string& animationName) const;
249 
252  virtual double animationSpeed(const std::string& animationName) const;
253 
256  virtual AnimationState animationState(const std::string& animationName) const;
257 
260  virtual double animationLastFrameTime(const std::string& animationName) const;
261 
263  // default param is -1, repeat forever
264  virtual int animationLoopCount(const std::string& animationName) const;
265 
267  virtual const DtArticulatedModelParser::AnimationMap& animations() const;
268 
270  virtual void addAnimation(const std::string& animationName,
271  osg::Sequence* node);
272 
274  virtual const DtArticulatedModelParser::FlipBookAnimationMap& flipBookAnimations() const;
275 
277  virtual const DtArticulatedModelParser::FlipBookAnimationMap& flipBookAnimationsWithVelocityControl() const;
278 
280  virtual void setFlipBookAnimationsSpeed(double leftSpeed, double rightSpeed, double mainSpeed);
281 
283  virtual const DtArticulatedModelParser::ScrollableTextureGroupMap& scrollableTextureGroupMap() const;
284 
286  virtual void scrollUvTextures(double leftSpeed, double rightSpeed, double mainSpeed);
287 
288  //<Animation Management Functions: End>
290 
291 
292 
293  //@name <Model scaling functions: Start>
295  virtual void setModelScalingEnabled(bool b);
298 
300  virtual bool modelScalingEnabled();
301 
305  virtual void setLocalModelScalingEnabled(bool enabled);
306 
309  virtual void setLocalModelScalingAmount(float localScl);
310 
311  // </Model scaling functions: End>
313 
314 
315 
316  //@name <Color and Blending: Start>
318  virtual void setColor(float r, float g, float b, float a);
320 
322  virtual void enableColorBlending(bool b);
323 
325  virtual void setBlendColor(float r, float g, float b, float a);
326  //</Color and Blending: End>
328 
329  //@name <Instance OtherData0: Start>
331  virtual void setOtherData0(float r, float g, float b, float a);
333  //</Instance OtherData0: End>
335 
336 
337 
338  //@name <Linkage and Config: Start>
340  virtual void setLinkageConfigPair(const std::string& linkageName, const std::string& configName);
347 
349  virtual LinkageConfigMap& linkageConfigMap();
350 
352  virtual const LinkageConfigMap& linkageConfigMap() const;
353  //</Linkage and Config: End>
355 
356 
358  virtual void weaponFired(const DtUnicode& munitionModelDefName) override;
359 
360  //@name <Sensor: Start>
362  virtual void setDynamicSensorRegion(const std::string& region, bool state) override;
364 
366  virtual bool dynamicSensorRegion(const std::string& region);
367 
368  //</Sensor: End>
370 
371 
372 
373 
378  virtual void setUvOffset(const std::string& annotation,
379  float uOffset, float vOffset);
380 
382  virtual const AnnotationNameToUvsMap& annotationsMap(void) const;
383 
384  //@name <State setting: Start>
386  virtual void setState(int stateNumber, int stateValue);
388 
390  virtual void setStateUnfiltered(int stateNumber, int stateValue);
391 
393  virtual void reapplyState();
394 
397  virtual int state(int stateNumber) const;
398 
401 
403  virtual void addState(int stateNumber, osgSim::MultiSwitch* node);
404 
407  virtual void setStateValueExists(int stateNumber, int stateValue);
408  //</State setting: End>
410 
411 
412 
413 
414  //@name <Lights: Start>
416  virtual void setLightpointMaxDistance(float distance);
419 
421  virtual void setLightPointGroup(const std::string& groupName);
422 
424  virtual const std::string& lightPointGroup() const;
425  //</Lights: End>
427 
428 
429 
433  virtual void setDepthMask(osg::Group& parent);
434 
436  virtual void addAnnotationGroup(const std::string& annotation, osg::Group* group);
437 
441  virtual void setIsSupportModel(bool isSupport);
442 
444  virtual void getBoundingBoxComponents(DtVector& minimum, DtVector& maximum);
445 
448  virtual bool applyMetafile(const DtModelDefinition* definition);
449 
451  virtual void slot_onShadowStateChanged(bool on);
452 
454  virtual void slot_atcModeEnableChanged(bool state);
455 
457 
459  virtual void setSingleChildOn(osgSim::MultiSwitch* multiSwitch, unsigned int switchIndex, int nodeTypeIndex);
460 
462  virtual void setDofHpr(osgSim::DOFTransform* dof, const DtVector& hpr, int animationFlags);
463 
465  virtual void setDofHprVel(osgSim::DOFTransform* dof, const DtVector& hprVel, int animationFlags);
466 
468  boost::signalslib::signal<void(DtOsgArticulatedModel*, int, int)> signal_SetState;
469 
470  public:
472  static void setTrackObjects(bool val);
474  static bool trackObjects(void);
476 
477  protected:
478 
481  virtual void setStateInternal(int stateNumber, int stateValue);
482 
485  virtual void setUvOffsetInternal(const std::string& annotation, float uOffset, float vOffset);
486 
487 
488 
489  //@name <Part Management Internal Functions: Start>
491  virtual void setPartTranslationInternal(int partNumber,
493  const DtVector& transform, const DtVector& velocity);
494 
496  virtual void setPartOrientationInternal(int partNumber,
497  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
498 
502  virtual void setPartRotationalVelocityInternal(int partNumber,
503  const DtVector& rotationalVelocity, bool forceUpdate = true);
504 
506  virtual void disablePart(int partNumber);
507 
509  virtual void enablePart(int partNumber);
510 
511  //@name </Part Management Internal Functions: End>
513 
514 
516  virtual void addToScene(const DtUniqueID& sceneObjectId, int modelSet,
517  int visualizerType);
518 
520  virtual void removeFromScene();
521 
523  virtual void modelInstanceToBeDeleted();
524 
525 
527  virtual void modelInstanceCreatedInternal(osg::Node* root, DtOsgModelInstance* osgModelInstance, bool daylightControlledLights, float scale);
528 
532  virtual void modelInstanceCreated(bool castShadows, bool daylightControlledLights, float scale);
533 
535  virtual void mergeCurrentStateWithDefaults(DtArticulatedModelParser* parser);
536 
538  virtual void parseModel(osg::Node* root);
539 
542  virtual void backgroundLoad();
543 
544  virtual void discoverDynamicRegions(const DtModelDefinition* definition);
545 
547  virtual void foregroundLoad();
548 
550  virtual void backgroundLoadInternal(DtModelDefinition* definition);
551 
553  virtual void backgroundLoadFirstLoadInternal(DtModelDefinition* definition);
554 
556  virtual void foregroundLoadInternal();
557 
559  virtual void modelInstanceToBeDeletedInternal(void);
560 
561  protected:
562 
563 
570  DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMapWithVelocityControl; // This is a subset of the map of all flip book animations above
573 
575 
577  static const unsigned int theNodePathCacheSize = 4;
579 
581 
582  typedef std::unordered_map<std::string, bool> SensorRegionStateMap;
584 
586 
588 
591 
595 
598  std::vector<DtVirtualBaseClass*> myModelMetaAttachments;
599 
600  typedef std::map<int, std::pair<DtTaitBryan, DtVector> > PartOrientationMap;
602 
603  typedef std::map<int, std::pair<DtVector, DtVector> > PartTranslationMap;
605 
606  DtVector myBoundMin, myBoundMax;
607 
608  //needed to keep track of the initial state of the model scaling flag
610 
611  // These are used for backwards compatibility only. Even though you
612  // always call setModelDefinition (to finish constructing the model)
613  // before calling anything else, you used to be able to get away with
614  // calling setPosition() or setOrientation() first. That's no longer
615  // strictly true, so we have to store any position or orientation that
616  // gets set and then explicitly use them after setModelDefinition is
617  // called.
618 
621  DtTaitBryan mySetOrientation;
623 
626 
627  // The model needs to hold on to this so it can provide it to the instance
628  // manager if the model is eventually instanced
631 
632  std::string myLightPointGroup;
633 
635 
636  std::list<std::string> myMovingDynamicRegions;
637  std::list<std::string> myPowerPlantDynamicRegions;
638  std::list<std::string> myWeaponFireDynamicRegions;
639 
640  protected:
641  static boost::mutex theBackgroundLoadCloneMutex;
642 
645  static const std::unordered_set<int> theStatesToFilter;
646 
647  static bool theTrackObjects;
648  static tbb::atomic<int> theTotalObjects;
649  };
650 }
bool myModelScalingEnabled
Definition: DtOsgArticulatedModel.h:609
DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMap
Definition: DtOsgArticulatedModel.h:569
A unicode string. DtUnicode stores a UTF-16 encoded unicode string. Code Point, a Unicode character...
Definition: DtUnicode.h:33
std::map< std::string, std::string > LinkageConfigMap
Definition: DtOsgArticulatedModel.h:75
NodePathCache myNodePathCache
Definition: DtOsgArticulatedModel.h:576
bool myInitialOrientationOffsetSet
Definition: DtOsgArticulatedModel.h:625
DtArticulatedModelParser::AnnotationMap myAnnotationMap
Definition: DtOsgArticulatedModel.h:571
DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMapWithVelocityControl
Definition: DtOsgArticulatedModel.h:570
PartTranslationMap myPartTranslationMap
Definition: DtOsgArticulatedModel.h:604
DtArticulatedModelParser::AnimationMap myAnimationMap
Definition: DtOsgArticulatedModel.h:568
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
std::unordered_map< int, NodeList > NodePathCache
Definition: DtOsgArticulatedModel.h:74
AnnotationNameToUvsMap myAnnotationsUvMap
Definition: DtOsgArticulatedModel.h:580
SensorRegionStateMap mySensorRegionMap
Definition: DtOsgArticulatedModel.h:583
std::string myLightPointGroup
Definition: DtOsgArticulatedModel.h:632
std::map< int, std::pair< DtVector, DtVector > > PartTranslationMap
Definition: DtOsgArticulatedModel.h:603
Contains makVrv::DtMetaFileManager class.
bool myInitialOrientationSet
Definition: DtOsgArticulatedModel.h:622
PartOrientationMap myPartOrientationMap
Definition: DtOsgArticulatedModel.h:601
static tbb::atomic< int > theTotalObjects
Definition: DtOsgArticulatedModel.h:648
std::map< int, std::pair< DtTaitBryan, DtVector > > PartOrientationMap
Definition: DtOsgArticulatedModel.h:600
std::unordered_map< int, MultiSwitchList > MapStateNumberToMultiSwitchList
Definition: DtArticulatedModelParser.h:47
std::unordered_map< std::string, VectorSequenceAndMultipliers > FlipBookAnimationMap
Definition: DtArticulatedModelParser.h:112
An articulated model manipulator for controlling an articulated model.
Definition: DtArticulatedModel.h:31
DtArticulatedModelParser::MapStateNumberToStateValue myMapStateNumberToStateValue
Definition: DtOsgArticulatedModel.h:565
static boost::mutex theBackgroundLoadCloneMutex
Definition: DtOsgArticulatedModel.h:641
An articulated model manipulator for controlling an articulated model. Supports indirect rendering of...
Definition: DtOsgArticulatedModel.h:69
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:585
static const std::unordered_set< int > theStatesToFilter
which states are we filtering to take additional/optional actions on?
Definition: DtOsgArticulatedModel.h:645
std::unordered_map< std::string, AnimationList > AnimationMap
Definition: DtArticulatedModelParser.h:50
DtArticulatedModelParser::MapStateNumberToMultiSwitchList myMapStateNumberToMultiSwitchList
Definition: DtOsgArticulatedModel.h:567
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. Coordinates are in local database coordinates The coordinat...
std::unordered_map< std::string, GroupList > AnnotationMap
Definition: DtArticulatedModelParser.h:57
The base class for simple OSG based model instances. This call can&#39;t be instantiated itself...
Definition: DtOsgModelInstance.h:77
AnimationState
Definition: DtArticulatedModel.h:34
DtArticulatedModelParser::ScrollableTextureGroupMap myScrollableTextureGroupMap
Definition: DtOsgArticulatedModel.h:572
std::vector< LinkageValuePair > LinkageValueVec
ex. vector of node names/annotations and JSON data for those node names/annotations ...
Definition: DtMetaFileManager.h:52
Contains makVrv::DtArticulatedModel class.
DtArticulatedModelParser::MapStateNumberToStateExistenceList myMapStateNumberToStateExistenceList
Definition: DtOsgArticulatedModel.h:564
DtVector myBoundMin
Definition: DtOsgArticulatedModel.h:606
DtMetaFileManager::LinkageValueVec myModelMetaFeatures
List of node pointers that have meta data associated with them.
Definition: DtOsgArticulatedModel.h:590
DtUniqueID mySceneObjectId
Definition: DtOsgArticulatedModel.h:587
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
std::vector< osg::Node * > NodeList
Definition: DtOsgArticulatedModel.h:73
DtUniqueID myElementId
Definition: DtOsgArticulatedModel.h:629
DtVector mySetPosition
Definition: DtOsgArticulatedModel.h:619
bool myUseSwitch
Definition: DtOsgArticulatedModel.h:578
std::list< std::string > myWeaponFireDynamicRegions
Definition: DtOsgArticulatedModel.h:638
std::vector< int > PartList
Definition: DtArticulatedModel.h:36
std::unordered_map< std::string, std::pair< float, float > > AnnotationNameToUvsMap
Definition: DtOsgArticulatedModel.h:77
Base class to provide boost signal/slot management.
DtOsgSceneConnector * mySceneConnector
Definition: DtOsgArticulatedModel.h:574
std::unordered_map< int, PartTransformList > PartMap
Definition: DtArticulatedModelParser.h:44
Contains makVrv::DtArticulatedModelParser class.
const char int mode
Definition: ioapi.h:38
std::list< std::string > myPowerPlantDynamicRegions
Definition: DtOsgArticulatedModel.h:637
static bool theTrackObjects
Definition: DtOsgArticulatedModel.h:647
Contains DLL export macros.
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:70
A utility Quaternion class.
Definition: DtQuat.h:19
std::unordered_map< std::string, bool > SensorRegionStateMap
Definition: DtOsgArticulatedModel.h:582
singleton class that acts as a bridge between the
Definition: DtIndirectEntityManager.h:61
bool myInitialPositionOffsetSet
Definition: DtOsgArticulatedModel.h:624
boost::signalslib::signal< void(DtOsgArticulatedModel *, int, int)> signal_SetState
signal to emit when a state is set
Definition: DtOsgArticulatedModel.h:468
DtArticulatedModelParser::PartMap myPartMap
Definition: DtOsgArticulatedModel.h:566
bool myHandlersRegisterered
Definition: DtOsgArticulatedModel.h:634
std::list< std::string > myMovingDynamicRegions
Definition: DtOsgArticulatedModel.h:636
std::vector< DtVirtualBaseClass * > myModelMetaAttachments
Vector of metafile attachment on this object so they can be deleted on object destruction.
Definition: DtOsgArticulatedModel.h:598
LinkageConfigMap myLinkageConfigMap
Map of linkage names (NodeName/Annotation) from the metafile(if it exists) to config names...
Definition: DtOsgArticulatedModel.h:594
DtTaitBryan mySetOrientation
Definition: DtOsgArticulatedModel.h:621
std::map< std::string, VectorScrollableTextureGroupAndParams > ScrollableTextureGroupMap
Definition: DtArticulatedModelParser.h:144
DtSignalConnectionManager myConnections
Definition: DtOsgArticulatedModel.h:630
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:620

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)