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) 2024 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 
149 
150  //@name <Part Management Functions: Start>
152  virtual void setPartTranslation(int partNumber,
154  const DtVector& transform, const DtVector& velocity);
155 
157  virtual void setPartOrientation(int partNumber,
158  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
159 
162  virtual void setPartRotationalVelocity(int partNumber,
163  const DtVector& rotationalVelocity, bool forceUpdate = true);
164 
168  virtual bool findPartPositionAndOrientation(int partNumber,
169  DtVector& position, DtQuat& ori) override;
170 
173  virtual DtVector partTranslation(int partNumber) const;
174 
177  virtual DtTaitBryan partOrientation(int partNumber) const;
178 
180  virtual void setPartVisibility(int partNumber, bool onOff);
181 
183  const DtArticulatedModelParser::PartMap& parts() const;
184 
186  virtual void getParts(PartList& parts) const;
187 
189  virtual bool hasPart(int partId) const;
190 
192  virtual void addPart(int partNumber, osgSim::DOFTransform* node);
193  // </Part Management Functions: End>
195 
196 
197 
198 
199  //@name <Animation Management Functions: Start>
201  virtual void setAnimationFrame(const std::string& animationName,
203  int frameIndex) override;
204 
206  virtual void setAnimationRange(const std::string& animationName,
207  int firstFrameIndex, int lastFrameIndex) override;
208 
210  virtual void setAnimationSpeed(const std::string& animationName,
211  double framesPerSecond) override;
212 
214  virtual void setAnimationState(const std::string& animationName,
215  AnimationState mode) override;
216 
219  virtual void setAnimationLastFrameTime(const std::string& animationName, double animationLastFrameTime);
220 
223  virtual void setAnimationLoopCount(const std::string& animationName, int loopCount);
224 
227  virtual int animationFrameCount(const std::string& animationName) const;
228 
231  virtual int animationCurrentFrame(const std::string& animationName) const;
232 
235  virtual int animationFirstFrame(const std::string& animationName) const;
236 
239  virtual int animationLastFrame(const std::string& animationName) const;
240 
243  virtual double animationSpeed(const std::string& animationName) const;
244 
247  virtual AnimationState animationState(const std::string& animationName) const;
248 
251  virtual double animationLastFrameTime(const std::string& animationName) const;
252 
254  // default param is -1, repeat forever
255  virtual int animationLoopCount(const std::string& animationName) const;
256 
258  virtual const DtArticulatedModelParser::AnimationMap& animations() const;
259 
261  virtual void addAnimation(const std::string& animationName,
262  osg::Sequence* node);
263 
265  virtual const DtArticulatedModelParser::FlipBookAnimationMap& flipBookAnimations() const;
266 
268  virtual const DtArticulatedModelParser::FlipBookAnimationMap& flipBookAnimationsWithVelocityControl() const;
269 
271  virtual void setFlipBookAnimationsSpeed(double leftSpeed, double rightSpeed, double mainSpeed);
272 
274  virtual const DtArticulatedModelParser::ScrollableTextureGroupMap& scrollableTextureGroupMap() const;
275 
277  virtual void scrollUvTextures(double leftSpeed, double rightSpeed, double mainSpeed);
278 
279  //<Animation Management Functions: End>
281 
282 
283 
284  //@name <Model scaling functions: Start>
286  virtual void setModelScalingEnabled(bool b);
289 
291  virtual bool modelScalingEnabled();
292 
296  virtual void setLocalModelScalingEnabled(bool enabled);
297 
300  virtual void setLocalModelScalingAmount(float localScl);
301 
302  // </Model scaling functions: End>
304 
305 
306 
307  //@name <Color and Blending: Start>
309  virtual void setColor(float r, float g, float b, float a);
311 
313  virtual void enableColorBlending(bool b);
314 
316  virtual void setBlendColor(float r, float g, float b, float a);
317  //</Color and Blending: End>
319 
320  //@name <Instance OtherData0: Start>
322  virtual void setOtherData0(float r, float g, float b, float a);
324  //</Instance OtherData0: End>
326 
327 
328 
329  //@name <Linkage and Config: Start>
331  virtual void setLinkageConfigPair(const std::string& linkageName, const std::string& configName);
338 
340  virtual LinkageConfigMap& linkageConfigMap();
341 
343  virtual const LinkageConfigMap& linkageConfigMap() const;
344  //</Linkage and Config: End>
346 
347 
349  virtual void weaponFired(const DtUnicode& munitionModelDefName) override;
350 
351  //@name <Sensor: Start>
353  virtual void setDynamicSensorRegion(const std::string& region, bool state) override;
355 
357  virtual bool dynamicSensorRegion(const std::string& region);
358 
359  //</Sensor: End>
361 
362 
363 
364 
369  virtual void setUvOffset(const std::string& annotation,
370  float uOffset, float vOffset);
371 
373  virtual const AnnotationNameToUvsMap& annotationsMap(void) const;
374 
375  //@name <State setting: Start>
377  virtual void setState(int stateNumber, int stateValue);
379 
381  virtual void setStateUnfiltered(int stateNumber, int stateValue);
382 
384  virtual void reapplyState();
385 
388  virtual int state(int stateNumber) const;
389 
392 
394  virtual void addState(int stateNumber, osgSim::MultiSwitch* node);
395 
398  virtual void setStateValueExists(int stateNumber, int stateValue);
399  //</State setting: End>
401 
402 
403 
404 
405  //@name <Lights: Start>
407  virtual void setLightpointMaxDistance(float distance);
410 
412  virtual void setLightPointGroup(const std::string& groupName);
413 
415  virtual const std::string& lightPointGroup() const;
416 
418  virtual void setLightPointGroupIntensity(const std::string& groupName, float intensity);
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 animationFlags);
457 
459  virtual void setDofHprVel(osgSim::DOFTransform* dof, const DtVector& hprVel, int animationFlags);
460 
462 
463  virtual bool areRegisteredModelTextureVariants(void) const;
464 
465  virtual void registerModelTextureVariants(const std::vector<std::string>& variants);
466 
467  virtual void setModelTextureVariant(const std::string& variant);
468 
469  virtual const std::string& DtOsgArticulatedModel::modelTextureVariant(void);
471 
473  boost::signalslib::signal<void(DtOsgArticulatedModel*, int, int)> signal_SetState;
474 
475  public:
477  static void setTrackObjects(bool val);
479  static bool trackObjects(void);
481 
483  static void trackEntity(const std::string& entityDisplayName, DtModelSetId modelSet, bool track);
484 
485  protected:
486 
489  virtual void setStateInternal(int stateNumber, int stateValue);
490 
493  virtual void setUvOffsetInternal(const std::string& annotation, float uOffset, float vOffset);
494 
495 
496 
497  //@name <Part Management Internal Functions: Start>
499  virtual void setPartTranslationInternal(int partNumber,
501  const DtVector& transform, const DtVector& velocity);
502 
504  virtual void setPartOrientationInternal(int partNumber,
505  const DtTaitBryan& orientation, const DtVector& rotationalVelocity);
506 
510  virtual void setPartRotationalVelocityInternal(int partNumber,
511  const DtVector& rotationalVelocity, bool forceUpdate = true);
512 
514  virtual void disablePart(int partNumber);
515 
517  virtual void enablePart(int partNumber);
518 
519  //@name </Part Management Internal Functions: End>
521 
522 
524  virtual void addToScene(const DtUniqueID& sceneObjectId, DtModelSetId modelSet,
525  int visualizerType);
526 
528  virtual void removeFromScene();
529 
531  virtual void modelInstanceToBeDeleted();
532 
533 
535  virtual void modelInstanceCreatedInternal(osg::Node* root, DtOsgModelInstance* osgModelInstance, bool daylightControlledLights, float scale);
536 
540  virtual void modelInstanceCreated(bool castShadows, bool daylightControlledLights, float scale);
541 
543  virtual void mergeCurrentStateWithDefaults(DtArticulatedModelParser* parser);
544 
546  virtual void parseModel(osg::Node* root);
547 
550  virtual void backgroundLoad();
551 
552  virtual void discoverDynamicRegions(const DtModelDefinition* definition);
553 
555  virtual void foregroundLoad();
556 
558  virtual void backgroundLoadInternal(DtModelDefinition* definition);
559 
561  virtual void backgroundLoadFirstLoadInternal(DtModelDefinition* definition);
562 
564  virtual void foregroundLoadInternal();
565 
570  virtual void processAutomaticallyArticulatedParts();
571 
573  virtual int lightPointGroupIdToUse(bool increaseReferenceCount=false) const;
574 
575  virtual void updateGeneratedUniqueLightPointGroupName();
576 
578  virtual void modelInstanceToBeDeletedInternal(void);
579 
580  protected:
581 
582 
589  DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMapWithVelocityControl; // This is a subset of the map of all flip book animations above
592 
594 
596  static const unsigned int theNodePathCacheSize = 4;
598 
600 
601  typedef std::unordered_map<std::string, bool> SensorRegionStateMap;
603 
605 
608 
612 
615  std::vector<DtVirtualBaseClass*> myModelMetaAttachments;
616 
617  typedef std::map<int, std::pair<DtTaitBryan, DtVector> > PartOrientationMap;
619 
620  typedef std::map<int, std::pair<DtVector, DtVector> > PartTranslationMap;
622 
623  DtVector myBoundMin, myBoundMax;
624 
628 
629  // These are used for backwards compatibility only. Even though you
630  // always call setModelDefinition (to finish constructing the model)
631  // before calling anything else, you used to be able to get away with
632  // calling setPosition() or setOrientation() first. That's no longer
633  // strictly true, so we have to store any position or orientation that
634  // gets set and then explicitly use them after setModelDefinition is
635  // called.
636 
638  DtTaitBryan mySetOrientation;
641 
645 
646  //needed to keep track of the initial state of the model scaling flag
648 
650 
652 
653 
654  std::list<std::string> myMovingDynamicRegions;
655  std::list<std::string> myPowerPlantDynamicRegions;
656  std::list<std::string> myWeaponFireDynamicRegions;
657 
658  protected:
659  static boost::mutex theBackgroundLoadCloneMutex;
660 
663  static const std::unordered_set<int> theStatesToFilter;
664 
665  static bool theTrackObjects;
666  static std::atomic<int> theTotalObjects;
667 
668  // Used for debugging
669  static std::unordered_map<std::string, DtModelSetId> theSetEntitiesToTrack;
670 
672  };
673 }
bool myModelScalingEnabled
Definition: DtOsgArticulatedModel.h:647
DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMap
Definition: DtOsgArticulatedModel.h:588
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:671
NodePathCache myNodePathCache
Definition: DtOsgArticulatedModel.h:595
bool myInitialOrientationOffsetSet
Definition: DtOsgArticulatedModel.h:643
DtOsgIndirectEntityManager & myIndirectEntityManager
Definition: DtOsgArticulatedModel.h:604
DtArticulatedModelParser::AnnotationMap myAnnotationMap
Definition: DtOsgArticulatedModel.h:590
DtArticulatedModelParser::FlipBookAnimationMap myFlipBookAnimationMapWithVelocityControl
Definition: DtOsgArticulatedModel.h:589
PartTranslationMap myPartTranslationMap
Definition: DtOsgArticulatedModel.h:621
DtArticulatedModelParser::AnimationMap myAnimationMap
Definition: DtOsgArticulatedModel.h:587
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
std::unordered_map< int, NodeList > NodePathCache
Definition: DtOsgArticulatedModel.h:72
AnnotationNameToUvsMap myAnnotationsUvMap
Definition: DtOsgArticulatedModel.h:599
SensorRegionStateMap mySensorRegionMap
Definition: DtOsgArticulatedModel.h:602
std::map< int, std::pair< DtVector, DtVector > > PartTranslationMap
Definition: DtOsgArticulatedModel.h:620
Contains makVrv::DtMetaFileManager class.
bool myInitialOrientationSet
Definition: DtOsgArticulatedModel.h:640
singleton class that acts as a bridge between the
Definition: DtOsgIndirectEntityManager.h:68
PartOrientationMap myPartOrientationMap
Definition: DtOsgArticulatedModel.h:618
std::map< int, std::pair< DtTaitBryan, DtVector > > PartOrientationMap
Definition: DtOsgArticulatedModel.h:617
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
static std::atomic< int > theTotalObjects
Definition: DtOsgArticulatedModel.h:666
DtArticulatedModelParser::MapStateNumberToStateValue myMapStateNumberToStateValue
Definition: DtOsgArticulatedModel.h:584
static boost::mutex theBackgroundLoadCloneMutex
Definition: DtOsgArticulatedModel.h:659
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:669
static const std::unordered_set< int > theStatesToFilter
which states are we filtering to take additional/optional actions on?
Definition: DtOsgArticulatedModel.h:663
std::string myLightPointGroupName
Definition: DtOsgArticulatedModel.h:651
std::unordered_map< std::string, AnimationList > AnimationMap
Definition: DtArticulatedModelParser.h:50
DtArticulatedModelParser::MapStateNumberToMultiSwitchList myMapStateNumberToMultiSwitchList
Definition: DtOsgArticulatedModel.h:586
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:591
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:583
DtVector myBoundMin
Definition: DtOsgArticulatedModel.h:623
DtMetaFileManager::LinkageValueVec myModelMetaFeatures
List of node pointers that have meta data associated with them.
Definition: DtOsgArticulatedModel.h:607
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:637
bool myUseSwitch
Definition: DtOsgArticulatedModel.h:597
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:627
std::list< std::string > myWeaponFireDynamicRegions
Definition: DtOsgArticulatedModel.h:656
std::vector< int > PartList
Definition: DtArticulatedModel.h:36
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:593
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:655
static bool theTrackObjects
Definition: DtOsgArticulatedModel.h:665
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:72
A utility Quaternion class.
Definition: DtQuat.h:19
std::unordered_map< std::string, bool > SensorRegionStateMap
Definition: DtOsgArticulatedModel.h:601
bool myInitialPositionOffsetSet
Definition: DtOsgArticulatedModel.h:642
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:473
DtArticulatedModelParser::PartMap myPartMap
Definition: DtOsgArticulatedModel.h:585
bool myHandlersRegisterered
Definition: DtOsgArticulatedModel.h:644
std::list< std::string > myMovingDynamicRegions
Definition: DtOsgArticulatedModel.h:654
std::vector< DtVirtualBaseClass * > myModelMetaAttachments
Vector of metafile attachment on this object so they can be deleted on object destruction.
Definition: DtOsgArticulatedModel.h:615
LinkageConfigMap myLinkageConfigMap
Map of linkage names (NodeName/Annotation) from the metafile(if it exists) to config names...
Definition: DtOsgArticulatedModel.h:611
DtTaitBryan mySetOrientation
Definition: DtOsgArticulatedModel.h:638
std::map< std::string, VectorScrollableTextureGroupAndParams > ScrollableTextureGroupMap
Definition: DtArticulatedModelParser.h:144
DtSignalConnectionManager myConnections
Definition: DtOsgArticulatedModel.h:649
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:639

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)