28 #include <matrix/vlVector.h>
29 #include <matrix/vlTaitBryan.h>
31 #include <boost/thread.hpp>
33 #include <unordered_map>
35 #include <unordered_set>
37 #include <tbb/concurrent_hash_map.h>
46 class DtIndirectModelsContainer;
47 class DtModelDefinition;
48 class DtOsgModelInstance;
49 class DtIndirectGeometryGrid;
51 class DtIndirectEntityManagerInstanceMoveInfo;
52 class DtIndirectEntityLimitTextureStrategy;
54 class DtIndirectModelMasterMappings;
73 int myLightPointGroupId = 0;
74 std::string myLightPointGroupName =
"";
82 static void registerInstance(
DtDe& de);
108 ,
DtModelSetId modelSet,
float modelScale,
float modelRadius
109 ,
bool daylightControlled,
bool mapDofsSwitchesSequences
112 ,
const std::string& trackName);
119 ,
float modelScale,
float modelRadius
120 ,
bool daylightControlled,
bool mapDofsSwitchesSequences
121 ,
int lightPointGroupId);
124 virtual bool hasInstance(
DtUniqueID uniqueId)
const;
127 virtual void removeInstance(
DtUniqueID uniqueID);
130 virtual int numInstances(
void)
const;
141 virtual void mapMultiSwitches(
DtUniqueID uniqueID
145 virtual void unMapMultiSwitches(
DtUniqueID uniqueID);
151 virtual void unMapSequences(
DtUniqueID uniqueID);
160 virtual void setMultiSwitchActiveSwitchSet(
DtUniqueID id, osgSim::MultiSwitch* multiSwitchOfInstance);
163 virtual void setSequenceUpdate(
DtUniqueID uniqueID, osg::Sequence* dof);
166 virtual void setUvOffsetUpdate(
DtUniqueID uniqueID,
const std::string& annotation,
167 float uOffset,
float vOffset);
170 virtual void scrollUvTextures(
DtUniqueID uniqueID,
const std::tuple<float, float, float>& uvspeeds);
173 virtual void setDofUpdate(
DtUniqueID uniqueID, osgSim::DOFTransform* dof);
176 virtual void setDofTranslation(
DtUniqueID uniqueID, osgSim::DOFTransform* dof
181 virtual void setDofOrientation(
DtUniqueID uniqueID, osgSim::DOFTransform* dof
184 ,
int animationFlags);
187 virtual void setDofOrientation(
DtUniqueID uniqueID, osgSim::DOFTransform* dof
190 ,
int animationFlags);
194 void slot_atcGlobalModelEnableChanged();
197 virtual void setPositionAndOrientation(
DtUniqueID uniqueId
198 ,
const DtVector& position,
const DtTaitBryan& orientation
199 ,
const DtVector& positionOffset,
const DtTaitBryan& orientationOffset);
208 virtual void setVisible(
DtUniqueID uniqueId,
bool visible);
211 virtual void setLightPointGroupId(
DtUniqueID uniqueId,
int groupId);
214 virtual void setLightPointMaxDistance(
DtUniqueID uniqueId,
float maxDistance);
217 virtual void setCellPageOutTime(
double val);
223 virtual double cellPageOutTime(
void)
const;
229 virtual void tick(
void)
override;
234 virtual void slot_postTick();
238 virtual void slot_postInit();
241 virtual void excludeTextureFromLimits(
const std::string& textureFileAbolutePath);
244 virtual void excludeModelDefinitionFromLimits(
const std::string& modelDefinition);
251 virtual bool isCopyingData(
void)
const;
255 virtual bool areRegisteredModelTextureVariants(
DtModelSetId modelSet,
const std::string& fileName)
const;
258 ,
const std::vector<std::string>& variantPaths);
260 virtual void setModelTextureVariant(
DtUniqueID uniqueId,
const std::string& variant);
280 virtual osgSim::DOFTransform* findMasterDof(
DtUniqueID uniqueID, osgSim::DOFTransform* dof)
const;
286 virtual void calculateAndSetInstanceMatrixTransform(
const DtVector& position
287 ,
const DtTaitBryan& orientation,
const DtVector& positionOffset,
const DtTaitBryan& orientationOffset
293 virtual void tickEntityMoves(
void);
296 virtual void tickPaging(
void);
299 virtual bool instanceIsBeingMovedTo(
const Vector3_int& cellId);
302 void setupRootNodes();
306 virtual void setupReductionExcludeTextures();
309 virtual void updateStats();
314 virtual bool modelSetDisabled(
DtModelSetId modelSet)
const;
317 virtual void setAlpha2Coverage(osg::Node* node,
bool on);
320 virtual void clearMasterMappingsMap(
void);
323 virtual bool parseNodeAndRegisterMasterMappings(osg::Node* modelNodeMaster,
const std::string& modelName);
350 typedef std::unordered_map< osgSim::DOFTransform*, osg::ref_ptr<osgSim::DOFTransform> >
MapDofToDof;
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 'cells' 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
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'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
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
IndirectEntityGeometryMap myIndirectEntityGeometryMap
Definition: DtOsgIndirectEntityManager.h:376