WSF
WsfMeasurement.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 2016 Infoscitex, a DCS 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 WSFMEASUREMENT_HPP
13#define WSFMEASUREMENT_HPP
14
15#include "wsf_export.h"
16
17#include <map>
18#include <string>
19
20#include "UtCloneablePtr.hpp"
21class UtInput;
22#include "UtMeasurementData.hpp"
23#include "UtMemory.hpp"
24class WsfFilter;
25class WsfSimulation;
28#include "WsfTypes.hpp"
29
31class WSF_EXPORT WsfMeasurement : public UtMeasurementData
32{
33public:
35 WsfMeasurement(const WsfMeasurement& aSrc) = default;
36 virtual WsfMeasurement* Clone() const;
37
38 virtual bool ProcessInput(UtInput& aInput);
39 virtual void Update(double aSimTime){};
40
41 virtual bool IsTrack() const { return false; }
42
44
45
47 virtual WsfFilter* GetFilter() { return nullptr; }
48
50 virtual const WsfFilter* GetFilter() const { return nullptr; }
51 //
53
55
56
57 virtual bool GetExtrapolatedLocationWCS(double aSimTime, double aLocationWCS[3]) const;
58
67 template<typename T>
68 bool GetExtrapolatedData(double aSimTime, const std::string& aExtrapolationType, T& aData) const
69 {
70 const wsf::TrackExtrapolators* extrapolatorsPtr = GetTrackExtrapolators();
71 if (extrapolatorsPtr != nullptr)
72 {
73 const wsf::TrackExtrapolationBase* extrapolatorBasePtr = extrapolatorsPtr->Find(aExtrapolationType);
74 if (extrapolatorBasePtr != nullptr)
75 {
76 auto extrapolatorPtr = dynamic_cast<const wsf::TrackExtrapolation<T>*>(extrapolatorBasePtr);
77 std::unique_ptr<UtAttribute<T>> dataPtr = extrapolatorPtr->Extrapolate(aSimTime, *this);
78 if (dataPtr != nullptr)
79 {
80 aData = dataPtr->Get();
81 return true;
82 }
83 }
84 }
85 return false;
86 }
87
88
89 virtual void KinematicUpdate(double aSimTime);
90
93
96 void SetSimulation(WsfSimulation& aSimulation) { mSimulationPtr = &aSimulation; }
97
98 void SetSphericalMeasurement(double aSimTime, double aAzimuth, double aElevation, double aRange, double aRangeRate);
99
101
105
106
109 void SetSpatialDomain(const WsfSpatialDomain& aSpatialDomain) { mSpatialDomain.Set(aSpatialDomain); }
113
114protected:
115 // Default altitude methods for estimating location from range-bearing tracks
116 static double GetDefaultAltitude(WsfSpatialDomain aDomain);
117
118 using WsfSpatialDomainInformation = UtInformation<int>;
119
122
124
125private:
126 static double cDEFAULT_ALTITUDE_LAND;
127 static double cDEFAULT_ALTITUDE_AIR;
128 static double cDEFAULT_ALTITUDE_SPACE;
129 static double cDEFAULT_ALTITUDE_SURFACE;
130 static double cDEFAULT_ALTITUDE_SUBSURFACE;
131
132 mutable ut::CloneablePtr<wsf::TrackExtrapolators> mExtrapolatorsPtr{nullptr};
133};
134
135#endif
aObjectPtr GetExtrapolatedLocationWCS(simTime, pos.GetData())
WsfSpatialDomain
A collection of enumerations and type definitions that are used across a number of components.
Definition WsfTypes.hpp:32
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Implement a filter as an adapter.
Definition WsfFilter.hpp:24
virtual bool IsTrack() const
Definition WsfMeasurement.hpp:41
virtual WsfMeasurement * Clone() const
Definition WsfMeasurement.cpp:39
void SetSimulation(WsfSimulation &aSimulation)
Definition WsfMeasurement.hpp:96
WsfSpatialDomainInformation mSpatialDomain
Definition WsfMeasurement.hpp:120
const wsf::TrackExtrapolators * GetTrackExtrapolators() const
Definition WsfMeasurement.cpp:154
void SetSpatialDomain(const WsfSpatialDomain &aSpatialDomain)
Set the spatial domain of the platform.
Definition WsfMeasurement.hpp:109
double GetDefaultAltitude() const
Return a default altitude based on the platform's spatial domain.
Definition WsfMeasurement.hpp:111
virtual void Update(double aSimTime)
Definition WsfMeasurement.hpp:39
bool GetExtrapolatedData(double aSimTime, const std::string &aExtrapolationType, T &aData) const
Definition WsfMeasurement.hpp:68
UtInformation< int > WsfSpatialDomainInformation
Definition WsfMeasurement.hpp:118
WsfMeasurement(const WsfMeasurement &aSrc)=default
WsfMeasurement()
Definition WsfMeasurement.cpp:32
WsfSimulation * GetSimulation() const
Return the simulation object this measurement is associated with, or nullptr if WsfMeasurement::Initi...
Definition WsfMeasurement.hpp:92
virtual WsfFilter * GetFilter()
Return a pointer to the filter. If no filter is present, the pointer will be zero.
Definition WsfMeasurement.hpp:47
virtual const WsfFilter * GetFilter() const
Return a pointer to the filter (const version). If no filter is present, the pointer will be zero.
Definition WsfMeasurement.hpp:50
WsfSpatialDomain GetSpatialDomain() const
Get the spatial domain of the platform.
Definition WsfMeasurement.hpp:107
virtual bool ProcessInput(UtInput &aInput)
Definition WsfMeasurement.cpp:44
WsfSimulation * mSimulationPtr
Definition WsfMeasurement.hpp:123
The main controller for a simulation.
Definition WsfSimulation.hpp:109
A common base class of track extrapolation objects.
Definition WsfTrackExtrapolation.hpp:35
A base class from which to derive classes that provide extrapolation of specific data within a measur...
Definition WsfTrackExtrapolation.hpp:47
virtual std::unique_ptr< UtAttribute< T > > Extrapolate(double aSimTime, const WsfMeasurement &aData) const =0
An encapsulation of a map of wsf::TrackExtrapolation objects.
Definition WsfTrackExtrapolators.hpp:28
const wsf::TrackExtrapolationBase * Find(WsfStringId aExtrapolatorType) const
Definition WsfTrackExtrapolators.cpp:21
Copyrights Multiple, All Rights Reserved