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 <unordered_map>
18 
19 namespace makVrv
20 {
21  class DtDe;
22  enum class DtModelSetId;
23 
40  {
41  public:
42 
47 
49  virtual ~DtSceneObjectUpdater();
50 
58  virtual void setNextUpdater( DtSceneObjectUpdater* nextUpdater );
59 
65  virtual void setPrevUpdater( DtSceneObjectUpdater* prevUpdater );
66 
76  virtual bool needsUpdate( DtTime tNow );
77 
83  virtual void update( DtTime tNow );
84 
88  virtual void updateAdaptiveTickrate(const DtVector& lastPos, const DtTime& deltaTime);
89 
92  virtual void setVertexToUpdate( unsigned int vertex );
93 
96  virtual void setInputPosition( const DtVector& position );
97 
100  virtual void setInputOrientation( const DtTaitBryan& orientation );
101 
106  virtual void setOutputPosition( const DtVector& position );
107 
109  virtual DtVector outputPosition() const;
110 
115  virtual void setOutputOrientation( const DtTaitBryan& orientation );
116 
118  virtual DtTaitBryan outputOrientation() const;
119 
124  virtual void setOutputPositionAndOrientation(const DtVector& position, const DtTaitBryan& orientation);
125 
128  virtual DtTime lastUpdateTime() const;
129 
138  virtual void setSceneObject(DtSceneObject* sceneObject, bool addToTickableMgrIfHead);
139 
144  virtual void setSceneObject(DtSceneObject* sceneObject);
145 
151  virtual void setAdaptiveTickLodEnabled(bool enabled);
152  virtual bool adaptiveTickLodEnabled() const override;
153 
155  virtual void setLodScaleSpeedFactor(float factor);
157  virtual float lodScaleSpeedFactor() const;
158 
160  virtual void setLodRadiusStart(float ratius);
162  virtual float lodRadiusStart() const;
163 
165  virtual void setLodRadiusEnd(float ratius);
167  virtual float lodRadiusEnd() const;
168 
170  virtual void setNearLodUpdateRate(int nearRate);
172  virtual int nearLodUpdateRate() const;
173 
175  virtual void setFarLodUpdateRate(int maxRate);
177  virtual int farLodUpdateRate() const;
179 
182 
184  {
185  if( mySceneObjectMap.size() )
186  {
187  return mySceneObjectMap.begin()->second;
188  }
189  return nullptr;
190  }
191 
193  inline DtSceneObject* const findActiveSceneObject() const
194  {
195  if( mySceneObjectMap.size() )
196  {
197  return mySceneObjectMap.begin()->second;
198  }
199  return nullptr;
200  }
201 
203  {
204  auto keyVal = mySceneObjectMap.find( modelSet );
205  if( keyVal != mySceneObjectMap.end() )
206  {
207  return keyVal->second;
208  }
209  return nullptr;
210  }
211 
212  inline DtSceneObject* const findSceneObjectForModelSet( DtModelSetId modelSet ) const
213  {
214  auto keyVal = mySceneObjectMap.find( modelSet );
215  if( keyVal != mySceneObjectMap.end() )
216  {
217  return keyVal->second;
218  }
219  return nullptr;
220  }
222 
224  inline DtUniqueID uniqueId() const
225  {
226  return myUniqueId;
227  }
228 
231  {
232  return myNextUpdater;
233  }
234 
237  {
238  return myPrevUpdater;
239  }
240 
244  virtual bool isChainThreadSafe(DtSceneObjectUpdater* firstUpdater);
245 
247  virtual DtSceneObjectUpdater* chainHead();
248 
250  virtual void setIsThreadSafe(bool safe);
251 
255  boost::signalslib::signal< void ( const DtUniqueID& ) > signal_updaterToBeDeleted;
257 
261  virtual void addSceneObjectToUpdate( DtModelSetId modelSet, DtSceneObject* sceneObject, bool addToTickableMgrIfHead=true );
262  virtual void removeSceneObjectToUpdate( DtModelSetId modelSet, DtSceneObject* sceneObject );
263 
267  virtual void addSceneObjectToUpdateAtChainEnd( DtModelSetId modelSet, DtSceneObject* sceneObject, bool addToTickableMgrIfHead = true );
268  virtual void removeSceneObjectToUpdateAtChainEnd( DtModelSetId modelSet, DtSceneObject* sceneObject );
271 
273  virtual void setTickableEnabled( bool enabled ) override;
274  protected:
280  virtual void slot_sceneObjectToBeDeleted( const DtUniqueID& id );
282 
287  virtual void removeThreadSafeChainFromManager(DtSceneObjectUpdater* head);
288 
293  virtual void removeUnThreadSafeChainFromManager(DtSceneObjectUpdater* head);
294 
299  virtual void addThreadSafeChainToManager(DtSceneObjectUpdater* head);
300 
305  virtual void addUnThreadSafeChainToManager(DtSceneObjectUpdater* head);
306 
310  virtual void placeChainOnCorrectTickableList(DtSceneObjectUpdater* head);
311  protected:
312 
315 
318 
320  //DtSceneObject* mySceneObject;
321 
325 
326 
327  // When the class is destructed, the scene object may or may not
328  // exist. Using a separate connection variable makes it possible to
329  // 'disconnect' even if the scene object has been deleted.
330  boost::signalslib::connection mySceneObjectConnection;
331 
334 
337 
339  unsigned int myVertexToUpdate;
340 
343 
346 
348  DtTaitBryan myInputOrientation;
349 
352 
355 
360 
365 
366  using ModelSetToSceneObjectMap = std::unordered_map<DtModelSetId, DtSceneObject*>;
367 
369 
370  using SceneObjectConnectionsMap = std::unordered_map<DtUniqueID,boost::signalslib::connection>;
371 
373 
377  {
380  bool myEnabled;
381 
383  float myScaleSpeedFactor; // 20.0f
384 
386  float myNearUpdateRadius; // 1000.0f
387 
389  float myFarUpdateRadius; // 10000.0f
390 
392  int myFarUpdateRate; // 30
393 
396 
397  };
400  };
401 }
bool myEnabled
is system on for this model
Definition: DtSceneObjectUpdater.h:380
DtUniqueID uniqueId() const
Returns the distributed object id of this updater.
Definition: DtSceneObjectUpdater.h:224
std::unordered_map< DtModelSetId, DtSceneObject * > ModelSetToSceneObjectMap
Definition: DtSceneObjectUpdater.h:366
DtUniqueID myUniqueId
This distributed object&#39;s unique identifier.
Definition: DtSceneObjectUpdater.h:317
DtVector myLastOutputPosition
Last Output position.
Definition: DtSceneObjectUpdater.h:351
float myFarUpdateRadius
the far radius where the update rate is at it&#39;s lowest
Definition: DtSceneObjectUpdater.h:389
Scene Object Updater.
Definition: DtSceneObjectUpdater.h:39
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:202
SceneObjectConnectionsMap mySceneObjectConnectionsMap
Definition: DtSceneObjectUpdater.h:372
bool myPositionDataOutputted
Flag to indicate if setOutputPosition has been called this tick. If a deriving updater hasn&#39;t called ...
Definition: DtSceneObjectUpdater.h:359
int myNearUpdateRate
the update rate at the near radius
Definition: DtSceneObjectUpdater.h:395
DtSceneObject *const findActiveSceneObject() const
const correct version
Definition: DtSceneObjectUpdater.h:193
ModelSetToSceneObjectMap mySceneObjectMap
Definition: DtSceneObjectUpdater.h:368
boost::signalslib::signal< void(const DtUniqueID &) > signal_updaterToBeDeleted
Definition: DtSceneObjectUpdater.h:255
DtDe & myDe
The display engine.
Definition: DtSceneObjectUpdater.h:314
float myNearUpdateRadius
the near radius where the update rate starts to fall off
Definition: DtSceneObjectUpdater.h:386
DtSceneObjectUpdater * myPrevUpdater
The previous updater in the chain (or NULL)
Definition: DtSceneObjectUpdater.h:336
DtVector myLastPositionForAdaptiveTickRate
Used to calculate the velocity for adaptive tick rate.
Definition: DtSceneObjectUpdater.h:342
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
AdaptiveTickRateLODParams myAdaptiveTickRateLODParams
Definition: DtSceneObjectUpdater.h:398
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
DtModelSetId myModelSet
A pointer to the current scene object being updated.
Definition: DtSceneObjectUpdater.h:324
DtSceneObject * findActiveSceneObject()
Find an active scene object.
Definition: DtSceneObjectUpdater.h:183
unsigned int myVertexToUpdate
The default scene object vertex to update.
Definition: DtSceneObjectUpdater.h:339
DtTaitBryan myLastOutputOrientation
Last Output Orientation.
Definition: DtSceneObjectUpdater.h:354
DtSceneObject *const findSceneObjectForModelSet(DtModelSetId modelSet) const
Find an active scene object.
Definition: DtSceneObjectUpdater.h:212
DtTaitBryan myInputOrientation
Input Orientation.
Definition: DtSceneObjectUpdater.h:348
Contains the declaration for makVrv::DtTickable.
DtSceneObjectUpdater * findPrevUpdater() const
Return the previous updater in the updater chain.
Definition: DtSceneObjectUpdater.h:236
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:392
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
bool myOrientationDataOutputted
Flag to indicate if setOutputOrientation has been called this tick. If a deriving updater hasn&#39;t call...
Definition: DtSceneObjectUpdater.h:364
DtVector myInputPosition
Input position.
Definition: DtSceneObjectUpdater.h:345
DtModelSetId
Definition: DtModelSetEnums.h:19
DtSceneObjectUpdater * myNextUpdater
The next updater in the chain (or NULL)
Definition: DtSceneObjectUpdater.h:333
float myScaleSpeedFactor
value that linearly adjusts the range of the lod radii by the velocity
Definition: DtSceneObjectUpdater.h:383
Parameters used when adaptive tick rate is enabled.
Definition: DtSceneObjectUpdater.h:376
Contains makVrv::DtSceneObject class.
std::unordered_map< DtUniqueID, boost::signalslib::connection > SceneObjectConnectionsMap
Definition: DtSceneObjectUpdater.h:370
DtSceneObjectUpdater * findNextUpdater() const
Return the next updater in the updater chain.
Definition: DtSceneObjectUpdater.h:230
boost::signalslib::connection mySceneObjectConnection
Definition: DtSceneObjectUpdater.h:330

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)