VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
laserDesignatorStateComponent.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 
10 #include <legionStandardOM/sets/readDesignatorRepository.hpp>
11 #include <legionStandardOM/sets/writeDesignatorRepository.hpp>
12 #include <vrfutil/rwUUID.h>
13 #include <matrix/vlVector.h>
14 
15 namespace makVrf
16 {
21  {
23  : myDesignatedObject(DtUUID::nullUUID())
24  , myDesignatorId(DtUUID::nullUUID())
25  {
26  }
27 
29  : myDesignatedObject(orig.myDesignatedObject)
30  , myDesignatorId(orig.myDesignatorId)
31  , myGlobalId(orig.myGlobalId)
32  {
33  }
34 
36  {
37  myDesignatedObject = rhs.myDesignatedObject;
38  myDesignatorId = rhs.myDesignatorId;
39  myGlobalId = rhs.myGlobalId;
40 
41  return *this;
42  }
43 
44  DEFINE_ACCESSOR_MUTATOR(DtUUID, designatedObject, DesignatedObject)
45  DEFINE_ACCESSOR_MUTATOR(DtUUID, designatorId, DesignatorId)
46  DEFINE_ACCESSOR_MUTATOR(DtString, globalId, GlobalId)
47 
48  protected:
49  DtUUID myDesignatedObject;
50  DtUUID myDesignatorId;
51  DtString myGlobalId;
52  };
53 
57  {
58  public:
60 
62  : DtFrameStateInterface(storage)
63  {
64  }
65 
66  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(DtUUID, designatedObject, DesignatedObject)
67  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(DtUUID, designatorId, DesignatorId)
68  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, designatorCode, DesignatorCode)
69  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, drAlgorithm, DrAlgorithm)
70  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(double, designatorPower, DesignatorPower)
71  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(double, designatorWavelength, DesignatorWavelength)
72  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, designatorSpotLocation, DesignatorSpotLocation)
73  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, relativeSpotLocation, RelativeSpotLocation)
74  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, relativePosition, RelativePosition)
75  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, codeName, CodeName)
76  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, spotLinearAcceleration, SpotLinearAcceleration)
78  };
79 
82  {
83  public:
86 
88  const DtLaserDesignatorStateComponentData& frameState() const { return myData; };
90 
91  const DtUUID& designatedObject() const;
92  void setDesignatedObject(const DtUUID&);
93 
94  const DtUUID& designatorId() const;
95  void setDesignatorId(const DtUUID&);
96 
97  const unsigned int designatorCode() const;
98  void setDesignatorCode(const unsigned int&);
99 
100  const unsigned int drAlgorithm() const;
101  void setDrAlgorithm(const unsigned int&);
102 
103  const unsigned int codeName() const;
104  void setCodeName(const unsigned int&);
105 
106  const DtVector spotLinearAcceleration() const;
107  void setSpotLinearAcceleration(const DtVector&);
108 
109  const double designatorPower() const;
110  void setDesignatorPower(const double&);
111 
112  const double designatorWavelength() const;
113  void setDesignatorWavelength(const double&);
114 
115  const DtVector designatorSpotLocation() const;
116  void setDesignatorSpotLocation(const DtVector&);
117 
118  const DtVector relativeSpotLocation() const;
119  void setRelativeSpotLocation(const DtVector&);
120 
121  const DtVector relativePosition() const;
122  void setRelativePosition(const DtVector&);
123 
124  const DtString& globalId() const;
125  void setGlobalId(const DtString&);
126 
128  virtual void makeWritable();
129 
131  virtual void makeReadOnly();
132  void cleanupWriteState();
133 
134  protected:
136  LOM::WriteDesignatorRepository myWriteDesignatorRepository;
138  };
139 
142  {
143  public:
146 
148  const DtLaserDesignatorStateComponentData& frameState() const { return myData; };
149 
150  const DtUUID& designatedObject() const;
151  const DtUUID& designatorId() const;
152  const unsigned int designatorCode() const;
153  const double designatorPower() const;
154  const double designatorWavelength() const;
155  const DtVector designatorSpotLocation() const;
156  const DtVector relativeSpotLocation() const;
157  const DtVector relativePosition() const;
158  const unsigned int codeName() const;
159  const DtVector spotLinearAcceleration() const;
160  const unsigned int drAlgorithm() const;
161  const DtString& globalId() const;
162 
163  bool readComponentValid() const;
164  bool findReadComponent();
165 
166  protected:
167  void handleDataUpdated();
168 
171  {
172  myData = data;
173  }
174 
175  protected:
177  LOM::ReadDesignatorRepository myReadDesignatorRepository;
180  };
181 
185  {
186  public:
188 
189  bool isDoubleBuffered() { return true; };
190  const DtFrameStateInterface* currentFrameState() const { return &myCurrentFrameState; }
191  virtual DtFrameStateInterface* nextFrameState() { return &myNextFrameState; };
192  virtual const DtFrameStateInterface* nextFrameState() const { return &myNextFrameState; };
193 
194  virtual bool forceAdvance() override;
195 
197  {
198  if (myNextFrameState.isWritable())
199  {
200  if (!myFoundComponent)
201  {
202  myFoundComponent = myCurrentFrameState.findReadComponent();
203  }
204 
205  myCurrentFrameState.advanceFrame(myNextFrameState.frameState());
206  }
207 
208  myCurrentFrameState.emitComponentUpdated();
209  }
210 
212  {
213  myCurrentFrameState.updateStateData(sd);
214  myNextFrameState.updateStateData(sd);
215  }
216 
217  virtual void aboutToBeDeleted() override
218  {
220  myCurrentFrameState.aboutToBeDeleted();
221  myNextFrameState.aboutToBeDeleted();
222  }
223 
224  virtual void firstFrameAdvance() override;
225  virtual void removeAdditionalStateComponents() override;
226 
227  protected:
231  };
232 
236 }
UUID is a unique ID wrapper class.
Definition: uuid.h:59
const DtLaserDesignatorStateComponentData & frameState() const
Current frame state only can access current frame buffers. This ensures thread safety.
Definition: laserDesignatorStateComponent.h:148
void updateStateData(DtStateData *sd)
Implement to update data storage to the new state data.
Definition: laserDesignatorStateComponent.h:211
DtLaserDesignatorStateComponentData myData
Definition: laserDesignatorStateComponent.h:176
DtUUID myDesignatedObject
Definition: laserDesignatorStateComponent.h:49
DtStateData * myStateData
Definition: laserDesignatorStateComponent.h:179
LOM::ReadDesignatorRepository myReadDesignatorRepository
Definition: laserDesignatorStateComponent.h:177
Definition: stateComponent.h:266
DtStateComponentCreator< DtLaserDesignatorStateComponentImplementation > DtLaserDesignatorStateComponentCreator
5) Define the creator. This will need to be registered with the REGISTER_STATE_COMPONENT macro in the...
Definition: laserDesignatorStateComponent.h:235
DtLaserDesignatorStateComponentData & operator=(const DtLaserDesignatorStateComponentData &rhs)
Definition: laserDesignatorStateComponent.h:35
DtLaserDesignatorStateComponentNextFrame myNextFrameState
Definition: laserDesignatorStateComponent.h:229
Contains the DtUUID class declaration.
4) Define the state component that will contain the wrappers to the next and current frame states tha...
Definition: laserDesignatorStateComponent.h:184
void updateDataStorage()
Implement to update data storage. Called from advanceFrame.
Definition: laserDesignatorStateComponent.h:196
DtStateData * myStateData
Definition: laserDesignatorStateComponent.h:137
virtual DtFrameStateInterface * nextFrameState()
Definition: laserDesignatorStateComponent.h:191
The DtLaserDesignatorStateComponentList is a collection of laser designators. Each laser designator m...
Definition: laserDesignatorStateComponent.h:20
DtLaserDesignatorStateComponentData()
Definition: laserDesignatorStateComponent.h:22
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:339
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: laserDesignatorStateComponent.h:56
#define DEFINE_STATE_COMPONENT_TYPE(CreatedComponent)
Definition: stateComponent.h:228
Subclass from this to indicate that this will be a double buffered state component.
Definition: stateComponent.h:379
#define UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(Type, Member, Set)
Definition: doubleBufferedDataStorage.h:53
LOM::WriteDesignatorRepository myWriteDesignatorRepository
Definition: laserDesignatorStateComponent.h:136
DtUUID myDesignatorId
Definition: laserDesignatorStateComponent.h:50
DtLaserDesignatorStateComponentData & frameState()
Definition: laserDesignatorStateComponent.h:89
2) Define the next frame class. This will be used for write access.
Definition: laserDesignatorStateComponent.h:81
virtual void aboutToBeDeleted()
bool isDoubleBuffered()
Definition: laserDesignatorStateComponent.h:189
3) Define the current frame class. This will be used for read access.
Definition: laserDesignatorStateComponent.h:141
#define UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(Type, Member, Set)
Definition: doubleBufferedDataStorage.h:57
#define DEFINE_ACCESSOR_MUTATOR(ReturnType, Accessor, Mutator)
Definition: doubleBufferedDataStorage.h:23
DtLaserDesignatorStateComponentData myData
Definition: laserDesignatorStateComponent.h:135
virtual void aboutToBeDeleted() override
Definition: laserDesignatorStateComponent.h:217
int myCallbackHandle
Definition: laserDesignatorStateComponent.h:178
#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
const DtLaserDesignatorStateComponentData & frameState() const
Next frame access write access. Ensure this is only used in a single thread (i.e.a controller thread)...
Definition: laserDesignatorStateComponent.h:88
const DtFrameStateInterface * currentFrameState() const
Definition: laserDesignatorStateComponent.h:190
DtLaserDesignatorStateComponentCurrentFrame myCurrentFrameState
Definition: laserDesignatorStateComponent.h:228
Contains the DtStateComponent class declaration.
bool myFoundComponent
Definition: laserDesignatorStateComponent.h:230
DtString myGlobalId
Definition: laserDesignatorStateComponent.h:51
DtLaserDesignatorStateComponentData(const DtLaserDesignatorStateComponentData &orig)
Definition: laserDesignatorStateComponent.h:28
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:291
void advanceFrame(const DtLaserDesignatorStateComponentData &data)
Definition: laserDesignatorStateComponent.h:170
virtual const DtFrameStateInterface * nextFrameState() const
Definition: laserDesignatorStateComponent.h:192

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)