VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
entityLocationStateComponent.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
9 #include <legionStandardOM/sets/readEntityRepository.hpp>
10 #include <legionStandardOM/sets/writeEntityRepository.hpp>
11 #include <legionStandardOM/sets/readEmbarkedEntityRepository.hpp>
12 #include <legionStandardOM/sets/writeEmbarkedEntityRepository.hpp>
13 
14 #include <tbb/mutex.h>
15 #include <tbb/spin_rw_mutex.h>
16 #include <boost/signals2.hpp>
17 
18 namespace LOM
19 {
20  class ReadEntityRepository;
21 }
22 
23 class Coordinate_System;
24 
25 namespace makVrf
26 {
27  class DtStateDataManager;
29  {
31  : mySpatiallyFrozen(false)
32  , myHostGlobalId(DtUUID::nullUUID())
33  , myStationName(DtStationName::DtOnStation_XYZ)
34  , myNeedsEmbarkCheck(false)
35  {};
36 
38  : myHostGlobalId(orig.myHostGlobalId)
39  , mySpatiallyFrozen(orig.mySpatiallyFrozen)
40  , myThresholder(orig.myThresholder)
41  , myStationName(orig.myStationName)
42  , myNeedsEmbarkCheck(orig.myNeedsEmbarkCheck)
43  {
44  }
45 
47  {
48  myHostGlobalId = rhs.myHostGlobalId;
49  myNeedsEmbarkCheck = rhs.myNeedsEmbarkCheck;
50  mySpatiallyFrozen = rhs.mySpatiallyFrozen;
51  myThresholder = rhs.myThresholder;
52  myStationName = rhs.myStationName;
53 
54  return *this;
55  }
56 
57  DEFINE_ACCESSOR_MUTATOR(DtUUID, hostGlobalId, HostGlobalId)
58  DEFINE_ACCESSOR_MUTATOR(bool, spatiallyFrozen, SpatiallyFrozen)
59  DEFINE_REF_ACCESSORS(DtThresholder, thresholder, Thresholder)
60  DEFINE_ACCESSOR_MUTATOR(DtStationName, stationName, StationName)
61  DEFINE_ACCESSOR_MUTATOR(bool, needsEmbarkCheck, NeedsEmbarkCheck)
62 
63  protected:
64  DtUUID myHostGlobalId;
65  bool mySpatiallyFrozen;
66  DtThresholder myThresholder;
67  DtStationName myStationName;
68  bool myNeedsEmbarkCheck;
69  };
70 
72  {
73  public:
75  : DtLocationStateComponent(storage)
76  {
77  }
78 
79  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(bool, spatiallyFrozen, SpatiallyFrozen)
80  UNDEFINED_RETURNREF_ACCESSORS(DtThresholder, thresholder)
81  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, velocity, Velocity)
82  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, acceleration, Acceleration)
83  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(DtVector, rotationalVelocity, RotationalVelocity)
84  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtDeadReckonTypes, algorithm, Algorithm)
85  UNDEFINED_RETURNVALUE_ACCESSOR(DtDeadReckonTypes, deadReckoningAlgorithm)
86 
87  UNDEFINED_RETURNREF_ACCESSOR(DtVector, worldVelocity)
88  UNDEFINED_RETURNREF_ACCESSOR(DtVector, worldAcceleration)
89  UNDEFINED_RETURNVALUE_ACCESSOR(double, worldSpeed)
90 
91  UNDEFINED_RETURNREF_ACCESSOR(DtVector, localVelocity)
92  UNDEFINED_RETURNREF_ACCESSOR(DtVector, localAcceleration)
93  UNDEFINED_RETURNVALUE_ACCESSOR(double, localSpeed)
94 
95  UNDEFINED_RETURNREF_ACCESSOR(DtVector, relativeVelocity)
96  UNDEFINED_RETURNREF_ACCESSOR(DtVector, relativeAcceleration)
97  UNDEFINED_RETURNVALUE_ACCESSOR(DtVector, bodyVelocity)
98  UNDEFINED_RETURNREF_ACCESSOR(DtVector, parentVelocity)
99  UNDEFINED_RETURNREF_ACCESSOR(DtVector, parentAcceleration)
100  UNDEFINED_RETURNVALUE_ACCESSOR(DtStationName, parentStationName)
101 
102  UNDEFINED_METHOD(void, setRelativeVelocity, const DtVector&)
103  UNDEFINED_METHOD(void, setParentAcceleration, const DtVector&)
104  UNDEFINED_METHOD(void, setParentVelocity, const DtVector&)
105  UNDEFINED_METHOD(void, setParentStationName, DtStationName)
106  UNDEFINED_METHOD(void, setRelativeAcceleration, const DtVector&)
107  UNDEFINED_METHOD(void, setLocalVelocity, const DtVector&)
108  UNDEFINED_METHOD(void, setLocalAcceleration, const DtVector&)
109  UNDEFINED_METHOD(void, setLocalSpeed, double)
110  UNDEFINED_METHOD(void, setWorldVelocity, const DtVector&)
111  UNDEFINED_METHOD(void, setWorldAcceleration, const DtVector&)
112  };
113 
117  {
118  public:
120 
122  : DtEntityLocationStateComponentInterface(storage)
123  {
124  }
125  };
126 
129  {
130  public:
132  virtual ~DtEntityLocationStateComponentNextFrame() override;
133 
135  const DtEntityLocationStateComponentData& frameState() const { return myData; };
137 
138  virtual const DtUUID& hostGlobalId() const override;
139  virtual void setHostGlobalId( const DtUUID& id) override;
140  virtual const int objectAttachMode() const override;
141 
142  virtual void setAlgorithm(const DtDeadReckonTypes& alg) override;
143  virtual const DtDeadReckonTypes algorithm() const override;
144  virtual const DtDeadReckonTypes deadReckoningAlgorithm() const override { return algorithm(); };
145 
146  virtual const bool frozen() const override;
147  virtual void setFrozen(const bool&) override;
148 
152  virtual const DtVector location() const override;
153  virtual void setLocation(const DtVector&) override;
154 
155  virtual const DtVector velocity() const override;
156  virtual void setVelocity(const DtVector&) override;
157 
158  virtual const DtVector acceleration() const override;
159  virtual void setAcceleration(const DtVector&) override;
160 
161  virtual const DtTaitBryan orientation() const override;
162  virtual void setOrientation(const DtTaitBryan&) override;
164 
165  virtual const DtVector& rotationalVelocity() const override;
166  virtual void setRotationalVelocity(const DtVector&) override;
167 
168  virtual const bool locationChanged() const override;
169 
170  virtual const DtVector& worldPosition() const override;
171  virtual const DtVector& relativePosition() const override;
172  virtual const DtVector& parentPosition() const override;
173  virtual const DtStationName parentStationName() const override;
174  virtual const DtVector& localPosition() const override;
175  virtual const DtVector& worldVelocity() const override;
176  virtual const DtVector& localVelocity() const override;
177  virtual const DtVector& worldAcceleration() const override;
178  virtual const DtVector& localAcceleration() const override;
179  virtual const DtTaitBryan& worldOrientation() const override;
180  virtual const DtTaitBryan& topographicOrientation() const override;
181  virtual const DtTaitBryan& parentOrientation() const override;
182  virtual const DtTaitBryan& localOrientation() const override;
183  virtual const DtDcm& worldOrientationMatrix() const override;
184  virtual const bool localPositionIsValid() const override;
185 
186  virtual const bool spatiallyFrozen() const override;
187  virtual void setSpatiallyFrozen(const bool&) override;
188 
189  virtual const DtThresholder& thresholder() const override;
190  virtual DtThresholder& thresholder() override;
191 
192  virtual const double heading() const override;
193  virtual const double pitch() const override;
194  virtual const double roll() const override;
195 
196  virtual const double localSpeed() const override;
197 
198  virtual const double worldSpeed() const override;
199 
200  virtual const DtDcm& parentOrientationMatrix() const override;
201  virtual void setLocalOrientationMatrix(const DtDcm&) override;
202  virtual void setLocalOrientation(const DtTaitBryan&) override;
203  virtual void setLocalOrientationWrtDatabase(const DtTaitBryan&) override;
204 
205  virtual const DtDcm& localOrientationMatrix() const override;
206  virtual const DtTaitBryan& localOrientationWrtDatabase() const override;
207 
208  virtual void setRelativeVelocity(const DtVector&) override;
209  virtual void setRelativeAcceleration(const DtVector&) override;
210  virtual void setParentVelocity(const DtVector&) override;
211  virtual void setParentAcceleration(const DtVector&) override;
212  virtual void setLocalVelocity(const DtVector&) override;
213  virtual void setLocalAcceleration(const DtVector&) override;
214  virtual void setLocalPosition(const DtVector&) override;
215  virtual void setWorldPosition(const DtVector&) override;
216  virtual void setWorldVelocity(const DtVector&) override;
217  virtual void setWorldAcceleration(const DtVector&) override;
218  virtual void setWorldOrientation(const DtTaitBryan&) override;
219  virtual void setParentOrientation(const DtTaitBryan&) override;
220  virtual void setParentPosition(const DtVector&) override;
221  virtual void setParentStationName(DtStationName) override;
222  virtual void setWorldOrientationMatrix(const DtDcm&) override;
223  virtual void setLocalSpeed(double) override;
224  virtual const DtRwVrfKinematicState& kinematicState() const override;
225 
226  virtual const DtVector& relativeVelocity() const override;
227  virtual const DtVector& relativeAcceleration() const override;
228  virtual const DtVector& parentVelocity() const override;
229  virtual const DtVector& parentAcceleration() const override;
230  virtual const DtVector bodyVelocity() const override;
231 
232  void setCoordinateSystem(const Coordinate_System* cs);
233  virtual void setKinematicState(const DtRwVrfKinematicState&) override;
234 
235  virtual void refreshKinematicState(const DtEntityLocationStateComponent&);
236 
238  virtual void makeWritable() override;
239 
241  virtual void makeReadOnly() override;
242  void slot_hostDestroyed();
243 
244  bool needsEmbarkCheck();
245  void clearNeedsEmbarkCheck();
246 
247  protected:
248  LOM::WriteEntityRepository myWriteEntityStateRepository;
251 
252  mutable tbb::spin_rw_mutex myWriteStateMutex;
254  boost::signals2::scoped_connection myHostDeletedConnection;
256  };
257 
260  {
261  public:
263  virtual ~DtEntityLocationStateComponentCurrentFrame() override;
264 
266  const DtEntityLocationStateComponentData& frameState() const { return myData; };
267 
268  virtual const DtUUID& hostGlobalId() const override;
269  virtual const int objectAttachMode() const override;
270 
271  virtual const DtRwVrfKinematicState& kinematicState() const override;
272  virtual const bool frozen() const override;
273  virtual const bool localPositionIsValid() const override;
274 
278  virtual const DtVector location() const override;
279  virtual const DtVector velocity() const override;
280  virtual const DtVector acceleration() const override;
281  virtual const DtTaitBryan orientation() const override;
283 
284  virtual const DtVector& rotationalVelocity() const override;
285  virtual const double heading() const override;
286  virtual const double pitch() const override;
287  virtual const double roll() const override;
288  virtual const double localSpeed() const override;
289  virtual const double worldSpeed() const override;
290 
291  virtual const DtDeadReckonTypes algorithm() const override;
292  virtual const DtDeadReckonTypes deadReckoningAlgorithm() const override { return algorithm(); };
293  virtual const bool spatiallyFrozen() const override;
294  virtual const DtThresholder& thresholder() const override;
295 
296  virtual const DtVector& worldPosition() const override;
297  virtual const DtVector& worldVelocity() const override;
298  virtual const DtVector& worldAcceleration() const override;
299  virtual const DtVector& relativePosition() const override;
300  virtual const DtVector& parentPosition() const override;
301  virtual const DtStationName parentStationName() const override;
302  virtual const DtVector& relativeVelocity() const override;
303  virtual const DtVector& relativeAcceleration() const override;
304  virtual const DtVector& parentVelocity() const override;
305  virtual const DtVector& parentAcceleration() const override;
306  virtual const DtVector bodyVelocity() const override;
307  virtual const DtTaitBryan& worldOrientation() const override;
308  virtual const DtTaitBryan& topographicOrientation() const override;
309  virtual const DtTaitBryan& parentOrientation() const override;
310 
311  virtual const DtDcm& parentOrientationMatrix() const override;
312 
313  virtual const DtVector& localPosition() const override;
314  virtual const DtVector& localVelocity() const override;
315  virtual const DtVector& localAcceleration() const override;
316  virtual const DtTaitBryan& localOrientation() const override;
317 
318  virtual const DtDcm& worldOrientationMatrix() const override;
319  virtual const DtDcm& localOrientationMatrix() const override;
320  virtual const DtTaitBryan& localOrientationWrtDatabase() const override;
321 
322  virtual const bool locationChanged() const override;
323 
324  void setCoordinateSystem(const Coordinate_System* cs);
325  void refreshKinematicState() const;
326 
327  protected:
329 
330  void setLocationChanged(bool);
331  virtual void needsKinematicStateRefresh();
332  virtual void needsEmbarkedCheck();
334  {
335  myData = data;
336  }
337 
338  protected:
339  void handleDataUpdated(const std::vector<UInt32>& attributesUpdated);
340  virtual void updateSpatial();
341  const DtVector _rotationalVelocity() const;
342 
343  protected:
344  LOM::ReadEntityRepository myReadEntityStateRepository;
347 
348  mutable tbb::mutex myKinematicStateMutex;
350  mutable bool myInKinematicStateRefresh = false;
352  unsigned int myCallbackHandle;
356  };
357 
361  {
362  public:
364 
365  bool isDoubleBuffered() { return true; };
366  virtual const DtFrameStateInterface* currentFrameState() const override { return &myCurrentFrameState; }
367  virtual DtFrameStateInterface* nextFrameState() override { return &myNextFrameState; };
368  virtual const DtFrameStateInterface* nextFrameState() const override { return &myNextFrameState; };
369 
371  virtual void setCoordinateSystem(const Coordinate_System*) override;
372 
374  virtual bool forceAdvance() override;
375 
376  virtual void updateDataStorage() override;
377 
378  virtual void updateStateData(DtStateData* sd) override
379  {
380  myCurrentFrameState.updateStateData(sd);
381  myNextFrameState.updateStateData(sd);
382  }
383 
384  virtual void aboutToBeDeleted() override
385  {
387  myCurrentFrameState.aboutToBeDeleted();
388  myNextFrameState.aboutToBeDeleted();
389  }
390 
391  virtual void initializeFromParameters(const DtVrfObjectParameters* params) override;
392 
393  protected:
394  virtual void hostWasDeleted();
395 
396  protected:
401  boost::signals2::scoped_connection myHostWasDeletedConnection;
402  };
403 
407 }
408 
UUID is a unique ID wrapper class.
Definition: uuid.h:59
Instances of DtVrfObjectParameters are the readable/writeable objects that contain the information ne...
Definition: vrfObjectParameters.h:64
#define UNDEFINED_METHOD(Type, Method,...)
Definition: doubleBufferedDataStorage.h:68
LOM::WriteEntityRepository myWriteEntityStateRepository
Definition: entityLocationStateComponent.h:248
DtEntityLocationStateComponentCurrentFrame myCurrentFrameState
Definition: entityLocationStateComponent.h:397
DtRwVrfKinematicState * myKinematicState
Definition: entityLocationStateComponent.h:249
The DtLocationStateComponent interface contains the interface that all DtLocationStateComponents can ...
Definition: locationStateComponent.h:25
bool myFirstVelocitySet
Definition: entityLocationStateComponent.h:255
virtual void aboutToBeDeleted() override
Definition: entityLocationStateComponent.h:384
2) Define the interface class that will be used to represent the next and curent frames. The UNDEFINED_ macros are convenience macros that will define methods that throw exceptions (until they are implemented)
Definition: entityLocationStateComponent.h:116
tbb::mutex myKinematicStateMutex
Definition: entityLocationStateComponent.h:348
Definition: stateComponent.h:269
DtEntityLocationStateComponentData & operator=(const DtEntityLocationStateComponentData &rhs)
Definition: entityLocationStateComponent.h:46
DtEntityLocationStateComponentData myData
Definition: entityLocationStateComponent.h:353
unsigned int myCallbackHandle
Definition: entityLocationStateComponent.h:352
DtEntityLocationStateComponentData()
Definition: entityLocationStateComponent.h:30
DtEntityLocationStateComponentData myData
Definition: entityLocationStateComponent.h:253
virtual const DtFrameStateInterface * nextFrameState() const override
Definition: entityLocationStateComponent.h:368
#define UNDEFINED_RETURNREF_ACCESSORS(ReturnType, Member)
Definition: doubleBufferedDataStorage.h:40
#define UNDEFINED_RETURNVALUE_ACCESSOR(ReturnType, Member)
Definition: doubleBufferedDataStorage.h:31
virtual const DtDeadReckonTypes deadReckoningAlgorithm() const override
Definition: entityLocationStateComponent.h:144
DtStateComponentCreator< DtEntityLocationStateComponentImplementation > DtEntityLocationStateComponentCreator
5) Define the creator. This will need to be registered with the REGISTER_STATE_COMPONENT macro in the...
Definition: entityLocationStateComponent.h:406
#define UNDEFINED_RETURNREF_ACCESSOR(ReturnType, Member)
Definition: doubleBufferedDataStorage.h:34
DtStateDataManager * myStateDataManager
Definition: entityLocationStateComponent.h:346
DtEntityLocationStateComponentData(const DtEntityLocationStateComponentData &orig)
Definition: entityLocationStateComponent.h:37
bool myNeedsEmbarkedCheck
Definition: entityLocationStateComponent.h:355
virtual const DtFrameStateInterface * currentFrameState() const override
Definition: entityLocationStateComponent.h:366
3) Define the current frame class. This will be used for read access.
Definition: entityLocationStateComponent.h:259
LOM::ReadEntityRepository myReadEntityStateRepository
Definition: entityLocationStateComponent.h:344
bool mySpatiallyFrozen
Definition: entityLocationStateComponent.h:65
boost::signals2::scoped_connection myHostDeletedConnection
Definition: entityLocationStateComponent.h:254
DtStateDataManager * myStateDataManager
Definition: entityLocationStateComponent.h:250
DtRwVrfKinematicState * myKinematicState
Definition: entityLocationStateComponent.h:351
Definition: coordSystem.h:54
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:398
bool isDoubleBuffered()
Definition: entityLocationStateComponent.h:365
#define DEFINE_STATE_COMPONENT_TYPE(CreatedComponent)
Definition: stateComponent.h:231
const DtEntityLocationStateComponentData & frameState() const
Current frame state only can access current frame buffers. This ensures thread safety.
Definition: entityLocationStateComponent.h:266
Subclass from this to indicate that this will be a double buffered state component.
Definition: stateComponent.h:384
DtEntityLocationStateComponentInterface(DtStateData *storage)
Definition: entityLocationStateComponent.h:74
virtual void updateStateData(DtStateData *sd) override
Implement to update data storage to the new state data.
Definition: entityLocationStateComponent.h:378
DtThresholder myThresholder
Definition: entityLocationStateComponent.h:66
bool myNeedsKinematicStateRefresh
Definition: entityLocationStateComponent.h:349
tbb::spin_rw_mutex myWriteStateMutex
Definition: entityLocationStateComponent.h:252
#define UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(Type, Member, Set)
Definition: doubleBufferedDataStorage.h:53
virtual void aboutToBeDeleted()
const DtEntityLocationStateComponentData & frameState() const
Next frame access write access. Ensure this is only used in a single thread (i.e.a controller thread)...
Definition: entityLocationStateComponent.h:135
2) Define the next frame class. This will be used for write access.
Definition: entityLocationStateComponent.h:128
DtStateData * myLastAttachedTo
Definition: entityLocationStateComponent.h:400
boost::signals2::scoped_connection myHostWasDeletedConnection
Definition: entityLocationStateComponent.h:401
DtEntityLocationStateComponent * myLastAttachedToLocationStateComponent
Definition: entityLocationStateComponent.h:399
#define UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(Type, Member, Set)
Definition: doubleBufferedDataStorage.h:57
#define DEFINE_REF_ACCESSORS(ReturnType, Method, Member)
Definition: doubleBufferedDataStorage.h:13
Definition: entityLocationStateComponent.h:71
#define DEFINE_ACCESSOR_MUTATOR(ReturnType, Accessor, Mutator)
Definition: doubleBufferedDataStorage.h:23
bool myNeedsEmbarkCheck
Definition: entityLocationStateComponent.h:68
DtEntityLocationStateComponentData & frameState()
Definition: entityLocationStateComponent.h:136
void advanceFrame(const DtEntityLocationStateComponentData &data)
Definition: entityLocationStateComponent.h:333
virtual const DtDeadReckonTypes deadReckoningAlgorithm() const override
Definition: entityLocationStateComponent.h:292
Definition: entityLocationStateComponent.h:28
DtStationName myStationName
Definition: entityLocationStateComponent.h:67
virtual DtFrameStateInterface * nextFrameState() override
Definition: entityLocationStateComponent.h:367
Definition: rwVrfKinematicState.h:26
#define DT_DLL_vrfStateData
This file is used to determine how to build Disable inconsistent dll linkage warning Visual Studio 6...
Definition: vrfStateDataDefines.h:26
bool myLocationChanged
Definition: entityLocationStateComponent.h:345
DtUUID myHostGlobalId
Definition: entityLocationStateComponent.h:64
unsigned int myEmbarkedCallbackHandle
Definition: entityLocationStateComponent.h:354
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:294
4) Define the state component that will contain the wrappers to the next and current frame states tha...
Definition: entityLocationStateComponent.h:360
DtEntityLocationStateComponentNextFrame myNextFrameState
Definition: entityLocationStateComponent.h:398
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73

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)