VR-Forces 4.10 Class Documentation
 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) 2021 VT-MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvOsg/vrvOsg.h>
13 
18 
23 
24 #include <vrvCore/DtUniqueID.h>
25 
26 #include <matrix/vlVector.h>
27 #include <matrix/vlTaitBryan.h>
28 
29 #include <unordered_map>
30 
31 #include <boost/thread.hpp>
32 
33 namespace osg
34 {
35  class StateSet;
36 }
37 
38 namespace makVrv
39 {
40  class DtIndirectModelsContainer;
41  class DtModelDefinition;
42  class DtOsgModelInstance;
43  class DtIndirectGeometryGrid;
44 
45  class DtIndirectEntityManagerInstanceMoveInfo;
46 
60  {
61  public:
63  virtual ~DtIndirectEntityManager();
64 
66  static DtIndirectEntityManager& instance(DtDe& de);
67 
68  protected:
71 
72  private:
74  DtIndirectEntityManager() = delete;
75 
78 
79 
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, float uOffset, float vOffset);
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 
166  virtual void setDofOrientation(DtUniqueID uniqueID, osgSim::DOFTransform* dof
167  , const Vector3_64& hprVel
168  , bool forceUpdate);
169 
172  void slot_atcGlobalModelEnableChanged();
173 
175  virtual void setPositionAndOrientation(DtUniqueID uniqueId
176  , const DtVector& position, const DtTaitBryan& orientation
177  , const DtVector& positionOffset, const DtTaitBryan& orientationOffset);
178 
180  virtual void setColor(DtUniqueID uniqueId, const Vector4_32& color);
181 
183  virtual void setOtherData0(DtUniqueID uniqueId, const Vector4_32& data);
184 
186  virtual void setVisible(DtUniqueID uniqueId, bool visible);
187 
189  virtual void setLightPointMaxDistance(DtUniqueID uniqueId, float maxDistance);
190 
192  virtual void setTextureLoadTimeSlicePeriod(float period);
200  virtual float textureLoadTimeSlicePeriod(void) const;
202 
204  virtual void setUpdateBuffersJobsRequiredCurrentFrame(bool requiredCurrentFrame);
212  virtual bool updateBuffersJobsRequiredCurrentFrame(void) const;
214 
216  virtual void setCellPageOutTime(double val);
222  virtual double cellPageOutTime(void) const;
224 
228  virtual void slot_postTick();
229 
232 
234  boost::signalslib::signal<void(DtModel*, DtUniqueID)> signal_instanceAdded;
235 
237 
238  protected:
239 
242  virtual DtIndirectEntityManagerInstanceMoveInfo* createMoveInfoIfNecessary(const DtVector& position
243  , DtIndirectEntityManagerInstance& currentEntityManagerInstance
244  , DtUniqueID uniqueId);
245 
247  virtual void configureIndirectGeometry(DtIndirectGeometry* indirectGeometry);
248 
250  virtual osgSim::DOFTransform* findMasterDof(DtUniqueID uniqueID, osgSim::DOFTransform* dof) const;
251 
253  virtual DtIndirectGeometry* findIndirectGeometryAndInstanceId(DtUniqueID uniqueID, int& instanceId) const;
254 
256  virtual void calculateAndSetInstanceMatrixTransform(const DtVector &position
257  , const DtTaitBryan& orientation, const DtVector &positionOffset, const DtTaitBryan& orientationOffset
258  , DtIndirectGeometry* indirectGeometry, int instanceId);
259 
261  virtual void tickEntityMoves(void);
262 
264  virtual void tickPaging(void);
265 
267  virtual bool instanceIsBeingMovedTo(const Vector3_int& cellId);
268 
270  void setupRootNodes();
271 
272  protected:
273 
276 
279 
282 
287  typedef std::unordered_map<int, DtIndirectGeometryGrid* > MapModelSetToDtIndirectGeometryGrids;
289 
291  typedef std::unordered_map<DtUniqueID, DtIndirectEntityManagerInstance> MapUniqueIdsToEntityManagerInstances;
293 
294  typedef std::unordered_map< osgSim::MultiSwitch*, osg::ref_ptr<osgSim::MultiSwitch> > MapMultiSwitchesToMultiSwitches;
295  typedef std::unordered_map<DtUniqueID, MapMultiSwitchesToMultiSwitches > MapInstanceMultiSwitchesToMasterMultiSwitches;
296 
297  typedef std::unordered_map<std::string, DtArticulatedModelParser::MapStateNumberToMultiSwitchList> MapModelNameToMasterMapStateNumberToMultiSwitchList;
299 
301 
302  typedef std::unordered_map<std::string, DtArticulatedModelParser::PartMap> MapModelNameToMasterMapStateNumberToDof;
304 
305  typedef std::unordered_map< osgSim::DOFTransform*, osg::ref_ptr<osgSim::DOFTransform> > MapDofToDof;
306  typedef std::unordered_map<DtUniqueID, MapDofToDof > MapInstanceDofToMasterDof;
307 
309 
310  typedef std::unordered_map<std::string, DtArticulatedModelParser::AnimationMap> MapModelNameToMasterMapStateNumberToSequence;
312 
313  typedef std::unordered_map< osg::Sequence*, osg::ref_ptr<osg::Sequence> > MapSequenceToSequence;
314  typedef std::unordered_map<DtUniqueID, MapSequenceToSequence > MapInstanceSequenceToMasterSequence;
315 
317 
319  std::unordered_map<DtUniqueID, DtIndirectEntityManagerInstanceMoveInfo*> myInstancesBeingMoved;
320 
322 
325  {
326  public:
330  virtual ~StartAndCurrentTime();
331  public:
333  virtual void update(double simulationTime);
334 
336  virtual double elapsedTime(void) const;
337  protected:
338  double myStartTime;
340  };
341 
343  typedef std::unordered_map<Vector3_int, StartAndCurrentTime, DtIndirectCellHasher> CellIdsWithZeroInstancesUpTime;
344 
346  typedef std::unordered_map<int, CellIdsWithZeroInstancesUpTime> GridToCellIdsWithZeroInstancesUpTime;
347 
350 
351  // The time after which inactive cells are removed
353 
354  };
355 }
internal structure for mapping a DtOsgArticulatedModel/DtOsgSimpleModel object to a corresponding ins...
Definition: DtIndirectEntityManagerInstance.h:29
Virtual base class.
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:319
double myCurrentTime
Definition: DtIndirectEntityManager.h:339
std::unordered_map< std::string, DtArticulatedModelParser::AnimationMap > MapModelNameToMasterMapStateNumberToSequence
Definition: DtIndirectEntityManager.h:310
double myCellPageOutTime
Definition: DtIndirectEntityManager.h:352
std::unordered_map< int, MultiSwitchList > MapStateNumberToMultiSwitchList
Definition: DtArticulatedModelParser.h:47
std::unordered_map< std::string, DtArticulatedModelParser::MapStateNumberToMultiSwitchList > MapModelNameToMasterMapStateNumberToMultiSwitchList
Definition: DtIndirectEntityManager.h:297
std::unordered_map< DtUniqueID, MapSequenceToSequence > MapInstanceSequenceToMasterSequence
Definition: DtIndirectEntityManager.h:314
MapInstanceDofToMasterDof myMapInstanceDofToMasterDof
Definition: DtIndirectEntityManager.h:308
MapModelNameToMasterMapStateNumberToDof myMapModelNameToMasterMapStateNumberToDof
Definition: DtIndirectEntityManager.h:303
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:234
MapInstanceMultiSwitchesToMasterMultiSwitches myMapInstanceMultiSwitchesToMasterMultiSwitches
Definition: DtIndirectEntityManager.h:300
3 dimensional vector
std::unordered_map< DtUniqueID, MapMultiSwitchesToMultiSwitches > MapInstanceMultiSwitchesToMasterMultiSwitches
Definition: DtIndirectEntityManager.h:295
MapModelNameToMasterMapStateNumberToSequence myMapModelNameToMasterMapStateNumberToSequence
Definition: DtIndirectEntityManager.h:311
std::unordered_map< osgSim::DOFTransform *, osg::ref_ptr< osgSim::DOFTransform > > MapDofToDof
Definition: DtIndirectEntityManager.h:305
std::unordered_map< DtUniqueID, DtIndirectEntityManagerInstance > MapUniqueIdsToEntityManagerInstances
map of unique ids to the corresponding DtIndirectEntityManagerInstances
Definition: DtIndirectEntityManager.h:291
std::unordered_map< Vector3_int, StartAndCurrentTime, DtIndirectCellHasher > CellIdsWithZeroInstancesUpTime
map of inactive cells to their start and current time
Definition: DtIndirectEntityManager.h:343
std::unordered_map< std::string, AnimationList > AnimationMap
Definition: DtArticulatedModelParser.h:50
Contains makVrv::DtVirtualBaseClass class.
DtSignalConnectionManager myConnections
manager for connections
Definition: DtIndirectEntityManager.h:278
Axis Aligned Bounding Box class.
The base class for simple OSG based model instances.
Definition: DtOsgModelInstance.h:76
\ ::, which allows us to hook into our indirect engine to render using indirect rendering...
Definition: DtIndirectGeometry.h:102
std::unordered_map< osg::Sequence *, osg::ref_ptr< osg::Sequence > > MapSequenceToSequence
Definition: DtIndirectEntityManager.h:313
double myStartTime
Definition: DtIndirectEntityManager.h:338
bool myUpdateBuffersJobsRequiredCurrentFrame
whether gpu buffers for instances are updated immediately
Definition: DtIndirectEntityManager.h:281
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
MapInstanceSequenceToMasterSequence myMapInstanceSequenceToMasterSequence
Definition: DtIndirectEntityManager.h:316
MapUniqueIdsToEntityManagerInstances myMapUniqueIdsToEntityManagerInstances
Definition: DtIndirectEntityManager.h:292
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
MapModelNameToMasterMapStateNumberToMultiSwitchList myMapModelNameToMasterMapStateNumberToMultiSwitchList
Definition: DtIndirectEntityManager.h:298
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:287
Base class to provide boost signal/slot management.
std::unordered_map< int, PartTransformList > PartMap
Definition: DtArticulatedModelParser.h:44
Contains makVrv::DtArticulatedModelParser class.
container for start and current times (for paging)
Definition: DtIndirectEntityManager.h:324
MapModelSetToDtIndirectGeometryGrids myMapModelSetToDtIndirectGeometryGrids
Definition: DtIndirectEntityManager.h:288
std::unordered_map< osgSim::MultiSwitch *, osg::ref_ptr< osgSim::MultiSwitch > > MapMultiSwitchesToMultiSwitches
Definition: DtIndirectEntityManager.h:294
A model which owns a single model instance.
Definition: DtModel.h:55
Contains makVrv::DtUniqueID type.
Contains DLL export macros.
std::unordered_map< int, CellIdsWithZeroInstancesUpTime > GridToCellIdsWithZeroInstancesUpTime
map of each grid (model set) to inactive cells in that grid
Definition: DtIndirectEntityManager.h:346
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
std::unordered_map< std::string, DtArticulatedModelParser::PartMap > MapModelNameToMasterMapStateNumberToDof
Definition: DtIndirectEntityManager.h:302
singleton class that acts as a bridge between the
Definition: DtIndirectEntityManager.h:59
DtDe & myDe
reference to de
Definition: DtIndirectEntityManager.h:275
std::unordered_map< DtUniqueID, MapDofToDof > MapInstanceDofToMasterDof
Definition: DtIndirectEntityManager.h:306
Contains the DtIndirectGeometry class declaration.
Contains makVrv::DtIndirectCellHasher class.
boost::mutex myInstancesBeingMovedMutex
Definition: DtIndirectEntityManager.h:321
GridToCellIdsWithZeroInstancesUpTime myGridToCellIdsWithZeroInstancesUpTime
map of each grid (model set) to inactive cells in that grid
Definition: DtIndirectEntityManager.h:349

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)