WSF
WsfTerrainProfiler.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 WSFTERRAINPROFILER_HPP
13#define WSFTERRAINPROFILER_HPP
14
15#include <iostream>
16#include <list>
17#include <vector>
18
19class UtInput;
20
21#include "wsf_export.h"
22
23#include "WsfTerrain.hpp"
24
38
40{
41public:
42 WsfTerrainProfiler(const wsf::Terrain& aTerrain);
46
49 bool ProcessInput(UtInput& aInput);
50
51 using LatLonPair = std::pair<double, double>;
52 using InputRoute = std::vector<LatLonPair>;
53
54 struct Post
55 {
56 Post(double aLatDeg, double aLonDeg, double aTerrainAlt, double aNomPathAlt);
57
58 double mLatDeg; // deg
59 double mLonDeg; // deg
60
61 double mTerrainAlt; // MSL, meters
62 double mNomPathAlt; // > mTerrainHeight. Aircraft should not descend below here.
63 double mAdjPathAlt; // >= mMinPathAlt. Aircraft should strive to pass at this altitude.
64
66 double mDistToNext; // Great circle distance to the next post.
67
68 double mNomGradToNext; // Gradient from this post to next post via mMinPathAlt values.
69 double mAdjGradToNext; // Gradient from this post to next post via mAdjPathAlt values.
70
71 size_t mIndex;
72 };
73
74 using OutputRoute = std::list<Post>;
75
76 // This is a stand-alone function which does not rely on any class state information.
77 bool CreateProfile(double aTerrainClearance,
78 double aMaxGradient,
79 double aMinGradient,
80 double aMaxPostSpacing,
81 const InputRoute& aInputRoute,
82 OutputRoute& aOutputRoute,
83 bool aPrintErrors = false);
84
85 // This function does use pre-set constraints (set via accessors or stream input).
86 bool CreateProfile(const InputRoute& aInputRoute, OutputRoute& aOutputRoute, bool aPrintErrors = false);
87
88 double NominalTerrainClearance() const { return mConstraints.mNomTerrainClear; }
89 double MinimumGradient() const { return mConstraints.mMinGradient; }
90 double MaximumGradient() const { return mConstraints.mMaxGradient; }
91 double MaximumPostSpacing() const { return mConstraints.mMaxPostSpacing; }
92
93 void SetNominalTerrainClearance(double aNomTerrainClear) { mConstraints.mNomTerrainClear = aNomTerrainClear; }
94 void SetMinimumGradient(double aMinGradient) { mConstraints.mMinGradient = aMinGradient; }
95 void SetMaximumGradient(double aMaxGradient) { mConstraints.mMaxGradient = aMaxGradient; }
96 void SetMaximumPostSpacing(double aMaxPostSpacing) { mConstraints.mMaxPostSpacing = aMaxPostSpacing; }
97
98 // friend std::ostream& operator<<(std::ostream& aStream,
99 // const WsfTerrainProfiler::OutputRoute& aSrc);
100 // friend std::ostream& operator<<(std::ostream& aStream,
101 // const WsfTerrainProfiler& aSrc);
102
103protected:
104 void InsertPostsBetween(OutputRoute& aRoute, OutputRoute::iterator aStartIter, OutputRoute::iterator aStopIter);
105
106 void InsertOnePostBetween(OutputRoute& aRoute, OutputRoute::iterator aStartIter, OutputRoute::iterator aStopIter);
107
108 void ReNumber(OutputRoute& aRoute);
109
110 bool DoubleCheck(OutputRoute& aRoute, bool aPrintErrors = false);
111
112private:
113 struct Constraints
114 {
115 Constraints();
116 double mNomTerrainClear;
117 double mMaxGradient;
118 double mMinGradient;
119 double mMaxPostSpacing; // Great Circle spacing
120 };
121
122 void GetPostData(double aLatDeg, double aLonDeg, double& aTerrainAlt, double& aMinPathAlt);
123
124 void InsertPostsBetween_P(OutputRoute& aRoute,
125 double aStartLatitudeDeg,
126 double aStartLongitudeDeg,
127 double aHeadingDeg,
128 OutputRoute::iterator aPreviousIter,
129 OutputRoute::iterator aInsertAtIter,
130 size_t aNumberToInsert,
131 double aSpacing);
132
133 Constraints mConstraints;
134 wsf::Terrain mTerrain;
135};
136
137#endif
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
void SetMaximumPostSpacing(double aMaxPostSpacing)
Definition WsfTerrainProfiler.hpp:96
WsfTerrainProfiler & operator=(const WsfTerrainProfiler &)=delete
double NominalTerrainClearance() const
Definition WsfTerrainProfiler.hpp:88
void SetNominalTerrainClearance(double aNomTerrainClear)
Definition WsfTerrainProfiler.hpp:93
std::vector< LatLonPair > InputRoute
Definition WsfTerrainProfiler.hpp:52
double MinimumGradient() const
Definition WsfTerrainProfiler.hpp:89
double MaximumPostSpacing() const
Definition WsfTerrainProfiler.hpp:91
bool ProcessInput(UtInput &aInput)
Definition WsfTerrainProfiler.cpp:50
double MaximumGradient() const
Definition WsfTerrainProfiler.hpp:90
void SetMinimumGradient(double aMinGradient)
Definition WsfTerrainProfiler.hpp:94
std::list< Post > OutputRoute
Definition WsfTerrainProfiler.hpp:74
WsfTerrainProfiler(const wsf::Terrain &aTerrain)
Definition WsfTerrainProfiler.cpp:33
void SetMaximumGradient(double aMaxGradient)
Definition WsfTerrainProfiler.hpp:95
std::pair< double, double > LatLonPair
Definition WsfTerrainProfiler.hpp:51
bool CreateProfile(double aTerrainClearance, double aMaxGradient, double aMinGradient, double aMaxPostSpacing, const InputRoute &aInputRoute, OutputRoute &aOutputRoute, bool aPrintErrors=false)
Definition WsfTerrainProfiler.cpp:212
Definition WsfTerrain.hpp:336
double mTerrainAlt
Definition WsfTerrainProfiler.hpp:61
double mDistToNext
Definition WsfTerrainProfiler.hpp:66
double mHdgToNextDeg
Definition WsfTerrainProfiler.hpp:65
double mAdjGradToNext
Definition WsfTerrainProfiler.hpp:69
double mLonDeg
Definition WsfTerrainProfiler.hpp:59
double mAdjPathAlt
Definition WsfTerrainProfiler.hpp:63
double mNomPathAlt
Definition WsfTerrainProfiler.hpp:62
double mLatDeg
Definition WsfTerrainProfiler.hpp:58
size_t mIndex
Definition WsfTerrainProfiler.hpp:71
double mNomGradToNext
Definition WsfTerrainProfiler.hpp:68
Post(double aLatDeg, double aLonDeg, double aTerrainAlt, double aNomPathAlt)
Definition WsfTerrainProfiler.cpp:682
Copyrights Multiple, All Rights Reserved