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) 2024 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 setDofTranslation(DtUniqueID uniqueID, osgSim::DOFTransform* dof
177  , const Vector3_64& trans
178  , const Vector3_64& transVel);
179 
181  virtual void setDofOrientation(DtUniqueID uniqueID, osgSim::DOFTransform* dof
182  , const Vector3_64& hpr
183  , const Vector3_64& hprVel
184  , int animationFlags);
185 
187  virtual void setDofOrientation(DtUniqueID uniqueID, osgSim::DOFTransform* dof
188  , const Vector3_64& hprVel
189  , bool forceUpdate
190  , int animationFlags);
191 
194  void slot_atcGlobalModelEnableChanged();
195 
197  virtual void setPositionAndOrientation(DtUniqueID uniqueId
198  , const DtVector& position, const DtTaitBryan& orientation
199  , const DtVector& positionOffset, const DtTaitBryan& orientationOffset);
200 
202  virtual void setColor(DtUniqueID uniqueId, const Vector4_32& color);
203 
205  virtual void setOtherData0(DtUniqueID uniqueId, const Vector4_32& data);
206 
208  virtual void setVisible(DtUniqueID uniqueId, bool visible);
209 
211  virtual void setLightPointGroupId(DtUniqueID uniqueId, int groupId);
212 
214  virtual void setLightPointMaxDistance(DtUniqueID uniqueId, float maxDistance);
215 
217  virtual void setCellPageOutTime(double val);
223  virtual double cellPageOutTime(void) const;
225 
229  virtual void tick(void) override;
230 
234  virtual void slot_postTick();
235 
238  virtual void slot_postInit();
239 
241  virtual void excludeTextureFromLimits(const std::string& textureFileAbolutePath);
242 
244  virtual void excludeModelDefinitionFromLimits(const std::string& modelDefinition);
245 
247  virtual DtIndirectLimitTextureStrategy* limitTextureStrategy(DtModelSetId modelSet);
248 
251  virtual bool isCopyingData(void) const;
252 
254 
255  virtual bool areRegisteredModelTextureVariants(DtModelSetId modelSet, const std::string& fileName) const;
256 
257  virtual void registerModelTextureVariants(DtModelSetId modelSet, const DtModelDefinition* modelDefinition
258  , const std::vector<std::string>& variantPaths);
259 
260  virtual void setModelTextureVariant(DtUniqueID uniqueId, const std::string& variant);
262 
265 
267  boost::signalslib::signal<void(DtModel*, DtUniqueID)> signal_instanceAdded;
268 
270 
271  protected:
272 
275  virtual DtIndirectEntityManagerInstanceMoveInfo* createMoveInfoIfNecessary(const DtVector& position
276  , DtIndirectEntityManagerInstance& currentEntityManagerInstance
277  , DtUniqueID uniqueId);
278 
280  virtual osgSim::DOFTransform* findMasterDof(DtUniqueID uniqueID, osgSim::DOFTransform* dof) const;
281 
283  virtual DtIndirectEntityGeometry* findIndirectGeometryAndInstanceId(DtUniqueID uniqueID, int& instanceId) const;
284 
286  virtual void calculateAndSetInstanceMatrixTransform(const DtVector& position
287  , const DtTaitBryan& orientation, const DtVector& positionOffset, const DtTaitBryan& orientationOffset
288  , DtIndirectEntityGeometry* indirectGeometry, int instanceId);
289 
290 
291  protected:
293  virtual void tickEntityMoves(void);
294 
296  virtual void tickPaging(void);
297 
299  virtual bool instanceIsBeingMovedTo(const Vector3_int& cellId);
300 
302  void setupRootNodes();
303 
306  virtual void setupReductionExcludeTextures();
307 
309  virtual void updateStats();
310 
312  virtual void disableModelSet(DtModelSetId modelSet);
314  virtual bool modelSetDisabled(DtModelSetId modelSet) const;
315 
317  virtual void setAlpha2Coverage(osg::Node* node, bool on);
318 
320  virtual void clearMasterMappingsMap(void);
321 
323  virtual bool parseNodeAndRegisterMasterMappings(osg::Node* modelNodeMaster, const std::string& modelName);
324  protected:
325 
326 
329 
330  boost::signalslib::connection myPostInitializeConnection;
331 
336  typedef std::unordered_map<DtModelSetId, DtIndirectGeometryGrid* > MapModelSetToDtIndirectGeometryGrids;
338 
340  using MapUniqueIdsToEntityManagerInstances = tbb::concurrent_hash_map<DtUniqueID, DtIndirectEntityManagerInstance>;
342 
343  typedef std::unordered_map< osgSim::MultiSwitch*, osg::ref_ptr<osgSim::MultiSwitch> > MapMultiSwitchesToMultiSwitches;
344  typedef std::unordered_map<DtUniqueID, MapMultiSwitchesToMultiSwitches > MapInstanceMultiSwitchesToMasterMultiSwitches;
345 
346  std::unordered_map<std::string, DtIndirectModelMasterMappings*> myModelNameToModelMasterMappings;
347 
349 
350  typedef std::unordered_map< osgSim::DOFTransform*, osg::ref_ptr<osgSim::DOFTransform> > MapDofToDof;
351  typedef std::unordered_map<DtUniqueID, MapDofToDof > MapInstanceDofToMasterDof;
352 
354 
355  typedef std::unordered_map< osg::Sequence*, osg::ref_ptr<osg::Sequence> > MapSequenceToSequence;
356  typedef std::unordered_map<DtUniqueID, MapSequenceToSequence > MapInstanceSequenceToMasterSequence;
357 
359 
362  //std::unordered_map<DtUniqueID, DtOsgIndirectEntityManagerInstanceMoveInfo*> myInstancesBeingMoved;
363  using InstancesBeingMovedMap = tbb::concurrent_hash_map<DtUniqueID, DtIndirectEntityManagerInstanceMoveInfo*>;
365 
370 
375  using IndirectEntityGeometryMap = tbb::concurrent_unordered_map<unsigned int, DtIndirectEntityGeometry*>;
377 
378  // use_old_non_concurrent_path
380 
382  typedef std::unordered_map<Vector3_int, DtIndirectGridCellTime, DtIndirectCellHasher> CellIdsWithZeroInstancesUpTime;
383 
385  typedef std::unordered_map<DtModelSetId, CellIdsWithZeroInstancesUpTime> GridToCellIdsWithZeroInstancesUpTime;
386 
389 
390  // The time after which inactive cells are removed
392 
394 
395  std::set<int> myDisabledModelSets;
396 
398  // XXX temporary until we finish testing and branch is QA approved.
399  // Connected to cmdline arg enableMutexesOnIndirectStructures
401 
403  {
405  std::unordered_map<std::string, int> myVariantToModelId;
406  };
407 
408  std::unordered_map < DtModelSetId, std::unordered_map<std::string, ModelVariantInformation> > myModelSetToModelVariantInformationMap;
409  };
410 }
MapUniqueIdsToEntityManagerInstances myMapUniqueIdsToEntityManagerInstances
Definition: DtOsgIndirectEntityManager.h:341
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:408
DtSignalConnectionManager myConnections
manager for connections
Definition: DtOsgIndirectEntityManager.h:328
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:350
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:363
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:336
MapInstanceMultiSwitchesToMasterMultiSwitches myMapInstanceMultiSwitchesToMasterMultiSwitches
Definition: DtOsgIndirectEntityManager.h:348
singleton class that acts as a bridge between the
Definition: DtOsgIndirectEntityManager.h:68
std::unordered_map< int, MultiSwitchList > MapStateNumberToMultiSwitchList
Definition: DtArticulatedModelParser.h:47
boost::mutex myInstancesBeingMovedMutex
Definition: DtOsgIndirectEntityManager.h:379
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:355
bool myMutexesEnabled
Connected to command line arg enableMutexesOnIndirectStructures.
Definition: DtOsgIndirectEntityManager.h:400
tbb::concurrent_hash_map< DtUniqueID, DtIndirectEntityManagerInstance > MapUniqueIdsToEntityManagerInstances
map of unique ids to the corresponding DtOsgIndirectEntityManagerInstances
Definition: DtOsgIndirectEntityManager.h:340
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:385
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:369
InstancesBeingMovedMap myInstancesBeingMoved
Definition: DtOsgIndirectEntityManager.h:364
GridToCellIdsWithZeroInstancesUpTime myGridToCellIdsWithZeroInstancesUpTime
map of each grid (model set) to inactive cells in that grid
Definition: DtOsgIndirectEntityManager.h:388
Contains the DtIndirectEntityManager class declaration.
std::set< int > myDisabledModelSets
Definition: DtOsgIndirectEntityManager.h:395
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:267
boost::signalslib::connection myPostInitializeConnection
Definition: DtOsgIndirectEntityManager.h:330
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
Vector3_64 myLastObserverLocation
Definition: DtOsgIndirectEntityManager.h:393
Contains makVrv::DtIndirectGridCellTime class.
MapInstanceSequenceToMasterSequence myMapInstanceSequenceToMasterSequence
Definition: DtOsgIndirectEntityManager.h:358
MapModelSetToDtIndirectGeometryGrids myMapModelSetToDtIndirectGeometryGrids
Definition: DtOsgIndirectEntityManager.h:337
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:375
std::unordered_map< Vector3_int, DtIndirectGridCellTime, DtIndirectCellHasher > CellIdsWithZeroInstancesUpTime
map of inactive cells to their start and current time
Definition: DtOsgIndirectEntityManager.h:382
std::unordered_map< DtUniqueID, MapMultiSwitchesToMultiSwitches > MapInstanceMultiSwitchesToMasterMultiSwitches
Definition: DtOsgIndirectEntityManager.h:344
std::unordered_map< DtUniqueID, MapDofToDof > MapInstanceDofToMasterDof
Definition: DtOsgIndirectEntityManager.h:351
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:391
MapInstanceDofToMasterDof myMapInstanceDofToMasterDof
Definition: DtOsgIndirectEntityManager.h:353
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:72
std::unordered_map< std::string, DtIndirectModelMasterMappings * > myModelNameToModelMasterMappings
Definition: DtOsgIndirectEntityManager.h:346
Definition: DtOsgIndirectEntityManager.h:402
int myMasterModelId
Definition: DtOsgIndirectEntityManager.h:404
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:343
Contains makVrv::DtIndirectCellHasher class.
std::unordered_map< DtUniqueID, MapSequenceToSequence > MapInstanceSequenceToMasterSequence
Definition: DtOsgIndirectEntityManager.h:356
std::unordered_map< std::string, int > myVariantToModelId
Definition: DtOsgIndirectEntityManager.h:405
IndirectEntityGeometryMap myIndirectEntityGeometryMap
Definition: DtOsgIndirectEntityManager.h:376

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)