VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
simObjectStateRepository.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2019 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 #pragma once
6 
10 
13 
18 #include <vlutil/vlString.h>
19 #include <vlpi/disEnums.h>
21 #include <vlutil/vlString.h>
24 #include "vrfutil/rwForceType.h"
25 #include <readerWriter/rwString.h>
26 #include <vrfutil/rwUUID.h>
32 #include <tbb/spin_rw_mutex.h>
33 #include <boost/signals2.hpp>
34 #include <vrfutil/vrf4XAPI.h>
36 
37 #include <memory>
38 
39 class DtLocalObject;
43 class DtSimObject;
45 
47 
48 namespace makVrf
49 {
50  class DtVrfGeometryStateComponent;
51 }
52 
58 
60 {
61 public:
63  const DtString& rwName = DtString::nullString(), DtReaderWriterRegistry* parentRegistry = 0);
64 
65 private:
70 
71 public:
72 
73  virtual ~DtSimObjectStateRepository();
74 
76  virtual DtString type() const;
77 
79  virtual const int objectStateRepositorySubType() const;
80 
82  virtual bool init();
83 
84  virtual bool isEmbarkedOn(const DtUUID& parent) const;
85 
88  virtual bool attachToParent(const DtUUID& parent);
89 
95  virtual bool attachToParent(DtSimObjectReference parent);
96 
97  virtual void detachFromParent();
98 
100  template <typename T_SRType>
101  const T_SRType* as() const
102  {
103  return dynamic_cast<const T_SRType*>(this);
104  }
105 
106  template <typename T_SRType>
107  T_SRType* as()
108  {
109  return dynamic_cast<T_SRType*>(this);
110  }
111 
113  virtual void createLegacyRWData();
114  virtual void cleanupLegacyRWData();
115  virtual void restoreFromLegacyRWData();
116  virtual void setToLegacyRWData();
117 
119  virtual void prePutSelf() override;
120 
122  virtual void postPutSelf() override;
123 
125  virtual void preGetSelf() override;
126 
128  virtual void postGetSelf() override;
129 
132  virtual void processSimObjectDeleted(const DtSimObject*);
133 
134  virtual void attachedParentUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
135 
138  virtual bool embarkOnParent(const DtUUID& parent);
139 
141  virtual bool setHostGlobalId(const DtUUID&);
142 
144  virtual double totalMass() const;
145 
146  DtSimObjectReference vrfObject() const;
147  DtLocalObject* nextFrameVrfObject();
148 
149 protected:
150  virtual void processCompleteAttachment(const DtSimObject*);
151 
152 public:
153 
154  virtual void prepareForHandoff();
155 
156  const Coordinate_System* coordinateSystem() const;
157 
159  virtual void toBeRemoved();
160 
161 protected:
164 
168 
169  boost::signals2::scoped_connection myUUIDChangedConnection;
170  boost::signals2::scoped_connection myLocalObjectAddedConnection;
171  boost::signals2::scoped_connection myLocalObjectDeletedConnection;
172 
173 public:
176  VRF4API_METHOD bool isClosedFigure() const;
177  VRF4API_METHOD bool isEllipsoid() const;
178  VRF4API_METHOD bool isProjection() const;
179 
180  VRF4API_METHOD virtual const DtUUID attachedToRepository() const;
181  VRF4API_METHOD virtual DtUUID attachedToRepository();
182 
183  VRF4API_METHOD bool isSpatiallyFrozen() const;
184 
185  VRF4API_METHOD virtual bool leftOf(const DtVector& localVector) const;
186  VRF4API_METHOD virtual bool inside(const DtVector& point) const;
187 
190  VRF4API_METHOD virtual void setIsVrfSimulatedObject(bool b);
191 
192  VRF4API_METHOD bool isVrfSimulatedObject() const;
193 
198 
199  VRF4API_METHOD virtual DtForceType forceType();
200  VRF4API_METHOD virtual const DtForceType forceType() const;
202 
203  VRF4API_METHOD void setOverlayParent(const DtString&);
204  VRF4API_METHOD const DtString overlayParent() const;
205 
207 
208  VRF4API_METHOD DtReal currentHeading() const;
209  VRF4API_METHOD DtReal heading() const;
211 
213 
214  VRF4API_METHOD DtReal currentPitch() const;
215  VRF4API_METHOD DtReal pitch() const;
217 
219 
220  VRF4API_METHOD DtReal currentRoll() const;
221  VRF4API_METHOD DtReal roll() const;
223 
224  VRF4API_METHOD bool isFrozen();
225  VRF4API_METHOD bool isFrozen() const;
226 
227  VRF4API_METHOD const DtSimKinematicState* kinematicState() const { return this; };
228  VRF4API_METHOD const DtVrfSimKinematicState* vrfKinematicState() const { return this; };
229 
232 
233  VRF4API_METHOD operator const makVrf::DtRwSimKinematicState () const;
234  VRF4API_METHOD operator const makVrf::DtRwVrfKinematicState () const;
235 
236  VRF4API_METHOD virtual void removeVertex(int iIndex);
237  VRF4API_METHOD virtual void addLocalVertex(const DtVector& vertex);
238  VRF4API_METHOD virtual void addLocalVertex(const DtVector& vertex, DtVector& newGeometricCenter);
239  VRF4API_METHOD virtual void setLocalVertices(const DtLocalVertexList& vertices, DtVector& newGeometricCenter);
240  VRF4API_METHOD virtual void setLocalVertices(const DtList& vertices, DtVector& newGeometricCenter);
241  VRF4API_METHOD virtual const DtLocalVertexList& localVertices() const;
242 
244  VRF4API_METHOD virtual bool localPositionIsValid() const;
245 
246  VRF4API_METHOD virtual void addWorldVertex(const DtVector& vertex, DtVector& newGeometricCenter);
247  VRF4API_METHOD virtual void setWorldVertices(const DtVertexList& vertices, DtVector& newGeometricCenter);
248  VRF4API_METHOD virtual void setWorldVertices(const DtList& vertices, DtVector& newGeometricCenter);
249  VRF4API_METHOD const DtVertexList& worldVertices() const;
250 
254  VRF4API_METHOD virtual void setRelativeVertices(const DtLocalVertexList& vertices);
255  VRF4API_METHOD virtual const DtLocalVertexList& relativeVertices() const;
257 
258  VRF4API_METHOD const DtVector& localPosition() const;
259 
260  VRF4API_METHOD const DtVector& localVelocity() const;
261  VRF4API_METHOD const DtVector& localAcceleration() const;
262  VRF4API_METHOD const DtVector& relativeVelocity() const;
263  VRF4API_METHOD const DtVector& relativeAcceleration() const;
264  VRF4API_METHOD const DtTaitBryan& localOrientation() const;
265  VRF4API_METHOD const DtTaitBryan& localOrientationWrtDatabase() const;
266  VRF4API_METHOD const DtDcm& localOrientationMatrix() const;
267  VRF4API_METHOD const double localSpeed() const;
268  VRF4API_METHOD const double worldSpeed() const;
269  VRF4API_METHOD const DtVector& worldPosition() const;
270  VRF4API_METHOD const DtDcm& worldOrientationMatrix() const;
271  VRF4API_METHOD const DtVector& worldVelocity() const;
272  VRF4API_METHOD const DtVector& worldAcceleration() const;
273  VRF4API_METHOD const DtTaitBryan& worldOrientation() const;
274  VRF4API_METHOD const DtVector& rotationalVelocity() const;
275  VRF4API_METHOD const DtVector& parentPosition() const;
276  VRF4API_METHOD const DtVector& parentVelocity() const;
277  VRF4API_METHOD const DtVector& parentAcceleration() const;
278  VRF4API_METHOD const DtTaitBryan& parentOrientation() const;
279  VRF4API_METHOD const DtDcm& parentOrientationMatrix() const;
280  VRF4API_METHOD const DtVector bodyVelocity() const;
281 
284  VRF4API_METHOD virtual void setLocalOrientationWrtDatabase(
285  const DtTaitBryan& localOrientation);
286 
291 
292  VRF4API_METHOD DtReal currentSpeed() const;
294 
299  VRF4API_METHOD DtReal forwardSpeed() const;
300 
301  VRF4API_METHOD void setLocalPosition(const DtVector & pos);
302  VRF4API_METHOD void setLocalVelocity(const DtVector & vel);
303  VRF4API_METHOD void setLocalSpeed(double);
304  VRF4API_METHOD void setLocalAcceleration(const DtVector & acc);
305  VRF4API_METHOD void setRelativeVelocity(const DtVector & vel);
306  VRF4API_METHOD void setRelativeAcceleration(const DtVector & acc);
307  VRF4API_METHOD void setLocalOrientation(const DtTaitBryan & angles);
308 
309  VRF4API_METHOD void setWorldPosition(const DtVector & pos);
310  VRF4API_METHOD void setWorldVelocity(const DtVector & vel);
311  VRF4API_METHOD void setWorldAcceleration(const DtVector & acc);
312  VRF4API_METHOD void setWorldOrientation(const DtTaitBryan & angles);
313  VRF4API_METHOD void setWorldOrientationMatrix(const DtDcm & angles);
314  VRF4API_METHOD void setRotationalVelocity(const DtVector& rotationalVelocity);
315  VRF4API_METHOD void setLocalOrientationMatrix(const DtDcm & orient);
316 
317  VRF4API_METHOD void setParentPosition(const DtVector& pos);
318  VRF4API_METHOD void setParentVelocity(const DtVector& pos);
319  VRF4API_METHOD void setParentAcceleration(const DtVector& pos);
320  VRF4API_METHOD void setParentOrientation(const DtTaitBryan& pos);
321 
323 
326  VRF4API_METHOD void setBoundingVolume(const Dt3dBoundingVolume&);
327  VRF4API_METHOD Dt3dBoundingVolume boundingVolume() const;
328  VRF4API_METHOD void setBoundingGeometryType(DtSimBoundingGeometry::DtSimBoundingGeometryType type);
329  VRF4API_METHOD void setHalfLengthWidthHeight(double l, double w, double h);
330 
338  VRF4API_METHOD virtual double distanceToLocalVector(const DtVector& localVector) const;
339 
340  VRF4API_METHOD void setObjectLabel(const DtString&);
341  VRF4API_METHOD const DtString objectLabel() const;
342  VRF4API_METHOD DtObjectType objectType() const;
343  VRF4API_METHOD const DtVrfObjectParameters* parameterEntry() const;
345 };
346 
347 #include "vrfobjcore/simObjectStateRepository.inl"
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:63
virtual void prePutSelf()
Called before either version of put self (file or environment). Default is no-op. ...
T_SRType * as()
Definition: simObjectStateRepository.h:107
DtMovementLocalObjectFacade myMovementLocalObjectFacade
Definition: simObjectStateRepository.h:167
VRF4API_METHOD const DtVrfSimKinematicState * vrfKinematicState() const
Definition: simObjectStateRepository.h:228
boost::signals2::scoped_connection myUUIDChangedConnection
Definition: simObjectStateRepository.h:169
virtual void postGetSelf()
Called after either version of getSelf (mtl or environment). Default is no-op.
The DtSimObjectReference is a shared pointer that can be used amongst many object for access to the u...
Definition: simObjectReference.h:26
Definition: readerWriter.h:85
Definition: simObjectStateRepository.h:59
Definition: readerWriterRegistry.h:39
Contains the DtUUID class declaration.
DT_DLL_vrfutil bool leftOf(const DtVector &localPoint, const DtLocalVertexList &localVertexList, const Coordinate_System &coordinateSystem)
Returns true if localPoint is left of the localVertexList in 2D. Always returns false if this has onl...
DT_DLL_vrfutil bool inside(const DtVector &localPoint, const DtLocalVertexList &localVertexList, const Coordinate_System &coordinateSystem)
Determine if the given localPoint is inside the polygon defined by the given localVertexList.
class DtRwSimKinematicState: This class encapsulates the kinematic state of an object wrt to the netw...
Definition: rwSimKinematicState.h:37
Definition: coordSystem.h:54
VRF4API_METHOD DtSimKinematicState * kinematicState()
Definition: simObjectStateRepository.h:230
VRF4API_METHOD const DtSimKinematicState * kinematicState() const
Definition: simObjectStateRepository.h:227
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
DtLegacySimObjectStateRepositoryRWData * myLegacyRWData
Old data to read for old scenario (can still be used to save for RW)
Definition: simObjectStateRepository.h:163
class DtVertexList:
Definition: vertexList.h:22
Definition: noArgumentCallbackList.h:90
DtSimObjectStateRepository DtVrfSimKinematicState
These are backwards compatible methods that can be used if you define ALLOW_VRF4API in your header fi...
Definition: simObjectStateRepository.h:195
DtSimBoundingGeometryType
Definition: simBoundingGeometry.h:61
DtCallbackList< DtSimObjectStateRepository * >::DtCallbackFunctionType DtSimObjectStateRepositoryAboutToBeDeletedCallbackFcn
Definition: simObjectStateRepository.h:44
virtual void preGetSelf()
Called before either version of get self (file or environment). Default is no-op. ...
DtLocalObject * myLocalObject
Private (only thread safe because handled in a single thread in a non contentious way) ...
Definition: simObjectStateRepository.h:166
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: simObject.h:88
Definition: legacyRWData.h:72
DtSimObjectStateRepository DtSimKinematicState
These are backwards compatible methods that can be used if you define ALLOW_VRF4API in your header fi...
Definition: simObjectStateRepository.h:194
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
boost::signals2::scoped_connection myLocalObjectAddedConnection
Definition: simObjectStateRepository.h:170
Definition: rwVrfKinematicState.h:25
Contains the DtSimObjectReference class declaration.
const DtReaderWriter & operator=(const DtReaderWriter &orig)
assignment operator
const T_SRType * as() const
Convenience function to cast to particular state rep type.
Definition: simObjectStateRepository.h:101
VRF4API_METHOD DtVrfSimKinematicState * vrfKinematicState()
Definition: simObjectStateRepository.h:231
boost::signals2::scoped_connection myLocalObjectDeletedConnection
Definition: simObjectStateRepository.h:171
class DtLocalVertexList:
Definition: localVertexList.h:20
#define VRF4API_METHOD
Include this header file to allow for the definition/usage of the ability to mark something as deprec...
Definition: vrf4XAPI.h:22
A locally simulated VRF object. Holds all internal and external data for the object, and provides access to both the current frame and next frame state data for the object. All current frame data is read-only, and next-frame data can be written to. No thread safety guarantees are made on this object during the simulation frame and it should only be accessed by the thread that is simulating the object.
Definition: localObject.h:86
virtual void postPutSelf()
Called after either version of put self (file or environment). Default is no-op.

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)