WSF
WsfLaserDesignations.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFLASERDESIGNATIONS_HPP
13#define WSFLASERDESIGNATIONS_HPP
14
15#include <vector>
16
17class UtInput;
18#include "UtCallback.hpp"
19#include "UtCallbackHolder.hpp"
21#include "wsf_mil_export.h"
22
23#include "WsfEvent.hpp"
24class WsfPlatform;
26#include "WsfStringId.hpp"
27
28class WSF_MIL_EXPORT WsfLaserDesignationsData
29{
30public:
34
35 void SetInputProcessed(bool aValue) { mProcessedInput = aValue; }
36 bool InputIsProcessed() const { return mProcessedInput; }
37
38 void SetDebug(bool aValue) { mDebug = aValue; }
39 bool DebugEnabled() const { return mDebug; }
40
41protected:
42 bool mDebug{false};
43 bool mProcessedInput{false};
44 bool mSendExternal{true};
45 unsigned int mUpdatePrintModulus{157};
46 double mStaleOutInterval{5.0}; // Remove a designation that is stale.
47 double mUpdateInterval{3.0};
48 double mPlatformRadius{1.5}; // Relocate the laser spot to place in front of a lased body.
49};
50
58
81
83{
84public:
85 class Spot
86 {
87 public:
89 {
90 // Based upon DIS Enumerations, but does not introduce a dependency
91 // upon its types. See SISO-REF-010-2011.1 or later:
92 cOTHER = 0,
102 };
103
104 explicit Spot();
105 Spot(const Spot& aSrc);
106 ~Spot() = default;
107
108 Spot& operator=(const Spot& aSrc) = delete; // Do not define, as assignment forbidden.
109
110 void UpdateTo(const Spot* aSrcPtr, WsfLaserDesignations* aDesignationsPtr);
111 void UpdateTo(const Spot& aSrc, WsfLaserDesignations* aDesignationsPtr);
112
113 // This should not be called outside of the WsfLaserDesignations class.
114 void LocalUpdate(WsfSimulation& aSimulation, const double aEmitterLocationWCS[3], double aPlatformRadius);
115
116 bool IsNulled() { return mPower == 0.0; }
117 void NullPower() { mPower = 0.0; }
118
119 unsigned int GetUpdateCount() const { return mSpotUpdateCount; }
120 double GetSimTimeStamp() const { return mSimTimeStamp; }
121 size_t GetDesignatedIndex() const { return mDesignatedPlatIndex; }
122 size_t GetDesignatingIndex() const { return mDesignatingPlatIndex; }
123 unsigned int GetCode() const { return mLaserCode; }
124 unsigned int GetCodeName() const { return mLaserCode; }
125 unsigned int GetDeadReckoningAlgorithm() const { return mDeadReckoningAlgorithm; }
126 double GetWavelength() const { return mWavelength; }
127 double GetFrequency() const;
128 double GetPower() const { return mPower; }
129 void GetLocationWCS(double aLocWCS[3]) const;
130 void GetTargetAdjustedLocationWCS(double aLocWCS[3], WsfLaserDesignations* aDesignationsPtr) const;
131 void GetOffsetECS(double aOffsetECS[3]) const;
132 void GetAcceleration(double aAccel[3]) const;
133 double GetOffsetDistSquared() const;
134 bool IsExternal() const { return mIsExternal; }
135 bool IsLocal() const { return !mIsExternal; }
136 bool AddLocalOcclusion() const { return mAddLocalOcclusion; }
137
138 void SetSimTimeStamp(double aValue) { mSimTimeStamp = aValue; }
139 void SetCode(unsigned int aCode) { mLaserCode = aCode; }
140 void SetCodeName(unsigned int aCodeName) { mLaserCodeName = aCodeName; }
141 void SetLocationWCS(const double aLocWCS[3]);
142 void SetOffsetECS(const double aOffsetECS[3]);
143 void SetAcceleration(const double aAccel[3]);
144 void SetPower(double aValue) { mPower = aValue; }
145 void SetWavelength(double aValue) { mWavelength = aValue; }
146 void SetFrequency(double aValue);
147 void SetAddLocalOcclusion(bool aValue) { mAddLocalOcclusion = aValue; }
148 void ClearDesignatedPlatform();
149 void SetDesignatedIndex(WsfSimulation& aSimulation, size_t aDesignatedIndex);
150 void SetDesignatingIndex(size_t aDesignatingIndex) { mDesignatingPlatIndex = aDesignatingIndex; }
151 void SetIsExternal(bool aValue) { mIsExternal = aValue; }
152 void SetIsLocal(bool aValue) { mIsExternal = !aValue; }
153 void SetDeadReckoningAlgorithm(DeadReckoningAlgorithm aValue) { mDeadReckoningAlgorithm = aValue; }
154
155 private:
156 void AddLocalOcclusion(WsfPlatform* aTargetPtr, double aPlatformRadius, const double aEmitterLocationWCS[3]);
157
158 void ComputeECS_OffsetFrom(WsfPlatform* aTargetPtr, const double aLocWCS[3]);
159
160 size_t mDesignatingPlatIndex;
161 size_t mDesignatedPlatIndex;
162 unsigned int mLaserCodeName;
163 unsigned int mLaserCode;
164 unsigned int mDeadReckoningAlgorithm;
165 unsigned int mSpotUpdateCount;
166
167 double mSimTimeStamp; // (Not in the DIS PDU)
168 double mPower;
169 double mWavelength;
170
171 double mOffsetECS[3]; // Offset valid only if mDesignatedPlatIndex != 0
172 double mLocationWCS[3];
173 double mAcceleration[3]; // (In DIS PDU, but not set currently.)
174
175 bool mIsExternal; // (Not in the DIS PDU)
176 bool mAddLocalOcclusion; // If true, apply a (crude) local occlusion model.
177 };
178
179 UtCallbackListN<void(const Spot&)> SpotUpdated;
180
183 ~WsfLaserDesignations() override;
184
185 void Update(double aSimTime);
186 bool Initialize() override;
187 void UpdateCallbacks();
188
189 // A newly added Spot returns true. This function may move the spot
190 // to a location nearer the emitter it is determined that the spot
191 // is occluded by the target. (The target is assumed a spherical ball.)
192 bool AddOrUpdate(const Spot& aDesignator, const double aEmitterLocationWCS[3]);
193
194 // Returns true if a Spot was removed.
195 bool Remove(const Spot& aDesignator);
196
197 // ======== Accessors =============
198 // These references to existing spots are not guaranteed
199 // to be persistent, and should be used immediately.
200
201 void GetAllSpots(std::vector<const Spot*>& aSpotPtrs);
202
203 void GetSpecified(unsigned int aLaserCode, double aWaveLength, std::vector<const Spot*>& aSpotPtrs);
204
205 void PlatformDeleted(double aSimTime, WsfPlatform* aPlatPtr);
206
207
208 class UpdateEvent : public WsfEvent
209 {
210 public:
211 UpdateEvent() = default;
212 UpdateEvent(double aUpdateInterval, WsfLaserDesignations* aDesignationsPtr);
213 EventDisposition Execute() override;
214
215 private:
216 WsfLaserDesignations* mDesignationsPtr;
217 double mUpdateInterval;
218 };
219
220private:
221 void RemoveP(std::list<Spot>::iterator aDesignator, std::list<Spot>::iterator& aResultIter);
222
223
224 void Register();
225
226 bool FindDesignationOf(size_t aDesignatedPlatIndex, std::list<Spot>::iterator& aIter);
227
228 bool FindDesignationFrom(size_t aDesignatingPlatIndex, std::list<Spot>::iterator& aIter);
229
230 bool mIsInitialized = false;
231 bool mIsRegistered = false;
232 double mLastUpdate = -100.0;
233
234 std::list<Spot> mSpots = std::list<Spot>();
235 UtCallbackHolder mCallbacks = UtCallbackHolder();
236};
237
238#endif
aObjectPtr Update(simTime)
pointPtr SetLocationWCS(finalPos.GetData())
Definition WsfDisDesignator.hpp:24
WsfEvent()=default
EventDisposition
Definition WsfEvent.hpp:37
double mUpdateInterval
Definition WsfLaserDesignations.hpp:47
WsfLaserDesignationsData()=default
bool InputIsProcessed() const
Definition WsfLaserDesignations.hpp:36
bool DebugEnabled() const
Definition WsfLaserDesignations.hpp:39
bool mProcessedInput
Definition WsfLaserDesignations.hpp:43
void SetInputProcessed(bool aValue)
Definition WsfLaserDesignations.hpp:35
~WsfLaserDesignationsData()=default
WsfLaserDesignationsData(const WsfLaserDesignationsData &aSrc)=default
bool mDebug
Definition WsfLaserDesignations.hpp:42
double mStaleOutInterval
Definition WsfLaserDesignations.hpp:46
void SetDebug(bool aValue)
Definition WsfLaserDesignations.hpp:38
unsigned int mUpdatePrintModulus
Definition WsfLaserDesignations.hpp:45
bool mSendExternal
Definition WsfLaserDesignations.hpp:44
double mPlatformRadius
Definition WsfLaserDesignations.hpp:48
Definition WsfLaserDesignations.hpp:86
double GetSimTimeStamp() const
Definition WsfLaserDesignations.hpp:120
void SetIsLocal(bool aValue)
Definition WsfLaserDesignations.hpp:152
Spot()
Definition WsfLaserDesignations.cpp:407
void SetPower(double aValue)
Definition WsfLaserDesignations.hpp:144
void SetAddLocalOcclusion(bool aValue)
Definition WsfLaserDesignations.hpp:147
void SetIsExternal(bool aValue)
Definition WsfLaserDesignations.hpp:151
void SetWavelength(double aValue)
Definition WsfLaserDesignations.hpp:145
void SetSimTimeStamp(double aValue)
Definition WsfLaserDesignations.hpp:138
unsigned int GetCodeName() const
Definition WsfLaserDesignations.hpp:124
bool IsNulled()
Definition WsfLaserDesignations.hpp:116
unsigned int GetDeadReckoningAlgorithm() const
Definition WsfLaserDesignations.hpp:125
bool IsExternal() const
Definition WsfLaserDesignations.hpp:134
Spot & operator=(const Spot &aSrc)=delete
void SetCode(unsigned int aCode)
Definition WsfLaserDesignations.hpp:139
bool AddLocalOcclusion() const
Definition WsfLaserDesignations.hpp:136
void SetCodeName(unsigned int aCodeName)
Definition WsfLaserDesignations.hpp:140
void SetDeadReckoningAlgorithm(DeadReckoningAlgorithm aValue)
Definition WsfLaserDesignations.hpp:153
DeadReckoningAlgorithm
Definition WsfLaserDesignations.hpp:89
@ cDRM_RVB
Definition WsfLaserDesignations.hpp:100
@ cDRM_FPW
Definition WsfLaserDesignations.hpp:94
@ cDRM_FPB
Definition WsfLaserDesignations.hpp:98
@ cDRM_FVW
Definition WsfLaserDesignations.hpp:97
@ cDRM_FVB
Definition WsfLaserDesignations.hpp:101
@ cDRM_RVW
Definition WsfLaserDesignations.hpp:96
@ cSTATIC
Definition WsfLaserDesignations.hpp:93
@ cDRM_RPB
Definition WsfLaserDesignations.hpp:99
@ cOTHER
Definition WsfLaserDesignations.hpp:92
@ cDRM_RPW
Definition WsfLaserDesignations.hpp:95
void SetDesignatingIndex(size_t aDesignatingIndex)
Definition WsfLaserDesignations.hpp:150
void UpdateTo(const Spot *aSrcPtr, WsfLaserDesignations *aDesignationsPtr)
Definition WsfLaserDesignations.cpp:498
bool IsLocal() const
Definition WsfLaserDesignations.hpp:135
size_t GetDesignatedIndex() const
Definition WsfLaserDesignations.hpp:121
void NullPower()
Definition WsfLaserDesignations.hpp:117
double GetPower() const
Definition WsfLaserDesignations.hpp:128
double GetWavelength() const
Definition WsfLaserDesignations.hpp:126
unsigned int GetUpdateCount() const
Definition WsfLaserDesignations.hpp:119
void LocalUpdate(WsfSimulation &aSimulation, const double aEmitterLocationWCS[3], double aPlatformRadius)
Definition WsfLaserDesignations.cpp:597
unsigned int GetCode() const
Definition WsfLaserDesignations.hpp:123
size_t GetDesignatingIndex() const
Definition WsfLaserDesignations.hpp:122
EventDisposition Execute() override
Definition WsfLaserDesignations.cpp:369
WsfLaserDesignations()=default
void UpdateCallbacks()
Definition WsfLaserDesignations.cpp:276
bool AddOrUpdate(const Spot &aDesignator, const double aEmitterLocationWCS[3])
Definition WsfLaserDesignations.cpp:96
bool Remove(const Spot &aDesignator)
Definition WsfLaserDesignations.cpp:202
void PlatformDeleted(double aSimTime, WsfPlatform *aPlatPtr)
Definition WsfLaserDesignations.cpp:309
void GetSpecified(unsigned int aLaserCode, double aWaveLength, std::vector< const Spot * > &aSpotPtrs)
Definition WsfLaserDesignations.cpp:389
bool Initialize() override
Definition WsfLaserDesignations.cpp:345
void GetAllSpots(std::vector< const Spot * > &aSpotPtrs)
Definition WsfLaserDesignations.cpp:377
UtCallbackListN< void(const Spot &)> SpotUpdated
Definition WsfLaserDesignations.hpp:179
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
WsfSimulationExtension()
Definition WsfSimulationExtension.cpp:23
friend class WsfSimulation
Definition WsfSimulationExtension.hpp:43
Copyrights Multiple, All Rights Reserved