WSF
WsfBeamDirector.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 WSFBEAMDIRECTOR_HPP
13#define WSFBEAMDIRECTOR_HPP
14
15#include "wsf_mil_export.h"
16
17#include <set>
18
19#include "WsfEM_Antenna.hpp"
20#include "WsfEM_Rcvr.hpp"
21#include "WsfEM_Xmtr.hpp"
22#include "WsfEvent.hpp"
23#include "WsfImage.hpp"
24#include "WsfLocalTrack.hpp"
25#include "WsfSensor.hpp"
26#include "WsfSensorMode.hpp"
27#include "WsfSensorModeList.hpp"
28#include "WsfStringId.hpp"
29#include "WsfWeapon.hpp"
30
66class WSF_MIL_EXPORT WsfBeamDirector : public WsfSensor
67{
68public:
69 WsfBeamDirector(WsfScenario& aScenario);
70 WsfBeamDirector(const WsfBeamDirector& aSrc) = default;
72 ~WsfBeamDirector() override = default;
73
74 WsfSensor* Clone() const override;
75
76 bool ProcessInput(UtInput& aInput) override;
77 bool Initialize(double aSimTime) override;
78 void Update(double aSimTime) override;
79
80 void TurnOff(double aSimTime) override;
81 void TurnOn(double aSimTime) override;
82
83 void PointAtTarget(double aSimTime, const WsfWeapon::FireTarget& aTarget);
84
86 const WsfTrack& GetCue() const { return mCue; }
87
89 WsfStringId GetTargetOffset() const { return mTargetOffset; }
90
92 void SetCue(const WsfTrack& aTrack) { mCue = aTrack; }
93
94 size_t GetEM_XmtrCount() const override { return 1; }
95 WsfEM_Xmtr& GetEM_Xmtr() const { return GetCurrentMode()->GetEM_Xmtr(); }
96 WsfEM_Xmtr& GetEM_Xmtr(size_t aIndex) const override { return GetCurrentMode()->GetEM_Xmtr(); }
97
98 size_t GetEM_RcvrCount() const override { return 1; };
99 WsfEM_Rcvr& GetEM_Rcvr() const { return GetCurrentMode()->GetEM_Rcvr(); }
100 WsfEM_Rcvr& GetEM_Rcvr(size_t aIndex) const override { return GetCurrentMode()->GetEM_Rcvr(); };
101
102 double GetMaxRange() const { return GetCurrentMode()->GetMaxRange(); }
103
104 void GetAzFOV(double& aMinAzFOV, double& aMaxAzFOV) const
105 {
106 return GetEM_Xmtr().GetAntenna()->GetAzimuthFieldOfView(aMinAzFOV, aMaxAzFOV);
107 }
108
109 void GetElFOV(double& aMinElFOV, double& aMaxElFOV) const
110 {
111 return GetEM_Xmtr().GetAntenna()->GetElevationFieldOfView(aMinElFOV, aMaxElFOV);
112 }
113
114 // void UpdateSlewRatesAndGimbalAngles(double aDeltaTime,
115 // double aTargetVecWCS[3]);
116
117 void PointAtWCS(double aSimTime, double aPointAtWCS[3]);
118
121 int GetTrackingState() const { return GetCurrentMode()->GetType(); }
122
123 bool IsTracking() const { return GetCurrentMode()->IsTracking(); }
124
125 bool IsImaging() const { return GetCurrentMode()->IsImaging(); }
126
129 const std::set<WsfStringId>& GetTargetsInFOV() const { return GetCurrentMode()->GetTargetsInFOV(); }
130
131 bool IsInFOR(WsfPlatform* aTargetPtr);
132
134 {
135 public:
148
152 ~WsfBeamDirectorMode() override;
153
154 WsfSensorMode* Clone() const override { return new WsfBeamDirectorMode(*this); }
155 bool ProcessInput(UtInput& aInput) override;
156 bool Initialize(double aSimTime) override;
157
158 void SetTrack(const WsfTrack& aTrack) { mTrack = aTrack; }
159
160 bool IsImaging() const { return ((mType == cLOCKED) || (mType == cLOCKED_WAITING_FOR_CUE) || (mType == cCUED)); }
161 bool IsTracking() const { return ((mType != cSCANNING) && (mType != cBREAKLOCK)); }
162
163 WsfTrack& GetTrack() { return mTrack; }
164
165 int GetType() const { return mType; }
166
167 void PointAtTargetUpdate(double aSimTime);
168
169 const std::set<WsfStringId>& GetTargetsInFOV() const { return mTargetsInFOV; }
170
171 bool AttemptToDetect(double aSimTime,
172 WsfPlatform* aTargetPtr,
173 WsfSensor::Settings& aSettings,
174 WsfSensorResult& aResult) override;
175
176 void Deselect(double aSimTime) override;
177 void Select(double aSimTime) override;
178
179 const WsfImage& GetImage();
180
182 {
183 const WsfImage::Object* objectPtr = nullptr;
184 if (!mImagePtr->GetObjects().empty())
185 {
186 objectPtr = &mImagePtr->GetObjects()[0];
187 }
188 return objectPtr;
189 }
190
191 const WsfTrack& GetTrack() const { return mTrack; }
192
193 void Update(double aSimTime);
194
196 double GetMaxRange() const { return mXcvrAntenna.GetMaximumRange(); }
197
199 WsfEM_Xmtr& GetEM_Xmtr(unsigned int aIndex) { return mTransmitter; }
200
202 WsfEM_Rcvr& GetEM_Rcvr(unsigned int aIndex) { return mReceiver; }
203
204 protected:
205 void PointAtWCS(double aSimTime, double aPointAtWCS[3]);
206
207 void CreateTrackFromResult(double aSimTime,
208 const WsfSensorResult& aResult, // in
209 WsfPlatform* aTargetPtr);
210
211 void CreateImageFromResult(double aSimTime,
212 const WsfSensorResult& aResult, // in
213 WsfPlatform* aTargetPtr);
214
218
219 private:
220 Type mType = cUNDEFINED;
221 double mLastUpdateTime = 0.0;
222 double mAngularResolution = 3.0e-5;
223 double mScanFOV_Az[2] = {-UtMath::cPI, UtMath::cPI};
224 double mScanFOV_El[2] = {-UtMath::cPI_OVER_2, UtMath::cPI_OVER_2};
225 double mTargetRadialExtent = 10.0;
226 WsfTrack mTrack = WsfTrack();
227 WsfImage* mImagePtr = nullptr;
228 int mMinPixelsForCue = 0;
229 bool mPerfectCorrelation = false;
230 std::set<WsfStringId> mTargetsInFOV = std::set<WsfStringId>(); // Used in API
231
232 }; // WsfBeamDirectorMode
233
234private:
235 void AcquireTarget(double aSimTime, const WsfTrack& aTrack);
236
237 WsfBeamDirectorMode* GetCurrentMode() const override
238 {
239 return mWsfBeamDirectorModeList[mModeListPtr->GetCurrentMode()];
240 }
241
242 // Mode-independent variables
243 WsfTrack mCue;
244 WsfStringId mTargetOffset;
245 bool mCommentsEnabled;
246 WsfBeamDirectorMode::Type mLastModeType;
247
249 std::vector<WsfBeamDirectorMode*> mWsfBeamDirectorModeList;
250}; // WsfBeamDirector
251
252#endif
aObjectPtr Update(simTime)
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
WsfBeamDirectorMode & operator=(const WsfBeamDirectorMode &)=delete
Type
Definition WsfBeamDirector.hpp:139
@ cLOCKED_WAITING_FOR_CUE
Definition WsfBeamDirector.hpp:142
@ cNUM_STATES
Definition WsfBeamDirector.hpp:145
@ cCUED
Definition WsfBeamDirector.hpp:143
@ cBREAKLOCK
Definition WsfBeamDirector.hpp:144
@ cLOCKED
Definition WsfBeamDirector.hpp:141
@ cUNDEFINED
Definition WsfBeamDirector.hpp:146
@ cSCANNING
Definition WsfBeamDirector.hpp:140
const WsfTrack & GetTrack() const
Definition WsfBeamDirector.hpp:191
bool IsTracking() const
Definition WsfBeamDirector.hpp:161
WsfEM_Rcvr mReceiver
Definition WsfBeamDirector.hpp:217
double GetMaxRange() const
Get the maximum range for this sensor.
Definition WsfBeamDirector.hpp:196
const std::set< WsfStringId > & GetTargetsInFOV() const
Definition WsfBeamDirector.hpp:169
WsfTrack & GetTrack()
Definition WsfBeamDirector.hpp:163
int GetType() const
Definition WsfBeamDirector.hpp:165
bool IsImaging() const
Definition WsfBeamDirector.hpp:160
WsfEM_Xmtr & GetEM_Xmtr()
Definition WsfBeamDirector.hpp:198
WsfEM_Xmtr & GetEM_Xmtr(unsigned int aIndex)
Definition WsfBeamDirector.hpp:199
WsfEM_Antenna mXcvrAntenna
Definition WsfBeamDirector.hpp:216
WsfEM_Rcvr & GetEM_Rcvr(unsigned int aIndex)
Definition WsfBeamDirector.hpp:202
WsfEM_Xmtr mTransmitter
Definition WsfBeamDirector.hpp:215
WsfEM_Rcvr & GetEM_Rcvr()
Definition WsfBeamDirector.hpp:201
const WsfImage::Object * GetImageObject() const
Definition WsfBeamDirector.hpp:181
WsfSensorMode * Clone() const override
Create an exact duplicate of this mode.
Definition WsfBeamDirector.hpp:154
void SetTrack(const WsfTrack &aTrack)
Definition WsfBeamDirector.hpp:158
void SetCue(const WsfTrack &aTrack)
Set the cue; this is a method of passing the track from one mode to the next.
Definition WsfBeamDirector.hpp:92
bool Initialize(double aSimTime) override
Definition WsfBeamDirector.cpp:67
WsfEM_Xmtr & GetEM_Xmtr() const
Definition WsfBeamDirector.hpp:95
WsfBeamDirector(WsfScenario &aScenario)
Definition WsfBeamDirector.cpp:40
bool IsImaging() const
Definition WsfBeamDirector.hpp:125
~WsfBeamDirector() override=default
size_t GetEM_RcvrCount() const override
Definition WsfBeamDirector.hpp:98
const std::set< WsfStringId > & GetTargetsInFOV() const
Definition WsfBeamDirector.hpp:129
double GetMaxRange() const
Definition WsfBeamDirector.hpp:102
bool ProcessInput(UtInput &aInput) override
Definition WsfBeamDirector.cpp:80
WsfBeamDirector & operator=(const WsfBeamDirector &)=delete
const WsfTrack & GetCue() const
Get the current cue.
Definition WsfBeamDirector.hpp:86
bool IsTracking() const
Definition WsfBeamDirector.hpp:123
WsfEM_Rcvr & GetEM_Rcvr(size_t aIndex) const override
Definition WsfBeamDirector.hpp:100
void GetElFOV(double &aMinElFOV, double &aMaxElFOV) const
Definition WsfBeamDirector.hpp:109
size_t GetEM_XmtrCount() const override
Definition WsfBeamDirector.hpp:94
WsfEM_Rcvr & GetEM_Rcvr() const
Definition WsfBeamDirector.hpp:99
void PointAtTarget(double aSimTime, const WsfWeapon::FireTarget &aTarget)
Definition WsfBeamDirector.cpp:169
void PointAtWCS(double aSimTime, double aPointAtWCS[3])
Definition WsfBeamDirector.cpp:136
WsfBeamDirector(const WsfBeamDirector &aSrc)=default
WsfEM_Xmtr & GetEM_Xmtr(size_t aIndex) const override
Definition WsfBeamDirector.hpp:96
void GetAzFOV(double &aMinAzFOV, double &aMaxAzFOV) const
Definition WsfBeamDirector.hpp:104
WsfStringId GetTargetOffset() const
Get the current target offset.
Definition WsfBeamDirector.hpp:89
int GetTrackingState() const
Definition WsfBeamDirector.hpp:121
Definition WsfEM_Antenna.hpp:49
void GetAzimuthFieldOfView(double &aMinAzFOV, double &aMaxAzFOV) const
Return the azimuth field of view.
Definition WsfEM_Antenna.cpp:481
void GetElevationFieldOfView(double &aMinElFOV, double &aMaxElFOV) const
Return the elevation field of view.
Definition WsfEM_Antenna.cpp:495
Definition WsfEM_Rcvr.hpp:68
@ cRF_SENSOR
Active or Semi-Active Sensing (narrowband or matched frequency sensing, e.g. radar).
Definition WsfEM_Rcvr.hpp:83
WsfEM_Antenna * GetAntenna() const
Get the pointer associated geometry object.
Definition WsfEM_XmtrRcvr.hpp:93
Definition WsfEM_Xmtr.hpp:55
@ cXF_SENSOR
Sensing.
Definition WsfEM_Xmtr.hpp:72
A nested class that represents the appearance of a single object (platform) in the image.
Definition WsfImage.hpp:40
Definition WsfImage.hpp:36
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
WsfSensorMode()
Definition WsfSensorMode.cpp:47
Definition WsfSensorResult.hpp:27
Definition WsfSensor.hpp:133
bool ProcessInput(UtInput &aInput) override
Definition WsfSensor.cpp:380
void Update(double aSimTime) override
Definition WsfSensor.cpp:497
virtual WsfSensorMode * GetCurrentMode() const
Definition WsfSensor.cpp:844
WsfSensor(const WsfScenario &aScenario)
Definition WsfSensor.cpp:52
WsfSensor * Clone() const override=0
virtual WsfEM_Xmtr & GetEM_Xmtr(size_t aIndex) const
Definition WsfSensor.cpp:714
bool Initialize(double aSimTime) override
Definition WsfSensor.cpp:255
void TurnOff(double aSimTime) override
Definition WsfSensor.cpp:523
virtual bool AttemptToDetect(double aSimTime, WsfPlatform *aTargetPtr, Settings &aSettings, WsfSensorResult &aResult)
Definition WsfSensor.cpp:224
void TurnOn(double aSimTime) override
Definition WsfSensor.cpp:563
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
A target for a weapon to fire upon.
Definition WsfWeapon.hpp:243
Copyrights Multiple, All Rights Reserved