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>
20 #include <vlpi/entityType.h>
21 #include <vlutil/vlString.h>
23 #include <vrfutil/rwEntityType.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() override;
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 DtEntityType 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:64
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.
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:80
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:26
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:23
A locally simulated VRF object.
Definition: localObject.h:98
virtual void postPutSelf()
Called after either version of put self (file or environment). Default is no-op.

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)