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 setDofAnimationFlags(
DtUniqueID uniqueID, osgSim::DOFTransform* dof,
int animationFlags);
179 virtual void setDofTranslation(
DtUniqueID uniqueID, osgSim::DOFTransform* dof
184 virtual void setDofOrientation(
DtUniqueID uniqueID, osgSim::DOFTransform* dof
187 ,
int animationFlags);
190 virtual void setDofOrientation(
DtUniqueID uniqueID, osgSim::DOFTransform* dof
193 ,
int animationFlags);
197 void slot_atcGlobalModelEnableChanged();
200 virtual void setPositionAndOrientation(
DtUniqueID uniqueId
201 ,
const DtVector& position,
const DtTaitBryan& orientation
202 ,
const DtVector& positionOffset,
const DtTaitBryan& orientationOffset);
211 virtual void setVisible(
DtUniqueID uniqueId,
bool visible);
214 virtual void setLightPointGroupId(
DtUniqueID uniqueId,
int groupId);
217 virtual void setLightPointMaxDistance(
DtUniqueID uniqueId,
float maxDistance);
220 virtual void setCellPageOutTime(
double val);
226 virtual double cellPageOutTime(
void)
const;
232 virtual void tick(
void)
override;
238 virtual void slot_releaseResources();
243 virtual void slot_postTick();
247 virtual void slot_postInit();
250 virtual void excludeTextureFromLimits(
const std::string& textureFileAbolutePath);
253 virtual void excludeModelDefinitionFromLimits(
const std::string& modelDefinition);
260 virtual bool isCopyingData(
void)
const;
264 virtual bool areRegisteredModelTextureVariants(
DtModelSetId modelSet,
const std::string& fileName)
const;
267 ,
const std::vector<std::string>& variantPaths);
269 virtual void setModelTextureVariant(
DtUniqueID uniqueId,
const std::string& variant);
289 virtual osgSim::DOFTransform* findMasterDof(
DtUniqueID uniqueID, osgSim::DOFTransform* dof)
const;
295 virtual void calculateAndSetInstanceMatrixTransform(
const DtVector& position
296 ,
const DtTaitBryan& orientation,
const DtVector& positionOffset,
const DtTaitBryan& orientationOffset
300 virtual void reset();
304 virtual void tickEntityMoves(
void);
307 virtual void tickPaging(
void);
310 virtual bool instanceIsBeingMovedTo(
const Vector3_int& cellId);
313 void setupRootNodes();
317 virtual void setupReductionExcludeTextures();
320 virtual void updateStats();
325 virtual bool modelSetDisabled(
DtModelSetId modelSet)
const;
328 virtual void setAlpha2Coverage(osg::Node* node,
bool on);
331 virtual void clearMasterMappingsMap(
void);
334 virtual bool parseNodeAndRegisterMasterMappings(osg::Node* modelNodeMaster,
const std::string& modelName);
361 typedef std::unordered_map< osgSim::DOFTransform*, osg::ref_ptr<osgSim::DOFTransform> >
MapDofToDof;
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 'cells' 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
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'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
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
IndirectEntityGeometryMap myIndirectEntityGeometryMap
Definition: DtOsgIndirectEntityManager.h:386