VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
environmentalLocationStateComponent.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/readEnvironmentProcessRepository.hpp>
10 #include <legionStandardOM/sets/writeEnvironmentProcessRepository.hpp>
11 #include <tbb/mutex.h>
12 
13 class Coordinate_System;
14 
15 namespace makVrf
16 {
17  class DtStateDataManager;
19  {
21  : myFrozen(false)
22  {};
23 
25  : myFrozen(orig.myFrozen)
26  {
27  }
28 
30  {
31  myFrozen = rhs.myFrozen;
32 
33  return *this;
34  }
35 
36  DEFINE_ACCESSOR_MUTATOR(bool, frozen, Frozen)
37 
38  protected:
39  bool myFrozen;
40  };
41 
45  {
46  public:
48 
50  : DtLocationStateComponent(storage)
51  , myCenterPositionColumn(0xFFFFFFFF)
52  , myOrientationColumn(0xFFFFFFFF)
53  {
54  }
55 
56  UNDEFINED_MUTATOR(int, ObjectAttachMode)
57 
58  protected:
60  UInt32 myCenterPositionColumn;
61  UInt32 myOrientationColumn;
62  };
63 
66  {
67  public:
70 
72  const DtEnvironmentalLocationStateComponentData& frameState() const { return myData; };
74 
75  const DtUUID& hostGlobalId() const;
76  void setHostGlobalId( const DtUUID& id);
77 
78  const int objectAttachMode() const;
79  void setObjectAttachMode(const int&);
80 
81  const DtVector location() const;
82  void setLocation(const DtVector&);
83 
84  const bool locationChanged() const;
85 
86  const double heading() const;
87  const double pitch() const;
88  const double roll() const;
89 
90  const DtVector& worldPosition() const;
91  const DtVector& relativePosition() const;
92  const DtVector& parentPosition() const;
93  const DtVector& localPosition() const;
94  const DtDcm& worldOrientationMatrix() const;
95  const bool localPositionIsValid() const;
96  const bool frozen() const;
97  void setFrozen(const bool&);
98 
99  const DtDcm& parentOrientationMatrix() const;
100  void setLocalOrientationMatrix(const DtDcm&);
101 
102  const DtDcm& localOrientationMatrix() const;
103 
104  void setLocalPosition(const DtVector&);
105  void setWorldPosition(const DtVector&);
106  void setParentPosition(const DtVector&);
107  void setWorldOrientationMatrix(const DtDcm&);
108 
109  const DtTaitBryan orientation() const;
110  void setOrientation(const DtTaitBryan&);
111 
112  const DtTaitBryan& worldOrientation() const;
113  const DtTaitBryan& topographicOrientation() const;
114  const DtTaitBryan& parentOrientation() const;
115  const DtTaitBryan& localOrientation() const;
116 
117  void setLocalOrientation(const DtTaitBryan&);
118  void setLocalOrientationWrtDatabase(const DtTaitBryan&);
119  const DtTaitBryan& localOrientationWrtDatabase() const;
120  void setWorldOrientation(const DtTaitBryan&);
121  void setParentOrientation(const DtTaitBryan&);
122 
123  void setCoordinateSystem(const Coordinate_System* cs);
124  void setKinematicState(const DtRwVrfKinematicState&);
125  const DtRwVrfKinematicState& kinematicState() const;
126  virtual void refreshKinematicState(const DtEnvironmentalLocationStateComponent&);
127 
128  const bool spatiallyFrozen() const;
129 
131  virtual void makeWritable();
132 
134  virtual void makeReadOnly();
135  void slot_hostDestroyed();
136 
137  protected:
138  LOM::WriteEnvironmentProcessRepository myWriteEnvironmentProcessRepository;
142  boost::signals2::scoped_connection myHostDeletedConnection;
143  };
144 
147  {
148  public:
151 
153  const DtEnvironmentalLocationStateComponentData& frameState() const { return myData; };
154 
155  const DtUUID& hostGlobalId() const;
156  const int objectAttachMode() const;
157 
158  const bool localPositionIsValid() const;
159  const DtVector location() const;
160 
161  const DtVector& worldPosition() const;
162  const DtVector& relativePosition() const;
163  const DtVector& parentPosition() const;
164 
165  const DtDcm& parentOrientationMatrix() const;
166 
167  const DtVector& localPosition() const;
168 
169  const DtDcm& worldOrientationMatrix() const;
170  const DtDcm& localOrientationMatrix() const;
171  const DtTaitBryan& localOrientationWrtDatabase() const;
172 
173  const double heading() const;
174  const double pitch() const;
175  const double roll() const;
176 
177  const DtTaitBryan orientation() const;
178  const DtTaitBryan& worldOrientation() const;
179  const DtTaitBryan& topographicOrientation() const;
180  const DtTaitBryan& parentOrientation() const;
181  const DtTaitBryan& localOrientation() const;
182  const bool frozen() const;
183 
184  const bool locationChanged() const;
185 
186  void setCoordinateSystem(const Coordinate_System* cs);
187  void refreshKinematicState() const;
188  const DtRwVrfKinematicState& kinematicState() const;
189 
190  const bool spatiallyFrozen() const;
191 
192  protected:
195  {
196  myData = data;
197  }
198 
199  void setLocationChanged(bool);
200  virtual void needsKinematicStateRefresh();
201 
202  protected:
203  void handleDataUpdated(const std::vector<UInt32>& attributesUpdated);
204 
205  protected:
206  const LOM::ReadEnvironmentProcessRepository myReadEnvironmentProcessRepository;
209  unsigned int myCallbackHandle;
210  mutable tbb::mutex myKinematicStateMutex;
213 
215  };
216 
220  {
221  public:
223 
224  bool isDoubleBuffered() { return true; };
225  const DtFrameStateInterface* currentFrameState() const { return &myCurrentFrameState; }
226  virtual DtFrameStateInterface* nextFrameState() { return &myNextFrameState; };
227  virtual const DtFrameStateInterface* nextFrameState() const { return &myNextFrameState; };
228 
230  virtual void setCoordinateSystem(const Coordinate_System*);
231 
233  virtual bool forceAdvance();
234 
235  void updateDataStorage();
236 
238  {
239  myCurrentFrameState.updateStateData(sd);
240  myNextFrameState.updateStateData(sd);
241  }
242 
243  virtual void initializeFromParameters(const DtVrfObjectParameters* params);
244 
245  virtual void aboutToBeDeleted() override
246  {
248  myCurrentFrameState.aboutToBeDeleted();
249  myNextFrameState.aboutToBeDeleted();
250  }
251 
252  protected:
256  };
257 
261 }
262 
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
tbb::mutex myKinematicStateMutex
Definition: environmentalLocationStateComponent.h:210
unsigned int UInt32
Definition: stateDataTypes.h:18
virtual void aboutToBeDeleted() override
Definition: environmentalLocationStateComponent.h:245
DtStateData * myStateData
Definition: environmentalLocationStateComponent.h:139
The DtLocationStateComponent interface contains the interface that all DtLocationStateComponents can ...
Definition: locationStateComponent.h:25
bool myLocationChanged
Definition: environmentalLocationStateComponent.h:207
bool isDoubleBuffered()
Definition: environmentalLocationStateComponent.h:224
void updateStateData(DtStateData *sd)
Implement to update data storage to the new state data.
Definition: environmentalLocationStateComponent.h:237
const DtEnvironmentalLocationStateComponentData & frameState() const
Current frame state only can access current frame buffers. This ensures thread safety.
Definition: environmentalLocationStateComponent.h:153
Definition: stateComponent.h:266
DtStateDataManager * myStateDataManager
Definition: environmentalLocationStateComponent.h:208
DtRwVrfKinematicState * myKinematicState
Definition: environmentalLocationStateComponent.h:141
DtEnvironmentalLocationStateComponentNextFrame myNextFrameState
Definition: environmentalLocationStateComponent.h:254
DtEnvironmentalLocationStateComponentData()
Definition: environmentalLocationStateComponent.h:20
virtual const DtFrameStateInterface * nextFrameState() const
Definition: environmentalLocationStateComponent.h:227
DtRwVrfKinematicState * myKinematicState
Definition: environmentalLocationStateComponent.h:212
DtEnvironmentalLocationStateComponentData & operator=(const DtEnvironmentalLocationStateComponentData &rhs)
Definition: environmentalLocationStateComponent.h:29
const DtEnvironmentalLocationStateComponentData & frameState() const
Next frame access write access. Ensure this is only used in a single thread (i.e.a controller thread)...
Definition: environmentalLocationStateComponent.h:72
DtEnvironmentalLocationStateComponentData(const DtEnvironmentalLocationStateComponentData &orig)
Definition: environmentalLocationStateComponent.h:24
boost::signals2::scoped_connection myHostDeletedConnection
Definition: environmentalLocationStateComponent.h:142
DtEnvironmentalLocationStateComponentData & frameState()
Definition: environmentalLocationStateComponent.h:73
bool myNeedsKinematicStateRefresh
Definition: environmentalLocationStateComponent.h:211
4) Define the state component that will contain the wrappers to the next and current frame states tha...
Definition: environmentalLocationStateComponent.h:219
Definition: coordSystem.h:54
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:339
#define DEFINE_STATE_COMPONENT_TYPE(CreatedComponent)
Definition: stateComponent.h:228
unsigned int myCallbackHandle
Definition: environmentalLocationStateComponent.h:209
3) Define the current frame class. This will be used for read access.
Definition: environmentalLocationStateComponent.h:146
Subclass from this to indicate that this will be a double buffered state component.
Definition: stateComponent.h:379
virtual DtFrameStateInterface * nextFrameState()
Definition: environmentalLocationStateComponent.h:226
DtVector myParentLocation
Definition: environmentalLocationStateComponent.h:255
void advanceFrame(const DtEnvironmentalLocationStateComponentData &data)
Definition: environmentalLocationStateComponent.h:194
virtual void aboutToBeDeleted()
bool myFrozen
Definition: environmentalLocationStateComponent.h:39
Definition: environmentalLocationStateComponent.h:18
DtEnvironmentalLocationStateComponentCurrentFrame myCurrentFrameState
Definition: environmentalLocationStateComponent.h:253
const DtFrameStateInterface * currentFrameState() const
Definition: environmentalLocationStateComponent.h:225
DtStateComponentCreator< DtEnvironmentalLocationStateComponentImplementation > DtEnvironmentalLocationStateComponentCreator
5) Define the creator. This will need to be registered with the REGISTER_STATE_COMPONENT macro in the...
Definition: environmentalLocationStateComponent.h:260
#define DEFINE_ACCESSOR_MUTATOR(ReturnType, Accessor, Mutator)
Definition: doubleBufferedDataStorage.h:23
const LOM::ReadEnvironmentProcessRepository myReadEnvironmentProcessRepository
Definition: environmentalLocationStateComponent.h:206
LOM::WriteEnvironmentProcessRepository myWriteEnvironmentProcessRepository
Definition: environmentalLocationStateComponent.h:138
Definition: rwVrfKinematicState.h:25
#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
DtStateDataManager * myStateDataManager
Definition: environmentalLocationStateComponent.h:140
1) 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: environmentalLocationStateComponent.h:44
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:291
2) Define the next frame class. This will be used for write access.
Definition: environmentalLocationStateComponent.h:65
#define UNDEFINED_MUTATOR(Type, Set)
Definition: doubleBufferedDataStorage.h:44
DtStateData * myStateData
Definition: environmentalLocationStateComponent.h:214
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73

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)