VR-Forces 5.0.1 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtIndirectEntityManager.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 
19 
24 
25 #include <vrvCore/DtUniqueID.h>
26 
27 #include <matrix/vlVector.h>
28 #include <matrix/vlTaitBryan.h>
29 
30 #include <boost/thread.hpp>
31 
32 #include <unordered_map>
33 #include <tuple>
34 
35 namespace osg
36 {
37  class StateSet;
38 }
39 
40 namespace makVrv
41 {
42  class DtIndirectModelsContainer;
43  class DtModelDefinition;
44  class DtOsgModelInstance;
45  class DtIndirectGeometryGrid;
46 
47  class DtIndirectEntityManagerInstanceMoveInfo;
48 
62  {
63  public:
65  virtual ~DtIndirectEntityManager();
66 
68  static DtIndirectEntityManager& instance(DtDe& de);
69 
70  protected:
73 
74  private:
76  DtIndirectEntityManager() = delete;
77 
80 
82  DtIndirectEntityManager& operator=(const DtIndirectEntityManager&) = delete;
83  public:
84 
88  virtual bool addInstance(DtUniqueID uniqueId, const DtModelDefinition& modelDefinition
89  , const DtOsgModelInstance& modelInstance, DtModel* model
90  , int modelSet, float modelScale, float modelRadius
91  , bool daylightControlled, bool mapDofsSwitchesSequences
92  , int lightPointGroupId);
93 
97  virtual bool addInstanceAsProp(DtUniqueID uniqueId, const DtModelDefinition& modelDefinition
98  , const DtOsgModelInstance& modelInstance, DtModel* model
99  , float modelScale, float modelRadius
100  , bool daylightControlled, bool mapDofsSwitchesSequences
101  , int lightPointGroupId);
102 
104  virtual bool hasInstance(DtUniqueID uniqueId) const;
105 
107  virtual void removeInstance(DtUniqueID uniqueID);
108 
110  virtual int numInstances(void) const;
111 
121  virtual void mapMultiSwitches(DtUniqueID uniqueID
123 
125  virtual void unMapMultiSwitches(DtUniqueID uniqueID);
126 
128  virtual void mapSequences(DtUniqueID uniqueID, DtArticulatedModelParser::AnimationMap& animationMap);
129 
131  virtual void unMapSequences(DtUniqueID uniqueID);
132 
134  virtual void mapDofs(DtUniqueID uniqueID, DtArticulatedModelParser::PartMap& partMap);
135 
137  virtual void unMapDofs(DtUniqueID uniqueID);
138 
140  virtual void setMultiSwitchActiveSwitchSet(DtUniqueID id, osgSim::MultiSwitch* multiSwitchOfInstance);
141 
143  virtual void setSequenceUpdate(DtUniqueID uniqueID, osg::Sequence* dof);
144 
146  virtual void setUvOffsetUpdate(DtUniqueID uniqueID, const std::string& annotation,
147  float uOffset, float vOffset);
148 
150  virtual void scrollUvTextures(DtUniqueID uniqueID, const std::tuple<float, float, float>& uvspeeds);
151 
153  virtual void setDofUpdate(DtUniqueID uniqueID, osgSim::DOFTransform* dof);
154 
156  virtual void setDofTranslation(DtUniqueID uniqueID, osgSim::DOFTransform* dof
157  , const Vector3_64& trans
158  , const Vector3_64& transVel);
159 
161  virtual void setDofOrientation(DtUniqueID uniqueID, osgSim::DOFTransform* dof
162  , const Vector3_64& hpr
163  , const Vector3_64& hprVel
164  , int animationFlags);
165 
167  virtual void setDofOrientation(DtUniqueID uniqueID, osgSim::DOFTransform* dof
168  , const Vector3_64& hprVel
169  , bool forceUpdate
170  , int animationFlags);
171 
174  void slot_atcGlobalModelEnableChanged();
175 
177  virtual void setPositionAndOrientation(DtUniqueID uniqueId
178  , const DtVector& position, const DtTaitBryan& orientation
179  , const DtVector& positionOffset, const DtTaitBryan& orientationOffset);
180 
182  virtual void setColor(DtUniqueID uniqueId, const Vector4_32& color);
183 
185  virtual void setOtherData0(DtUniqueID uniqueId, const Vector4_32& data);
186 
188  virtual void setVisible(DtUniqueID uniqueId, bool visible);
189 
191  virtual void setLightPointMaxDistance(DtUniqueID uniqueId, float maxDistance);
192 
194  virtual void setTextureLoadTimeSlicePeriod(float period);
202  virtual float textureLoadTimeSlicePeriod(void) const;
204 
206  virtual void setUpdateBuffersJobsRequiredCurrentFrame(bool requiredCurrentFrame);
214  virtual bool updateBuffersJobsRequiredCurrentFrame(void) const;
216 
218  virtual void setGridCellSize(const Vector3_64& gridCellSize);
222  virtual const Vector3_64& gridCellSize(void) const;
224 
226  virtual void setCellPageOutTime(double val);
232  virtual double cellPageOutTime(void) const;
234 
238  virtual void slot_postTick();
239 
241  virtual void excludeTextureFromLimits(const std::string& textureFileAbolutePath);
242 
244  virtual void excludeModelDefinitionFromLimits(const std::string& modelDefinition);
245 
248 
250  boost::signalslib::signal<void(DtModel*, DtUniqueID)> signal_instanceAdded;
251 
253 
254  protected:
255 
258  virtual DtIndirectEntityManagerInstanceMoveInfo* createMoveInfoIfNecessary(const DtVector& position
259  , DtIndirectEntityManagerInstance& currentEntityManagerInstance
260  , DtUniqueID uniqueId);
261 
263  virtual void configureIndirectGeometry(DtIndirectGeometry* indirectGeometry);
264 
266  virtual osgSim::DOFTransform* findMasterDof(DtUniqueID uniqueID, osgSim::DOFTransform* dof) const;
267 
269  virtual DtIndirectEntityGeometry* findIndirectGeometryAndInstanceId(DtUniqueID uniqueID, int& instanceId) const;
270 
272  virtual void calculateAndSetInstanceMatrixTransform(const DtVector &position
273  , const DtTaitBryan& orientation, const DtVector &positionOffset, const DtTaitBryan& orientationOffset
274  , DtIndirectEntityGeometry* indirectGeometry, int instanceId);
275 
277  virtual void tickEntityMoves(void);
278 
280  virtual void tickPaging(void);
281 
283  virtual bool instanceIsBeingMovedTo(const Vector3_int& cellId);
284 
286  void setupRootNodes();
287 
290  virtual void setupReductionExcludeTextures();
291 
293  virtual void updateStats();
294 
295  protected:
296 
299 
302 
305 
308 
313  typedef std::unordered_map<int, DtIndirectGeometryGrid* > MapModelSetToDtIndirectGeometryGrids;
315 
317  typedef std::unordered_map<DtUniqueID, DtIndirectEntityManagerInstance> MapUniqueIdsToEntityManagerInstances;
319 
320  typedef std::unordered_map< osgSim::MultiSwitch*, osg::ref_ptr<osgSim::MultiSwitch> > MapMultiSwitchesToMultiSwitches;
321  typedef std::unordered_map<DtUniqueID, MapMultiSwitchesToMultiSwitches > MapInstanceMultiSwitchesToMasterMultiSwitches;
322 
323  typedef std::unordered_map<std::string, DtArticulatedModelParser::MapStateNumberToMultiSwitchList> MapModelNameToMasterMapStateNumberToMultiSwitchList;
325 
327 
328  typedef std::unordered_map<std::string, DtArticulatedModelParser::PartMap> MapModelNameToMasterMapStateNumberToDof;
330 
331  typedef std::unordered_map< osgSim::DOFTransform*, osg::ref_ptr<osgSim::DOFTransform> > MapDofToDof;
332  typedef std::unordered_map<DtUniqueID, MapDofToDof > MapInstanceDofToMasterDof;
333 
335 
336  typedef std::unordered_map<std::string, DtArticulatedModelParser::AnimationMap> MapModelNameToMasterMapStateNumberToSequence;
338 
339  typedef std::unordered_map< osg::Sequence*, osg::ref_ptr<osg::Sequence> > MapSequenceToSequence;
340  typedef std::unordered_map<DtUniqueID, MapSequenceToSequence > MapInstanceSequenceToMasterSequence;
341 
343 
345  std::unordered_map<DtUniqueID, DtIndirectEntityManagerInstanceMoveInfo*> myInstancesBeingMoved;
346 
348 
350  typedef std::unordered_map<Vector3_int, DtIndirectGridCellTime, DtIndirectCellHasher> CellIdsWithZeroInstancesUpTime;
351 
353  typedef std::unordered_map<int, CellIdsWithZeroInstancesUpTime> GridToCellIdsWithZeroInstancesUpTime;
354 
357 
358  // The time after which inactive cells are removed
360 
362 
363  };
364 }
internal structure for mapping a DtOsgArticulatedModel/DtOsgSimpleModel object to a corresponding ins...
Definition: DtIndirectEntityManagerInstance.h:30
Vector3_64 myGridCellSize
the grid cell size
Definition: DtIndirectEntityManager.h:307
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
class to encapsulate moving of instance from one indirect geometry to another in an entity manager/gr...
Definition: DtIndirectEntityManagerInstanceMoveInfo.h:30
Contains the DtIndirectEntityManagerInstance class declaration.
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
std::unordered_map< DtUniqueID, DtIndirectEntityManagerInstanceMoveInfo * > myInstancesBeingMoved
move info for the instances being moved
Definition: DtIndirectEntityManager.h:345
std::unordered_map< std::string, DtArticulatedModelParser::AnimationMap > MapModelNameToMasterMapStateNumberToSequence
Definition: DtIndirectEntityManager.h:336
double myCellPageOutTime
Definition: DtIndirectEntityManager.h:359
std::unordered_map< int, MultiSwitchList > MapStateNumberToMultiSwitchList
Definition: DtArticulatedModelParser.h:47
std::unordered_map< std::string, DtArticulatedModelParser::MapStateNumberToMultiSwitchList > MapModelNameToMasterMapStateNumberToMultiSwitchList
Definition: DtIndirectEntityManager.h:323
std::unordered_map< DtUniqueID, MapSequenceToSequence > MapInstanceSequenceToMasterSequence
Definition: DtIndirectEntityManager.h:340
MapInstanceDofToMasterDof myMapInstanceDofToMasterDof
Definition: DtIndirectEntityManager.h:334
MapModelNameToMasterMapStateNumberToDof myMapModelNameToMasterMapStateNumberToDof
Definition: DtIndirectEntityManager.h:329
A model definition Interaction any number of named parameters, and also can be used to store cached d...
Definition: DtModelDefinition.h:38
boost::signalslib::signal< void(DtModel *, DtUniqueID)> signal_instanceAdded
Emitted when a new instance of a model is added to the entity manager.
Definition: DtIndirectEntityManager.h:250
MapInstanceMultiSwitchesToMasterMultiSwitches myMapInstanceMultiSwitchesToMasterMultiSwitches
Definition: DtIndirectEntityManager.h:326
3 dimensional vector
std::unordered_map< DtUniqueID, MapMultiSwitchesToMultiSwitches > MapInstanceMultiSwitchesToMasterMultiSwitches
Definition: DtIndirectEntityManager.h:321
MapModelNameToMasterMapStateNumberToSequence myMapModelNameToMasterMapStateNumberToSequence
Definition: DtIndirectEntityManager.h:337
std::unordered_map< osgSim::DOFTransform *, osg::ref_ptr< osgSim::DOFTransform > > MapDofToDof
Definition: DtIndirectEntityManager.h:331
std::unordered_map< DtUniqueID, DtIndirectEntityManagerInstance > MapUniqueIdsToEntityManagerInstances
map of unique ids to the corresponding DtIndirectEntityManagerInstances
Definition: DtIndirectEntityManager.h:317
Inherited from DtIndirectGeometry additionally implements: -removal of instances -ability to set/get ...
Definition: DtIndirectEntityGeometry.h:38
std::unordered_map< std::string, AnimationList > AnimationMap
Definition: DtArticulatedModelParser.h:50
Contains makVrv::DtVirtualBaseClass class.
DtSignalConnectionManager myConnections
manager for connections
Definition: DtIndirectEntityManager.h:301
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
\ ::, which allows us to hook into our indirect engine to render using indirect rendering...
Definition: DtIndirectGeometry.h:115
std::unordered_map< osg::Sequence *, osg::ref_ptr< osg::Sequence > > MapSequenceToSequence
Definition: DtIndirectEntityManager.h:339
bool myUpdateBuffersJobsRequiredCurrentFrame
whether gpu buffers for instances are updated immediately
Definition: DtIndirectEntityManager.h:304
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
Contains makVrv::DtIndirectGridCellTime class.
MapInstanceSequenceToMasterSequence myMapInstanceSequenceToMasterSequence
Definition: DtIndirectEntityManager.h:342
MapUniqueIdsToEntityManagerInstances myMapUniqueIdsToEntityManagerInstances
Definition: DtIndirectEntityManager.h:318
MapModelNameToMasterMapStateNumberToMultiSwitchList myMapModelNameToMasterMapStateNumberToMultiSwitchList
Definition: DtIndirectEntityManager.h:324
std::unordered_map< int, 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: DtIndirectEntityManager.h:313
Base class to provide boost signal/slot management.
std::unordered_map< int, PartTransformList > PartMap
Definition: DtArticulatedModelParser.h:44
Contains makVrv::DtArticulatedModelParser class.
MapModelSetToDtIndirectGeometryGrids myMapModelSetToDtIndirectGeometryGrids
Definition: DtIndirectEntityManager.h:314
std::unordered_map< osgSim::MultiSwitch *, osg::ref_ptr< osgSim::MultiSwitch > > MapMultiSwitchesToMultiSwitches
Definition: DtIndirectEntityManager.h:320
A model which owns a single model instance. A DtModel is a managing container for a single DtModelIns...
Definition: DtModel.h:55
Contains makVrv::DtUniqueID type.
Contains DLL export macros.
Vector3_64 myLastObserverLocation
Definition: DtIndirectEntityManager.h:361
std::unordered_map< int, CellIdsWithZeroInstancesUpTime > GridToCellIdsWithZeroInstancesUpTime
map of each grid (model set) to inactive cells in that grid
Definition: DtIndirectEntityManager.h:353
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
std::unordered_map< std::string, DtArticulatedModelParser::PartMap > MapModelNameToMasterMapStateNumberToDof
Definition: DtIndirectEntityManager.h:328
singleton class that acts as a bridge between the
Definition: DtIndirectEntityManager.h:61
DtDe & myDe
reference to de
Definition: DtIndirectEntityManager.h:298
std::unordered_map< DtUniqueID, MapDofToDof > MapInstanceDofToMasterDof
Definition: DtIndirectEntityManager.h:332
Contains the DtIndirectGeometry class declaration.
std::unordered_map< Vector3_int, DtIndirectGridCellTime, DtIndirectCellHasher > CellIdsWithZeroInstancesUpTime
map of inactive cells to their start and current time
Definition: DtIndirectEntityManager.h:350
Contains makVrv::DtIndirectCellHasher class.
boost::mutex myInstancesBeingMovedMutex
Definition: DtIndirectEntityManager.h:347
GridToCellIdsWithZeroInstancesUpTime myGridToCellIdsWithZeroInstancesUpTime
map of each grid (model set) to inactive cells in that grid
Definition: DtIndirectEntityManager.h:356

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)