VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtOsgIndirectEntityManager.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 
19 
23 #include <vrvMath/DtVector3.h>
24 
25 #include <vrvCore/DtUniqueID.h>
27 
28 #include <matrix/vlVector.h>
29 #include <matrix/vlTaitBryan.h>
30 
31 #include <boost/thread.hpp>
32 
33 #include <unordered_map>
34 #include <tuple>
35 #include <unordered_set>
36 
37 #include <tbb/concurrent_hash_map.h>
38 
39 namespace osg
40 {
41  class StateSet;
42 }
43 
44 namespace makVrv
45 {
46  class DtIndirectModelsContainer;
47  class DtModelDefinition;
48  class DtOsgModelInstance;
49  class DtIndirectGeometryGrid;
50 
51  class DtIndirectEntityManagerInstanceMoveInfo;
52  class DtIndirectEntityLimitTextureStrategy;
53 
54  class DtIndirectModelMasterMappings;
55 
69  {
70  public:
72  {
73  int myLightPointGroupId = 0;
74  std::string myLightPointGroupName = "";
75  };
76 
77  public:
79  virtual ~DtOsgIndirectEntityManager();
80 
82  static void registerInstance(DtDe& de);
83 
86  static DtOsgIndirectEntityManager& instance(DtDe& de);
87 
88 
89  protected:
92 
94  DtOsgIndirectEntityManager() = delete;
95 
98 
100  DtOsgIndirectEntityManager& operator=(const DtOsgIndirectEntityManager&) = delete;
101  public:
102 
106  virtual bool addInstance(DtUniqueID uniqueId, const DtModelDefinition& modelDefinition
107  , const DtOsgModelInstance& modelInstance, DtModel* model
108  , DtModelSetId modelSet, float modelScale, float modelRadius
109  , bool daylightControlled, bool mapDofsSwitchesSequences
110  , const DtLightPointGroupInfo& lightPointGroupInfo
111  , bool trackLifeTime
112  , const std::string& trackName);
113 
117  virtual bool addInstanceAsProp(DtUniqueID uniqueId, const DtModelDefinition& modelDefinition
118  , const DtOsgModelInstance& modelInstance, DtModel* model
119  , float modelScale, float modelRadius
120  , bool daylightControlled, bool mapDofsSwitchesSequences
121  , int lightPointGroupId);
122 
124  virtual bool hasInstance(DtUniqueID uniqueId) const;
125 
127  virtual void removeInstance(DtUniqueID uniqueID);
128 
130  virtual int numInstances(void) const;
131 
141  virtual void mapMultiSwitches(DtUniqueID uniqueID
143 
145  virtual void unMapMultiSwitches(DtUniqueID uniqueID);
146 
148  virtual void mapSequences(DtUniqueID uniqueID, DtArticulatedModelParser::AnimationMap& animationMap);
149 
151  virtual void unMapSequences(DtUniqueID uniqueID);
152 
154  virtual void mapDofs(DtUniqueID uniqueID, DtArticulatedModelParser::PartMap& partMap);
155 
157  virtual void unMapDofs(DtUniqueID uniqueID);
158 
160  virtual void setMultiSwitchActiveSwitchSet(DtUniqueID id, osgSim::MultiSwitch* multiSwitchOfInstance);
161 
163  virtual void setSequenceUpdate(DtUniqueID uniqueID, osg::Sequence* dof);
164 
166  virtual void setUvOffsetUpdate(DtUniqueID uniqueID, const std::string& annotation,
167  float uOffset, float vOffset);
168 
170  virtual void scrollUvTextures(DtUniqueID uniqueID, const std::tuple<float, float, float>& uvspeeds);
171 
173  virtual void setDofUpdate(DtUniqueID uniqueID, osgSim::DOFTransform* dof);
174 
176  virtual void setDofAnimationFlags(DtUniqueID uniqueID, osgSim::DOFTransform* dof, int animationFlags);
177 
179  virtual void setDofTranslation(DtUniqueID uniqueID, osgSim::DOFTransform* dof
180  , const Vector3_64& trans
181  , const Vector3_64& transVel);
182 
184  virtual void setDofOrientation(DtUniqueID uniqueID, osgSim::DOFTransform* dof
185  , const Vector3_64& hpr
186  , const Vector3_64& hprVel
187  , int animationFlags);
188 
190  virtual void setDofOrientation(DtUniqueID uniqueID, osgSim::DOFTransform* dof
191  , const Vector3_64& hprVel
192  , bool forceUpdate
193  , int animationFlags);
194 
197  void slot_atcGlobalModelEnableChanged();
198 
200  virtual void setPositionAndOrientation(DtUniqueID uniqueId
201  , const DtVector& position, const DtTaitBryan& orientation
202  , const DtVector& positionOffset, const DtTaitBryan& orientationOffset);
203 
205  virtual void setColor(DtUniqueID uniqueId, const Vector4_32& color);
206 
208  virtual void setOtherData0(DtUniqueID uniqueId, const Vector4_32& data);
209 
211  virtual void setVisible(DtUniqueID uniqueId, bool visible);
212 
214  virtual void setLightPointGroupId(DtUniqueID uniqueId, int groupId);
215 
217  virtual void setLightPointMaxDistance(DtUniqueID uniqueId, float maxDistance);
218 
220  virtual void setCellPageOutTime(double val);
226  virtual double cellPageOutTime(void) const;
228 
232  virtual void tick(void) override;
233 
238  virtual void slot_releaseResources();
239 
243  virtual void slot_postTick();
244 
247  virtual void slot_postInit();
248 
250  virtual void excludeTextureFromLimits(const std::string& textureFileAbolutePath);
251 
253  virtual void excludeModelDefinitionFromLimits(const std::string& modelDefinition);
254 
256  virtual DtIndirectLimitTextureStrategy* limitTextureStrategy(DtModelSetId modelSet);
257 
260  virtual bool isCopyingData(void) const;
261 
263 
264  virtual bool areRegisteredModelTextureVariants(DtModelSetId modelSet, const std::string& fileName) const;
265 
266  virtual void registerModelTextureVariants(DtModelSetId modelSet, const DtModelDefinition* modelDefinition
267  , const std::vector<std::string>& variantPaths);
268 
269  virtual void setModelTextureVariant(DtUniqueID uniqueId, const std::string& variant);
271 
274 
276  boost::signalslib::signal<void(DtModel*, DtUniqueID)> signal_instanceAdded;
277 
279 
280  protected:
281 
284  virtual DtIndirectEntityManagerInstanceMoveInfo* createMoveInfoIfNecessary(const DtVector& position
285  , DtIndirectEntityManagerInstance& currentEntityManagerInstance
286  , DtUniqueID uniqueId);
287 
289  virtual osgSim::DOFTransform* findMasterDof(DtUniqueID uniqueID, osgSim::DOFTransform* dof) const;
290 
292  virtual DtIndirectEntityGeometry* findIndirectGeometryAndInstanceId(DtUniqueID uniqueID, int& instanceId) const;
293 
295  virtual void calculateAndSetInstanceMatrixTransform(const DtVector& position
296  , const DtTaitBryan& orientation, const DtVector& positionOffset, const DtTaitBryan& orientationOffset
297  , DtIndirectEntityGeometry* indirectGeometry, int instanceId);
298 
300  virtual void reset();
301 
302  protected:
304  virtual void tickEntityMoves(void);
305 
307  virtual void tickPaging(void);
308 
310  virtual bool instanceIsBeingMovedTo(const Vector3_int& cellId);
311 
313  void setupRootNodes();
314 
317  virtual void setupReductionExcludeTextures();
318 
320  virtual void updateStats();
321 
323  virtual void disableModelSet(DtModelSetId modelSet);
325  virtual bool modelSetDisabled(DtModelSetId modelSet) const;
326 
328  virtual void setAlpha2Coverage(osg::Node* node, bool on);
329 
331  virtual void clearMasterMappingsMap(void);
332 
334  virtual bool parseNodeAndRegisterMasterMappings(osg::Node* modelNodeMaster, const std::string& modelName);
335  protected:
336 
337 
340 
341  boost::signalslib::connection myPostInitializeConnection;
342 
347  typedef std::unordered_map<DtModelSetId, DtIndirectGeometryGrid* > MapModelSetToDtIndirectGeometryGrids;
349 
351  using MapUniqueIdsToEntityManagerInstances = tbb::concurrent_hash_map<DtUniqueID, DtIndirectEntityManagerInstance>;
353 
354  typedef std::unordered_map< osgSim::MultiSwitch*, osg::ref_ptr<osgSim::MultiSwitch> > MapMultiSwitchesToMultiSwitches;
355  typedef std::unordered_map<DtUniqueID, MapMultiSwitchesToMultiSwitches > MapInstanceMultiSwitchesToMasterMultiSwitches;
356 
357  std::unordered_map<std::string, DtIndirectModelMasterMappings*> myModelNameToModelMasterMappings;
358 
360 
361  typedef std::unordered_map< osgSim::DOFTransform*, osg::ref_ptr<osgSim::DOFTransform> > MapDofToDof;
362  typedef std::unordered_map<DtUniqueID, MapDofToDof > MapInstanceDofToMasterDof;
363 
365 
366  typedef std::unordered_map< osg::Sequence*, osg::ref_ptr<osg::Sequence> > MapSequenceToSequence;
367  typedef std::unordered_map<DtUniqueID, MapSequenceToSequence > MapInstanceSequenceToMasterSequence;
368 
370 
373  using InstancesBeingMovedMap = tbb::concurrent_hash_map<DtUniqueID, DtIndirectEntityManagerInstanceMoveInfo*>;
375 
380 
385  using IndirectEntityGeometryMap = tbb::concurrent_unordered_map<unsigned int, DtIndirectEntityGeometry*>;
387 
389  typedef std::unordered_map<Vector3_int, DtIndirectGridCellTime, DtIndirectCellHasher> CellIdsWithZeroInstancesUpTime;
390 
392  typedef std::unordered_map<DtModelSetId, CellIdsWithZeroInstancesUpTime> GridToCellIdsWithZeroInstancesUpTime;
393 
396 
397  // The time after which inactive cells are removed
399 
401 
402  std::set<int> myDisabledModelSets;
403 
405  {
407  std::unordered_map<std::string, int> myVariantToModelId;
408  };
409 
410  std::unordered_map < DtModelSetId, std::unordered_map<std::string, ModelVariantInformation> > myModelSetToModelVariantInformationMap;
411  };
412 }
MapUniqueIdsToEntityManagerInstances myMapUniqueIdsToEntityManagerInstances
Definition: DtOsgIndirectEntityManager.h:352
internal structure for mapping a DtOsgArticulatedModel/DtOsgSimpleModel object to a corresponding ins...
Definition: DtIndirectEntityManagerInstance.h:30
std::unordered_map< DtModelSetId, std::unordered_map< std::string, ModelVariantInformation > > myModelSetToModelVariantInformationMap
Definition: DtOsgIndirectEntityManager.h:410
DtSignalConnectionManager myConnections
manager for connections
Definition: DtOsgIndirectEntityManager.h:339
class to encapsulate moving of instance from one indirect geometry to another in an entity manager/gr...
Definition: DtIndirectEntityManagerInstanceMoveInfo.h:30
std::unordered_map< osgSim::DOFTransform *, osg::ref_ptr< osgSim::DOFTransform > > MapDofToDof
Definition: DtOsgIndirectEntityManager.h:361
Contains the DtIndirectEntityManagerInstance class declaration.
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
tbb::concurrent_hash_map< DtUniqueID, DtIndirectEntityManagerInstanceMoveInfo * > InstancesBeingMovedMap
move info for the instances being moved Use concurrent hash map here as it supports concurrent erase ...
Definition: DtOsgIndirectEntityManager.h:373
std::unordered_map< DtModelSetId, DtIndirectGeometryGrid * > MapModelSetToDtIndirectGeometryGrids
There is one grid per model set type in the manager Each grid contains a list of &#39;cells&#39; Each cell co...
Definition: DtOsgIndirectEntityManager.h:347
MapInstanceMultiSwitchesToMasterMultiSwitches myMapInstanceMultiSwitchesToMasterMultiSwitches
Definition: DtOsgIndirectEntityManager.h:359
singleton class that acts as a bridge between the
Definition: DtOsgIndirectEntityManager.h:68
std::unordered_map< int, MultiSwitchList > MapStateNumberToMultiSwitchList
Definition: DtArticulatedModelParser.h:47
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:42
3 dimensional vector
std::unordered_map< osg::Sequence *, osg::ref_ptr< osg::Sequence > > MapSequenceToSequence
Definition: DtOsgIndirectEntityManager.h:366
tbb::concurrent_hash_map< DtUniqueID, DtIndirectEntityManagerInstance > MapUniqueIdsToEntityManagerInstances
map of unique ids to the corresponding DtOsgIndirectEntityManagerInstances
Definition: DtOsgIndirectEntityManager.h:351
Inherited from DtIndirectGeometry additionally implements: -removal of instances -ability to set/get ...
Definition: DtIndirectEntityGeometry.h:39
std::unordered_map< DtModelSetId, CellIdsWithZeroInstancesUpTime > GridToCellIdsWithZeroInstancesUpTime
map of each grid (model set) to inactive cells in that grid
Definition: DtOsgIndirectEntityManager.h:392
std::unordered_map< std::string, AnimationList > AnimationMap
Definition: DtArticulatedModelParser.h:50
Contains makVrv::DtVirtualBaseClass class.
Axis Aligned Bounding Box class.
The base class for simple OSG based model instances. This call can&#39;t be instantiated itself...
Definition: DtOsgModelInstance.h:77
InstancesBeingMovedMap myInstanceMovesToDelete
Container for moves that need to be deleted. The DTOR for DtOsgIndirectEntityManagerInstanceMoveInfo ...
Definition: DtOsgIndirectEntityManager.h:379
InstancesBeingMovedMap myInstancesBeingMoved
Definition: DtOsgIndirectEntityManager.h:374
GridToCellIdsWithZeroInstancesUpTime myGridToCellIdsWithZeroInstancesUpTime
map of each grid (model set) to inactive cells in that grid
Definition: DtOsgIndirectEntityManager.h:395
Contains the DtIndirectEntityManager class declaration.
std::set< int > myDisabledModelSets
Definition: DtOsgIndirectEntityManager.h:402
boost::signalslib::signal< void(DtModel *, DtUniqueID)> signal_instanceAdded
Emitted when a new instance of a model is added to the entity manager.
Definition: DtOsgIndirectEntityManager.h:276
boost::signalslib::connection myPostInitializeConnection
Definition: DtOsgIndirectEntityManager.h:341
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
Vector3_64 myLastObserverLocation
Definition: DtOsgIndirectEntityManager.h:400
Contains makVrv::DtIndirectGridCellTime class.
MapInstanceSequenceToMasterSequence myMapInstanceSequenceToMasterSequence
Definition: DtOsgIndirectEntityManager.h:369
MapModelSetToDtIndirectGeometryGrids myMapModelSetToDtIndirectGeometryGrids
Definition: DtOsgIndirectEntityManager.h:348
Definition: DtOsgIndirectEntityManager.h:71
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
The indirect system uses this in conjunction with the system wide limits (for entity/terrain) to clam...
Definition: DtIndirectLimitTextureStrategy.h:65
tbb::concurrent_unordered_map< unsigned int, DtIndirectEntityGeometry * > IndirectEntityGeometryMap
A map that holds all indirect geometries in one location so that they can be ticked, and this can be done across multiple threads. Use unordered map here as it supports concurrent traversal and insertion but does not support concurrent erase. Removal from this map only occurs in DtOsgIndirectEntityManager::tickPaging() which is single threaded.
Definition: DtOsgIndirectEntityManager.h:385
std::unordered_map< Vector3_int, DtIndirectGridCellTime, DtIndirectCellHasher > CellIdsWithZeroInstancesUpTime
map of inactive cells to their start and current time
Definition: DtOsgIndirectEntityManager.h:389
std::unordered_map< DtUniqueID, MapMultiSwitchesToMultiSwitches > MapInstanceMultiSwitchesToMasterMultiSwitches
Definition: DtOsgIndirectEntityManager.h:355
std::unordered_map< DtUniqueID, MapDofToDof > MapInstanceDofToMasterDof
Definition: DtOsgIndirectEntityManager.h:362
Base class to provide boost signal/slot management.
std::unordered_map< int, PartTransformList > PartMap
Definition: DtArticulatedModelParser.h:44
Contains makVrv::DtArticulatedModelParser class.
double myCellPageOutTime
Definition: DtOsgIndirectEntityManager.h:398
MapInstanceDofToMasterDof myMapInstanceDofToMasterDof
Definition: DtOsgIndirectEntityManager.h:364
A model which owns a single model instance. A DtModel is a managing container for a single DtModelIns...
Definition: DtModel.h:56
Contains makVrv::DtUniqueID type.
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
std::unordered_map< std::string, DtIndirectModelMasterMappings * > myModelNameToModelMasterMappings
Definition: DtOsgIndirectEntityManager.h:357
Definition: DtOsgIndirectEntityManager.h:404
int myMasterModelId
Definition: DtOsgIndirectEntityManager.h:406
vrvCore singleton base class for OSGs DtOsgIndirectEntityManager, Allows for this manager to be ticke...
Definition: DtIndirectEntityManager.h:21
DtModelSetId
Definition: DtModelSetEnums.h:19
Contains the DtIndirectGeometry class declaration.
std::unordered_map< osgSim::MultiSwitch *, osg::ref_ptr< osgSim::MultiSwitch > > MapMultiSwitchesToMultiSwitches
Definition: DtOsgIndirectEntityManager.h:354
Contains makVrv::DtIndirectCellHasher class.
std::unordered_map< DtUniqueID, MapSequenceToSequence > MapInstanceSequenceToMasterSequence
Definition: DtOsgIndirectEntityManager.h:367
std::unordered_map< std::string, int > myVariantToModelId
Definition: DtOsgIndirectEntityManager.h:407
IndirectEntityGeometryMap myIndirectEntityGeometryMap
Definition: DtOsgIndirectEntityManager.h:386

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)