VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtSceneObjectUpdater.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2023 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/DtSceneObject.h>
13 #include <vrvCore/DtTickable.h>
14 
15 #include <vrvUtil/signalslib.h>
16 
17 #include <map>
18 #include <unordered_map>
19 
20 namespace makVrv
21 {
22  class DtDe;
23  enum class DtModelSetId;
24 
41  {
42  public:
43 
48 
50  virtual ~DtSceneObjectUpdater();
51 
59  virtual void setNextUpdater( DtSceneObjectUpdater* nextUpdater );
60 
66  virtual void setPrevUpdater( DtSceneObjectUpdater* prevUpdater );
67 
77  virtual bool needsUpdate( DtTime tNow );
78 
84  virtual void update( DtTime tNow );
85 
89  virtual void updateAdaptiveTickrate(const DtVector& lastPos, const DtTime& deltaTime);
90 
93  virtual void setVertexToUpdate( unsigned int vertex );
94 
97  virtual void setInputPosition( const DtVector& position );
98 
101  virtual void setInputOrientation( const DtTaitBryan& orientation );
102 
107  virtual void setOutputPosition( const DtVector& position );
108 
110  virtual DtVector outputPosition() const;
111 
116  virtual void setOutputOrientation( const DtTaitBryan& orientation );
117 
119  virtual DtTaitBryan outputOrientation() const;
120 
125  virtual void setOutputPositionAndOrientation(const DtVector& position, const DtTaitBryan& orientation);
126 
129  virtual DtTime lastUpdateTime() const;
130 
139  virtual void setSceneObject(DtSceneObject* sceneObject, bool addToTickableMgrIfHead);
140 
145  virtual void setSceneObject(DtSceneObject* sceneObject);
146 
152  virtual void setAdaptiveTickLodEnabled(bool enabled);
153  virtual bool adaptiveTickLodEnabled() const override;
154 
156  virtual void setLodScaleSpeedFactor(float factor);
158  virtual float lodScaleSpeedFactor() const;
159 
161  virtual void setLodRadiusStart(float ratius);
163  virtual float lodRadiusStart() const;
164 
166  virtual void setLodRadiusEnd(float ratius);
168  virtual float lodRadiusEnd() const;
169 
171  virtual void setNearLodUpdateRate(int nearRate);
173  virtual int nearLodUpdateRate() const;
174 
176  virtual void setFarLodUpdateRate(int maxRate);
178  virtual int farLodUpdateRate() const;
180 
183 
185  {
186  if( mySceneObjectMap.size() )
187  {
188  return mySceneObjectMap.begin()->second;
189  }
190  return nullptr;
191  }
192 
194  inline DtSceneObject* const findActiveSceneObject() const
195  {
196  if( mySceneObjectMap.size() )
197  {
198  return mySceneObjectMap.begin()->second;
199  }
200  return nullptr;
201  }
202 
204  {
205  auto keyVal = mySceneObjectMap.find( modelSet );
206  if( keyVal != mySceneObjectMap.end() )
207  {
208  return keyVal->second;
209  }
210  return nullptr;
211  }
212 
213  inline DtSceneObject* const findSceneObjectForModelSet( DtModelSetId modelSet ) const
214  {
215  auto keyVal = mySceneObjectMap.find( modelSet );
216  if( keyVal != mySceneObjectMap.end() )
217  {
218  return keyVal->second;
219  }
220  return nullptr;
221  }
223 
225  inline DtUniqueID uniqueId() const
226  {
227  return myUniqueId;
228  }
229 
232  {
233  return myNextUpdater;
234  }
235 
238  {
239  return myPrevUpdater;
240  }
241 
245  virtual bool isChainThreadSafe(DtSceneObjectUpdater* firstUpdater);
246 
248  virtual DtSceneObjectUpdater* chainHead();
249 
251  virtual void setIsThreadSafe(bool safe);
252 
256  boost::signalslib::signal< void ( const DtUniqueID& ) > signal_updaterToBeDeleted;
258 
262  virtual void addSceneObjectToUpdate( DtModelSetId modelSet, DtSceneObject* sceneObject, bool addToTickableMgrIfHead=true );
263  virtual void removeSceneObjectToUpdate( DtModelSetId modelSet, DtSceneObject* sceneObject );
264 
268  virtual void addSceneObjectToUpdateAtChainEnd( DtModelSetId modelSet, DtSceneObject* sceneObject, bool addToTickableMgrIfHead = true );
269  virtual void removeSceneObjectToUpdateAtChainEnd( DtModelSetId modelSet, DtSceneObject* sceneObject );
272 
274  virtual void setTickableEnabled( bool enabled ) override;
275  protected:
281  virtual void slot_sceneObjectToBeDeleted( const DtUniqueID& id );
283 
288  virtual void removeThreadSafeChainFromManager(DtSceneObjectUpdater* head);
289 
294  virtual void removeUnThreadSafeChainFromManager(DtSceneObjectUpdater* head);
295 
300  virtual void addThreadSafeChainToManager(DtSceneObjectUpdater* head);
301 
306  virtual void addUnThreadSafeChainToManager(DtSceneObjectUpdater* head);
307 
311  virtual void placeChainOnCorrectTickableList(DtSceneObjectUpdater* head);
312  protected:
313 
316 
319 
321  //DtSceneObject* mySceneObject;
322 
326 
327 
328  // When the class is destructed, the scene object may or may not
329  // exist. Using a separate connection variable makes it possible to
330  // 'disconnect' even if the scene object has been deleted.
331  boost::signalslib::connection mySceneObjectConnection;
332 
335 
338 
340  unsigned int myVertexToUpdate;
341 
344 
346  DtVector myInputPosition;
347 
349  DtTaitBryan myInputOrientation;
350 
353 
356 
361 
366 
367  using ModelSetToSceneObjectMap = std::map<DtModelSetId, DtSceneObject*>;
368 
370 
371  using SceneObjectConnectionsMap = std::unordered_map<DtUniqueID,boost::signalslib::connection>;
372 
374 
378  {
381  bool myEnabled;
382 
384  float myScaleSpeedFactor; // 20.0f
385 
387  float myNearUpdateRadius; // 1000.0f
388 
390  float myFarUpdateRadius; // 10000.0f
391 
393  int myFarUpdateRate; // 30
394 
397 
398  };
401  };
402 }
std::map< DtModelSetId, DtSceneObject * > ModelSetToSceneObjectMap
Definition: DtSceneObjectUpdater.h:367
bool myEnabled
is system on for this model
Definition: DtSceneObjectUpdater.h:381
DtUniqueID uniqueId() const
Returns the distributed object id of this updater.
Definition: DtSceneObjectUpdater.h:225
DtUniqueID myUniqueId
This distributed object&#39;s unique identifier.
Definition: DtSceneObjectUpdater.h:318
DtVector myLastOutputPosition
Last Output position.
Definition: DtSceneObjectUpdater.h:352
float myFarUpdateRadius
the far radius where the update rate is at it&#39;s lowest
Definition: DtSceneObjectUpdater.h:390
Scene Object Updater.
Definition: DtSceneObjectUpdater.h:40
An abstract base class for objects that require updates. This object automatically adds itself to a D...
Definition: DtTickable.h:26
DtSceneObject * findSceneObjectForModelSet(DtModelSetId modelSet)
Find an active scene object.
Definition: DtSceneObjectUpdater.h:203
SceneObjectConnectionsMap mySceneObjectConnectionsMap
Definition: DtSceneObjectUpdater.h:373
bool myPositionDataOutputted
Flag to indicate if setOutputPosition has been called this tick. If a deriving updater hasn&#39;t called ...
Definition: DtSceneObjectUpdater.h:360
int myNearUpdateRate
the update rate at the near radius
Definition: DtSceneObjectUpdater.h:396
DtSceneObject *const findActiveSceneObject() const
const correct version
Definition: DtSceneObjectUpdater.h:194
ModelSetToSceneObjectMap mySceneObjectMap
Definition: DtSceneObjectUpdater.h:369
boost::signalslib::signal< void(const DtUniqueID &) > signal_updaterToBeDeleted
Definition: DtSceneObjectUpdater.h:256
DtDe & myDe
The display engine.
Definition: DtSceneObjectUpdater.h:315
float myNearUpdateRadius
the near radius where the update rate starts to fall off
Definition: DtSceneObjectUpdater.h:387
DtSceneObjectUpdater * myPrevUpdater
The previous updater in the chain (or NULL)
Definition: DtSceneObjectUpdater.h:337
DtVector myLastPositionForAdaptiveTickRate
Used to calculate the velocity for adaptive tick rate.
Definition: DtSceneObjectUpdater.h:343
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
AdaptiveTickRateLODParams myAdaptiveTickRateLODParams
Definition: DtSceneObjectUpdater.h:399
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
DtModelSetId myModelSet
A pointer to the current scene object being updated.
Definition: DtSceneObjectUpdater.h:325
DtSceneObject * findActiveSceneObject()
Find an active scene object.
Definition: DtSceneObjectUpdater.h:184
unsigned int myVertexToUpdate
The default scene object vertex to update.
Definition: DtSceneObjectUpdater.h:340
DtTaitBryan myLastOutputOrientation
Last Output Orientation.
Definition: DtSceneObjectUpdater.h:355
DtSceneObject *const findSceneObjectForModelSet(DtModelSetId modelSet) const
Find an active scene object.
Definition: DtSceneObjectUpdater.h:213
DtTaitBryan myInputOrientation
Input Orientation.
Definition: DtSceneObjectUpdater.h:349
Contains the declaration for makVrv::DtTickable.
DtSceneObjectUpdater * findPrevUpdater() const
Return the previous updater in the updater chain.
Definition: DtSceneObjectUpdater.h:237
A DtSceneObject represents an object that can be positioned in the scene by (possibly) attaching it t...
Definition: DtSceneObject.h:44
int myFarUpdateRate
the update rate at the far radius
Definition: DtSceneObjectUpdater.h:393
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
bool myOrientationDataOutputted
Flag to indicate if setOutputOrientation has been called this tick. If a deriving updater hasn&#39;t call...
Definition: DtSceneObjectUpdater.h:365
DtVector myInputPosition
Input position.
Definition: DtSceneObjectUpdater.h:346
DtModelSetId
Definition: DtModelSetEnums.h:19
DtSceneObjectUpdater * myNextUpdater
The next updater in the chain (or NULL)
Definition: DtSceneObjectUpdater.h:334
float myScaleSpeedFactor
value that linearly adjusts the range of the lod radii by the velocity
Definition: DtSceneObjectUpdater.h:384
Parameters used when adaptive tick rate is enabled.
Definition: DtSceneObjectUpdater.h:377
Contains makVrv::DtSceneObject class.
std::unordered_map< DtUniqueID, boost::signalslib::connection > SceneObjectConnectionsMap
Definition: DtSceneObjectUpdater.h:371
DtSceneObjectUpdater * findNextUpdater() const
Return the next updater in the updater chain.
Definition: DtSceneObjectUpdater.h:231
boost::signalslib::connection mySceneObjectConnection
Definition: DtSceneObjectUpdater.h:331

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)