VR-Forces 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) 2025 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 
30 #include <unordered_map>
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 DtOsgIndirectEntityManager;
50  class DtOsgSceneConnector;
51  class DtModelDefinition;
52  class DtOsgModelInstance;
53 
68  {
69  public:
70 
71  typedef std::vector<osg::Node*> NodeList;
72  typedef std::unordered_map<int, NodeList> NodePathCache;
73  typedef std::map<std::string, std::string> LinkageConfigMap;
74 
75  typedef std::unordered_map<std::string, std::pair<float, float> > AnnotationNameToUvsMap;
76 
77  public:
80 
82  virtual ~DtOsgArticulatedModel();
83 
84  private:
86  DtOsgArticulatedModel() = delete;
87 
89  DtOsgArticulatedModel(const DtOsgArticulatedModel& rhs) = delete;
90 
92  DtOsgArticulatedModel& operator=(const DtOsgArticulatedModel& rhs) = delete;
93 
94  public:
99  virtual void setModelDefinition(const std::string& str);
100 
104  virtual const std::string& modelDefinition() const;
105 
108  virtual const std::string& className() const;
109 
111  virtual DtUniqueID uniqueId() const;
112 
113  virtual void setElementId(DtElementID id) override;
114 
115  //@name <Position & Orientation functions: Start>
117 
121  virtual void setPosition(int vtx, const DtVector& position);
122 
126  virtual void setOrientation(int vtx, const DtTaitBryan& orientation);
127 
130  virtual void setPositionOffset(const DtVector& positionOffset);
131 
134  virtual void setOrientationOffset(const DtTaitBryan& orientationOffset);
135 
138  virtual void setPositionAndOrientation(int vtx, const DtVector& position, const DtTaitBryan& orientation);
139 
143  virtual void setVisible(bool isVisible);
144  // </Position & Orientation functions: End>
146 
147 
148  //@name <Part Management Functions: Start>
150 
152  virtual void setPartAnimationFlags(int partNumber, int animationFlags);
153 
156  virtual void setPartTranslation(int partNumber,
157  const DtVector& transform, const DtVector& velocity);
158 
161  virtual void setPartOrientation(int partNumber,
162  const DtTaitBryan& orientation, const DtVector& rotationalVelocity, PartUpdateType updateType);
163 
166  virtual void setPartRotationalVelocity(int partNumber,
167  const DtVector& rotationalVelocity, bool forceUpdate, PartUpdateType updateType);
168 
172  virtual PartUpdateType setPartOrientationUpdateType(int partNumber, PartUpdateType updateType) override;
173 
181  virtual bool findPartPositionAndOrientation(int partNumber, DtVector& position, DtQuat& ori) override;
182 
187  virtual bool findCachedPartPositionAndOrientation(int partNumber, DtVector& position, DtTaitBryan& ori) override;
188 
192  virtual DtVector partTranslation(int partNumber) const;
193 
197  virtual DtTaitBryan partOrientation(int partNumber) const;
198 
200  virtual void setPartVisibility(int partNumber, bool onOff);
201 
203  const DtArticulatedModelParser::PartMap& parts() const;
204 
206  virtual void getParts(PartList& parts) const;
207 
209  virtual bool hasPart(int partId) const;
210 
212  virtual void addPart(int partNumber, osgSim::DOFTransform* node);
213  // </Part Management Functions: End>
215 
216 
217 
218 
219  //@name <Animation Management Functions: Start>
221  virtual void setAnimationFrame(const std::string& animationName,
223  int frameIndex) override;
224 
226  virtual void setAnimationRange(const std::string& animationName,
227  int firstFrameIndex, int lastFrameIndex) override;
228 
230  virtual void setAnimationSpeed(const std::string& animationName,
231  double framesPerSecond) override;
232 
234  virtual void setAnimationState(const std::string& animationName,
235  AnimationState mode) override;
236 
239  virtual void setAnimationLastFrameTime(const std::string& animationName, double animationLastFrameTime);
240 
243  virtual void setAnimationLoopCount(const std::string& animationName, int loopCount);
244 
247  virtual int animationFrameCount(const std::string& animationName) const;
248 
251  virtual int animationCurrentFrame(const std::string& animationName) const;
252 
255  virtual int animationFirstFrame(const std::string& animationName) const;
256 
259  virtual int animationLastFrame(const std::string& animationName) const;
260 
263  virtual double animationSpeed(const std::string& animationName) const;
264 
267  virtual AnimationState animationState(const std::string& animationName) const;
268 
271  virtual double animationLastFrameTime(const std::string& animationName) const;
272 
274  // default param is -1, repeat forever
275  virtual int animationLoopCount(const std::string& animationName) const;
276 
278  virtual const DtArticulatedModelParser::AnimationMap& animations() const;
279 
281  virtual void addAnimation(const std::string& animationName,
282  osg::Sequence* node);
283 
285  virtual const DtArticulatedModelParser::FlipBookAnimationMap& flipBookAnimations() const;
286 
288  virtual const DtArticulatedModelParser::FlipBookAnimationMap& flipBookAnimationsWithVelocityControl() const;
289 
291  virtual void setFlipBookAnimationsSpeed(double leftSpeed, double rightSpeed, double mainSpeed);
292 
294  virtual const DtArticulatedModelParser::ScrollableTextureGroupMap& scrollableTextureGroupMap() const;
295 
297  virtual void scrollUvTextures(double leftSpeed, double rightSpeed, double mainSpeed);
298 
299  //<Animation Management Functions: End>
301 
302 
303 
304  //@name <Model scaling functions: Start>
306  virtual void setModelScalingEnabled(bool b);
309 
311  virtual bool modelScalingEnabled();
312 
316  virtual void setLocalModelScalingEnabled(bool enabled);
317 
320  virtual void setLocalModelScalingAmount(float localScl);
321 
322  // </Model scaling functions: End>
324 
325 
326 
327  //@name <Color and Blending: Start>
329  virtual void setColor(float r, float g, float b, float a);
331 
333  virtual void enableColorBlending(bool b);
334 
336  virtual void setBlendColor(float r, float g, float b, float a);
337  //</Color and Blending: End>
339 
340  //@name <Instance OtherData0: Start>
342  virtual void setOtherData0(float r, float g, float b, float a);
344  //</Instance OtherData0: End>
346 
347 
348 
349  //@name <Linkage and Config: Start>
351  virtual void setLinkageConfigPair(const std::string& linkageName, const std::string& configName);
358 
360  virtual LinkageConfigMap& linkageConfigMap();
361 
363  virtual const LinkageConfigMap& linkageConfigMap() const;
364  //</Linkage and Config: End>
366 
367 
369  virtual void weaponFired(const DtUnicode& munitionModelDefName) override;
370 
371  //@name <Sensor: Start>
373  virtual void setDynamicSensorRegion(const std::string& region, bool state) override;
375 
377  virtual bool dynamicSensorRegion(const std::string& region);
378 
379  //</Sensor: End>
381 
382 
383 
384 
389  virtual void setUvOffset(const std::string& annotation,
390  float uOffset, float vOffset);
391 
393  virtual const AnnotationNameToUvsMap& annotationsMap(void) const;
394 
395  //@name <State setting: Start>
397  virtual void setState(int stateNumber, int stateValue);
399 
401  virtual void setStateUnfiltered(int stateNumber, int stateValue);
402 
404  virtual void reapplyState();
405 
408  virtual int state(int stateNumber) const;
409 
412 
414  virtual void addState(int stateNumber, osgSim::MultiSwitch* node);
415 
418  virtual void setStateValueExists(int stateNumber, int stateValue);
419  //</State setting: End>
421 
422 
423 
424 
425  //@name <Lights: Start>
427  virtual void setLightpointMaxDistance(float distance);
430 
432  virtual void setLightPointGroup(const std::string& groupName);
433 
435  virtual const std::string& lightPointGroup() const;
436 
440  virtual void setLightPointGroupIntensity(const std::string& groupName, float intensity);
441  //</Lights: End>
443 
444 
445 
449  virtual void setDepthMask(osg::Group& parent);
450 
452  virtual void addAnnotationGroup(const std::string& annotation, osg::Group* group);
453 
457  virtual void setIsSupportModel(bool isSupport);
458 
460  virtual void getBoundingBoxComponents(DtVector& minimum, DtVector& maximum);
461 
464  virtual bool applyMetafile(const DtModelDefinition* definition);
465 
467  virtual void slot_onShadowStateChanged(bool on);
468 
470  virtual void slot_atcModeEnableChanged(bool state);
471 
473 
475  virtual void setSingleChildOn(osgSim::MultiSwitch* multiSwitch, unsigned int switchIndex, int nodeTypeIndex);
476 
478  virtual void setDofHpr(osgSim::DOFTransform* dof, const DtVector& hpr, int animationFlags);
479 
481  virtual void setDofHprVel(osgSim::DOFTransform* dof, const DtVector& hprVel, int animationFlags);
482 
484 
485  virtual bool areRegisteredModelTextureVariants(void) const;
486 
487  virtual void registerModelTextureVariants(const std::vector<std::string>& variants);
488 
489  virtual void setModelTextureVariant(const std::string& variant);
490 
491  virtual const std::string& modelTextureVariant(void);
493 
495  boost::signalslib::signal<void(DtOsgArticulatedModel*, int, int)> signal_SetState;
496 
497  public:
499  static void setTrackObjects(bool val);
501  static bool trackObjects(void);
503 
505  static void trackEntity(const std::string& entityDisplayName, DtModelSetId modelSet, bool track);
506 
507  protected:
508 
511  virtual void setStateInternal(int stateNumber, int stateValue);
512 
515  virtual void setUvOffsetInternal(const std::string& annotation, float uOffset, float vOffset);
516 
517 
518 
519  //@name <Part Management Internal Functions: Start>
521  virtual void setPartTranslationInternal(int partNumber,
523  const DtVector& transform, const DtVector& velocity);
524 
526  virtual void setPartOrientationInternal(int partNumber,
527  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
528 
532  virtual void setPartRotationalVelocityInternal(int partNumber,
533  const DtVector& rotationalVelocity, bool forceUpdate = true);
534 
536  virtual void disablePart(int partNumber);
537 
539  virtual void enablePart(int partNumber);
540 
541  //@name </Part Management Internal Functions: End>
543 
544 
546  virtual void addToScene(const DtUniqueID& sceneObjectId, DtModelSetId modelSet,
547  int visualizerType);
548 
550  virtual void removeFromScene();
551 
553  virtual void modelInstanceToBeDeleted();
554 
555 
557  virtual void modelInstanceCreatedInternal(osg::Node* root, DtOsgModelInstance* osgModelInstance, bool daylightControlledLights, float scale);
558 
562  virtual void modelInstanceCreated(bool castShadows, bool daylightControlledLights, float scale);
563 
565  virtual void mergeCurrentStateWithDefaults(DtArticulatedModelParser* parser);
566 
568  virtual void parseModel(osg::Node* root);
569 
572  virtual void backgroundLoad();
573 
574  virtual void discoverDynamicRegions(const DtModelDefinition* definition);
575 
577  virtual void foregroundLoad();
578 
580  virtual void backgroundLoadInternal(DtModelDefinition* definition);
581 
583  virtual void backgroundLoadFirstLoadInternal(DtModelDefinition* definition);
584 
586  virtual void foregroundLoadInternal();
587 
592  virtual void processAutomaticallyArticulatedParts();
593 
595  virtual int lightPointGroupIdToUse(bool increaseReferenceCount=false) const;
596 
597  virtual void updateGeneratedUniqueLightPointGroupName();
598 
600  virtual void modelInstanceToBeDeletedInternal(void);
601 
602  protected:
603 
606  {
608  : myOrientation(0, 0, 0)
609  , myRotationalVelocity(0, 0, 0)
610  , myUpdateType(PartUpdateTypeManual)
611  {
612  // intentional noop
613  }
614 
615  DtTaitBryan myOrientation;
618  };
619 
620 
627  DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMapWithVelocityControl; // This is a subset of the map of all flip book animations above
630 
632 
634  static const unsigned int theNodePathCacheSize = 4;
636 
638 
639  typedef std::unordered_map<std::string, bool> SensorRegionStateMap;
641 
643 
646 
650 
653  std::vector<DtVirtualBaseClass*> myModelMetaAttachments;
654 
655  typedef std::map<int, PartOrientationData> PartOrientationMap;
657 
658  typedef std::map<int, std::pair<DtVector, DtVector> > PartTranslationMap;
660 
661  DtVector myBoundMin, myBoundMax;
662 
666 
667  // These are used for backwards compatibility only. Even though you
668  // always call setModelDefinition (to finish constructing the model)
669  // before calling anything else, you used to be able to get away with
670  // calling setPosition() or setOrientation() first. That's no longer
671  // strictly true, so we have to store any position or orientation that
672  // gets set and then explicitly use them after setModelDefinition is
673  // called.
674 
675  DtVector mySetPosition;
676  DtTaitBryan mySetOrientation;
679 
683 
684  //needed to keep track of the initial state of the model scaling flag
686 
688 
690 
691 
692  std::list<std::string> myMovingDynamicRegions;
693  std::list<std::string> myPowerPlantDynamicRegions;
694  std::list<std::string> myWeaponFireDynamicRegions;
695 
696  protected:
697  static boost::mutex theBackgroundLoadCloneMutex;
698 
701  static const std::unordered_set<int> theStatesToFilter;
702 
703  static bool theTrackObjects;
704  static std::atomic<int> theTotalObjects;
705 
706  // Used for debugging
707  static std::unordered_map<std::string, DtModelSetId> theSetEntitiesToTrack;
708 
710  };
711 }
bool myModelScalingEnabled
Definition: DtOsgArticulatedModel.h:685
DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMap
Definition: DtOsgArticulatedModel.h:626
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:73
std::string myModelTextureVariant
Definition: DtOsgArticulatedModel.h:709
NodePathCache myNodePathCache
Definition: DtOsgArticulatedModel.h:633
bool myInitialOrientationOffsetSet
Definition: DtOsgArticulatedModel.h:681
DtOsgIndirectEntityManager & myIndirectEntityManager
Definition: DtOsgArticulatedModel.h:642
DtArticulatedModelParser::AnnotationMap myAnnotationMap
Definition: DtOsgArticulatedModel.h:628
DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMapWithVelocityControl
Definition: DtOsgArticulatedModel.h:627
PartTranslationMap myPartTranslationMap
Definition: DtOsgArticulatedModel.h:659
DtArticulatedModelParser::AnimationMap myAnimationMap
Definition: DtOsgArticulatedModel.h:625
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
std::unordered_map< int, NodeList > NodePathCache
Definition: DtOsgArticulatedModel.h:72
AnnotationNameToUvsMap myAnnotationsUvMap
Definition: DtOsgArticulatedModel.h:637
SensorRegionStateMap mySensorRegionMap
Definition: DtOsgArticulatedModel.h:640
std::map< int, std::pair< DtVector, DtVector > > PartTranslationMap
Definition: DtOsgArticulatedModel.h:658
Contains makVrv::DtMetaFileManager class.
bool myInitialOrientationSet
Definition: DtOsgArticulatedModel.h:678
singleton class that acts as a bridge between the
Definition: DtOsgIndirectEntityManager.h:68
PartOrientationMap myPartOrientationMap
Definition: DtOsgArticulatedModel.h:656
std::unordered_map< int, MultiSwitchList > MapStateNumberToMultiSwitchList
Definition: DtArticulatedModelParser.h:47
A structure used to define orientation data for an articulated part.
Definition: DtOsgArticulatedModel.h:605
std::unordered_map< std::string, VectorSequenceAndMultipliers > FlipBookAnimationMap
Definition: DtArticulatedModelParser.h:109
An articulated model manipulator for controlling an articulated model.
Definition: DtArticulatedModel.h:31
static std::atomic< int > theTotalObjects
Definition: DtOsgArticulatedModel.h:704
DtArticulatedModelParser::MapStateNumberToStateValue myMapStateNumberToStateValue
Definition: DtOsgArticulatedModel.h:622
static boost::mutex theBackgroundLoadCloneMutex
Definition: DtOsgArticulatedModel.h:697
PartUpdateType
enumeration for what kind of update was applied to a part. The purpose of the enumeration is to track...
Definition: DtArticulatedModel.h:39
An articulated model manipulator for controlling an articulated model. Supports indirect rendering of...
Definition: DtOsgArticulatedModel.h:67
DtUniqueID DtElementID
The ElementID is a specific type of unique ID used to represent VR-Vantage uniquely defined elements...
Definition: DtUniqueID.h:23
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:42
DtOsgSceneConnector is used by models to create an OSG position/orientation transform so that it can ...
Definition: DtOsgSceneConnector.h:77
std::map< int, int > MapStateNumberToStateValue
Definition: DtArticulatedModelParser.h:52
static std::unordered_map< std::string, DtModelSetId > theSetEntitiesToTrack
Definition: DtOsgArticulatedModel.h:707
DtVector myRotationalVelocity
Definition: DtOsgArticulatedModel.h:616
static const std::unordered_set< int > theStatesToFilter
which states are we filtering to take additional/optional actions on?
Definition: DtOsgArticulatedModel.h:701
std::string myLightPointGroupName
Definition: DtOsgArticulatedModel.h:689
std::unordered_map< std::string, AnimationList > AnimationMap
Definition: DtArticulatedModelParser.h:50
DtArticulatedModelParser::MapStateNumberToMultiSwitchList myMapStateNumberToMultiSwitchList
Definition: DtOsgArticulatedModel.h:624
DtTaitBryan myOrientation
Definition: DtOsgArticulatedModel.h:615
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
std::map< int, PartOrientationData > PartOrientationMap
Definition: DtOsgArticulatedModel.h:655
DtArticulatedModelParser::ScrollableTextureGroupMap myScrollableTextureGroupMap
Definition: DtOsgArticulatedModel.h:629
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:621
DtVector myBoundMin
Definition: DtOsgArticulatedModel.h:661
DtMetaFileManager::LinkageValueVec myModelMetaFeatures
List of node pointers that have meta data associated with them.
Definition: DtOsgArticulatedModel.h:645
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
std::vector< osg::Node * > NodeList
Definition: DtOsgArticulatedModel.h:71
DtVector mySetPosition
Definition: DtOsgArticulatedModel.h:675
bool myUseSwitch
Definition: DtOsgArticulatedModel.h:635
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
DtVector myScaleArtPartTransform
Values to scale art part transforms by - loaded from the model definition.
Definition: DtOsgArticulatedModel.h:665
std::list< std::string > myWeaponFireDynamicRegions
Definition: DtOsgArticulatedModel.h:694
PartUpdateType myUpdateType
Definition: DtOsgArticulatedModel.h:617
std::vector< int > PartList
Definition: DtArticulatedModel.h:45
std::unordered_map< std::string, std::pair< float, float > > AnnotationNameToUvsMap
Definition: DtOsgArticulatedModel.h:75
Base class to provide boost signal/slot management.
DtOsgSceneConnector * mySceneConnector
Definition: DtOsgArticulatedModel.h:631
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:693
static bool theTrackObjects
Definition: DtOsgArticulatedModel.h:703
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:76
A utility Quaternion class.
Definition: DtQuat.h:19
std::unordered_map< std::string, bool > SensorRegionStateMap
Definition: DtOsgArticulatedModel.h:639
bool myInitialPositionOffsetSet
Definition: DtOsgArticulatedModel.h:680
DtModelSetId
Definition: DtModelSetEnums.h:19
boost::signalslib::signal< void(DtOsgArticulatedModel *, int, int)> signal_SetState
signal to emit when a state is set
Definition: DtOsgArticulatedModel.h:495
DtArticulatedModelParser::PartMap myPartMap
Definition: DtOsgArticulatedModel.h:623
bool myHandlersRegisterered
Definition: DtOsgArticulatedModel.h:682
std::list< std::string > myMovingDynamicRegions
Definition: DtOsgArticulatedModel.h:692
std::vector< DtVirtualBaseClass * > myModelMetaAttachments
Vector of metafile attachment on this object so they can be deleted on object destruction.
Definition: DtOsgArticulatedModel.h:653
LinkageConfigMap myLinkageConfigMap
Map of linkage names (NodeName/Annotation) from the metafile(if it exists) to config names...
Definition: DtOsgArticulatedModel.h:649
DtTaitBryan mySetOrientation
Definition: DtOsgArticulatedModel.h:676
std::map< std::string, VectorScrollableTextureGroupAndParams > ScrollableTextureGroupMap
Definition: DtArticulatedModelParser.h:141
DtSignalConnectionManager myConnections
Definition: DtOsgArticulatedModel.h:687
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:677
PartOrientationData()
Definition: DtOsgArticulatedModel.h:607

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)