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  , myUserData(0)
26  {
27  }
28 
30  : myDesignatedObject(orig.myDesignatedObject)
31  , myDesignatorId(orig.myDesignatorId)
32  , myGlobalId(orig.myGlobalId)
33  , myUserData(orig.myUserData)
34  {
35  }
36 
38  {
39  myDesignatedObject = rhs.myDesignatedObject;
40  myDesignatorId = rhs.myDesignatorId;
41  myGlobalId = rhs.myGlobalId;
42  myUserData = rhs.myUserData;
43 
44  return *this;
45  }
46 
47  DEFINE_ACCESSOR_MUTATOR(DtUUID, designatedObject, DesignatedObject)
48  DEFINE_ACCESSOR_MUTATOR(DtUUID, designatorId, DesignatorId)
49  DEFINE_ACCESSOR_MUTATOR(DtString, globalId, GlobalId)
50  DEFINE_ACCESSOR_MUTATOR(unsigned long long, userData, UserData)
51 
52  protected:
53  DtUUID myDesignatedObject;
54  DtUUID myDesignatorId;
55  DtString myGlobalId;
56  unsigned long long myUserData;
57  };
58 
62  {
63  public:
65 
67  : DtFrameStateInterface(storage)
68  {
69  }
70 
71  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(DtUUID, designatedObject, DesignatedObject)
72  UNDEFINED_RETURNREF_ACCESSOR_MUTATOR(DtUUID, designatorId, DesignatorId)
73  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, designatorCode, DesignatorCode)
74  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, drAlgorithm, DrAlgorithm)
75  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(double, designatorPower, DesignatorPower)
76  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(double, designatorWavelength, DesignatorWavelength)
77  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, designatorSpotLocation, DesignatorSpotLocation)
78  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, relativeSpotLocation, RelativeSpotLocation)
79  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, relativePosition, RelativePosition)
80  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned int, codeName, CodeName)
81  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(unsigned long long, userData, UserData)
82  UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(DtVector, spotLinearAcceleration, SpotLinearAcceleration)
84  };
85 
88  {
89  public:
91  virtual ~DtLaserDesignatorStateComponentNextFrame() override;
92 
94  const DtLaserDesignatorStateComponentData& frameState() const { return myData; };
96 
97  virtual const DtUUID& designatedObject() const override;
98  virtual void setDesignatedObject(const DtUUID&) override;
99 
100  virtual const DtUUID& designatorId() const override;
101  virtual void setDesignatorId(const DtUUID&) override;
102 
103  virtual const unsigned int designatorCode() const override;
104  virtual void setDesignatorCode(const unsigned int&) override;
105 
106  virtual const unsigned long long userData() const override;
107  virtual void setUserData(const unsigned long long&) override;
108 
109  virtual const unsigned int drAlgorithm() const override;
110  virtual void setDrAlgorithm(const unsigned int&) override;
111 
112  virtual const unsigned int codeName() const override;
113  virtual void setCodeName(const unsigned int&) override;
114 
115  virtual const DtVector spotLinearAcceleration() const override;
116  virtual void setSpotLinearAcceleration(const DtVector&) override;
117 
118  virtual const double designatorPower() const override;
119  virtual void setDesignatorPower(const double&) override;
120 
121  virtual const double designatorWavelength() const override;
122  virtual void setDesignatorWavelength(const double&) override;
123 
124  virtual const DtVector designatorSpotLocation() const override;
125  virtual void setDesignatorSpotLocation(const DtVector&) override;
126 
127  virtual const DtVector relativeSpotLocation() const override;
128  virtual void setRelativeSpotLocation(const DtVector&) override;
129 
130  virtual const DtVector relativePosition() const override;
131  virtual void setRelativePosition(const DtVector&) override;
132 
133  virtual const DtString& globalId() const override;
134  virtual void setGlobalId(const DtString&) override;
135 
137  virtual void makeWritable() override;
138 
140  virtual void makeReadOnly() override;
141  void cleanupWriteState();
142 
143  protected:
145  LOM::WriteDesignatorRepository myWriteDesignatorRepository;
146  };
147 
150  {
151  public:
154 
156  const DtLaserDesignatorStateComponentData& frameState() const { return myData; };
157 
158  virtual const unsigned long long userData() const override;
159  virtual const DtUUID& designatedObject() const override;
160  virtual const DtUUID& designatorId() const override;
161  virtual const unsigned int designatorCode() const override;
162  virtual const double designatorPower() const override;
163  virtual const double designatorWavelength() const override;
164  virtual const DtVector designatorSpotLocation() const override;
165  virtual const DtVector relativeSpotLocation() const override;
166  virtual const DtVector relativePosition() const override;
167  virtual const unsigned int codeName() const override;
168  virtual const DtVector spotLinearAcceleration() const override;
169  virtual const unsigned int drAlgorithm() const override;
170  virtual const DtString& globalId() const override;
171 
172  bool readComponentValid() const;
173  bool findReadComponent();
174 
175  protected:
176  void handleDataUpdated();
177 
180  {
181  myData = data;
182  }
183 
184  protected:
186  LOM::ReadDesignatorRepository myReadDesignatorRepository;
188  };
189 
193  {
194  public:
196 
197  bool isDoubleBuffered() { return true; };
198  virtual const DtFrameStateInterface* currentFrameState() const override { return &myCurrentFrameState; }
199  virtual DtFrameStateInterface* nextFrameState() override { return &myNextFrameState; };
200  virtual const DtFrameStateInterface* nextFrameState() const override { return &myNextFrameState; };
201 
202  virtual bool forceAdvance() override;
203 
204  virtual void updateDataStorage() override
205  {
206  if (myNextFrameState.isWritable())
207  {
208  if (!myFoundComponent)
209  {
210  myFoundComponent = myCurrentFrameState.findReadComponent();
211  }
212 
213  myCurrentFrameState.advanceFrame(myNextFrameState.frameState());
214  }
215 
216  myCurrentFrameState.emitComponentUpdated();
217  }
218 
219  virtual void updateStateData(DtStateData* sd) override
220  {
221  myCurrentFrameState.updateStateData(sd);
222  myNextFrameState.updateStateData(sd);
223  }
224 
225  virtual void aboutToBeDeleted() override
226  {
228  myCurrentFrameState.aboutToBeDeleted();
229  myNextFrameState.aboutToBeDeleted();
230  }
231 
232  virtual void firstFrameAdvance() override;
233  virtual void removeAdditionalStateComponents() override;
234 
235  protected:
239  };
240 
244 }
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:156
DtLaserDesignatorStateComponentData myData
Definition: laserDesignatorStateComponent.h:185
DtUUID myDesignatedObject
Definition: laserDesignatorStateComponent.h:53
LOM::ReadDesignatorRepository myReadDesignatorRepository
Definition: laserDesignatorStateComponent.h:186
Definition: stateComponent.h:269
DtStateComponentCreator< DtLaserDesignatorStateComponentImplementation > DtLaserDesignatorStateComponentCreator
5) Define the creator. This will need to be registered with the REGISTER_STATE_COMPONENT macro in the...
Definition: laserDesignatorStateComponent.h:243
DtLaserDesignatorStateComponentData & operator=(const DtLaserDesignatorStateComponentData &rhs)
Definition: laserDesignatorStateComponent.h:37
virtual const DtFrameStateInterface * nextFrameState() const override
Definition: laserDesignatorStateComponent.h:200
DtLaserDesignatorStateComponentNextFrame myNextFrameState
Definition: laserDesignatorStateComponent.h:237
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:192
virtual const DtFrameStateInterface * currentFrameState() const override
Definition: laserDesignatorStateComponent.h:198
virtual void updateDataStorage() override
Implement to update data storage. Called from advanceFrame.
Definition: laserDesignatorStateComponent.h:204
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:398
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:61
#define DEFINE_STATE_COMPONENT_TYPE(CreatedComponent)
Definition: stateComponent.h:231
Subclass from this to indicate that this will be a double buffered state component.
Definition: stateComponent.h:384
unsigned long long myUserData
Definition: laserDesignatorStateComponent.h:56
#define UNDEFINED_RETURNVALUE_ACCESSOR_MUTATOR(Type, Member, Set)
Definition: doubleBufferedDataStorage.h:53
LOM::WriteDesignatorRepository myWriteDesignatorRepository
Definition: laserDesignatorStateComponent.h:145
DtUUID myDesignatorId
Definition: laserDesignatorStateComponent.h:54
DtLaserDesignatorStateComponentData & frameState()
Definition: laserDesignatorStateComponent.h:95
2) Define the next frame class. This will be used for write access.
Definition: laserDesignatorStateComponent.h:87
virtual void aboutToBeDeleted()
bool isDoubleBuffered()
Definition: laserDesignatorStateComponent.h:197
virtual void updateStateData(DtStateData *sd) override
Implement to update data storage to the new state data.
Definition: laserDesignatorStateComponent.h:219
3) Define the current frame class. This will be used for read access.
Definition: laserDesignatorStateComponent.h:149
#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:144
virtual void aboutToBeDeleted() override
Definition: laserDesignatorStateComponent.h:225
int myCallbackHandle
Definition: laserDesignatorStateComponent.h:187
#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:94
DtLaserDesignatorStateComponentCurrentFrame myCurrentFrameState
Definition: laserDesignatorStateComponent.h:236
virtual DtFrameStateInterface * nextFrameState() override
Definition: laserDesignatorStateComponent.h:199
Contains the DtStateComponent class declaration.
bool myFoundComponent
Definition: laserDesignatorStateComponent.h:238
DtString myGlobalId
Definition: laserDesignatorStateComponent.h:55
DtLaserDesignatorStateComponentData(const DtLaserDesignatorStateComponentData &orig)
Definition: laserDesignatorStateComponent.h:29
This is a simple base class that will be used to return a pointer to current or next frame state...
Definition: stateComponent.h:294
void advanceFrame(const DtLaserDesignatorStateComponentData &data)
Definition: laserDesignatorStateComponent.h:179

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)