18#include "wsf_export.h"
66 virtual bool Initialize(
double aSimTime = 0.0);
71 static std::unique_ptr<UtScriptClass>
CreateScriptClass(
const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
73 UtScriptTypes* aScriptTypesPtr);
81 void Remove(
unsigned int aWaypointIndex);
83 void Transform(
double aRefLat,
double aRefLon,
double aHeading);
85 void TransformNED(
double aNorth,
double aEast,
double aDown);
101 const unsigned int aFirstWaypointIndex,
102 const unsigned int aSecondWaypointIndex,
103 const double aTolerancePercentage = 0.01)
const;
105 double GetDistance(
int aFromWaypointIndex,
int aToWaypointIndex)
const;
107 double GetDistanceOffset(
const double aFromLL[2],
const double aToLL[2],
const double aPointLL[2],
double& aOffsetDist)
const;
111 double GetDistanceAlongRoute(
const double aFromLL[2],
const double aToLL[2],
double& aOffsetDist)
const;
116 const double aSegmentStartLL[2],
117 const double aSegmentEndLL[2],
118 double aWaypointLL[2]);
120 bool PointAlongRoute(
double aDistanceFromStart,
double aPointAlongRoute[2],
int& aSegmentIndex);
122 bool ProjectOntoRoute(
const double aPointLL[2],
int& aSegmentIndex,
double aProjectedLL[2],
double& aDistance)
const;
124 bool ProjectOntoRoute(
const double aPointLL[2],
double& aDistanceFromRoute,
double& aDistanceAlongRoute)
const;
126 int ProjectOntoRouteFast(
const double aPointLL[2],
double& aDistanceFromRoute,
double& aDistanceAlongRoute)
const;
130 int aClosestWaypointIndex,
132 double aProjectedLL[2]);
134 int Intersect(
WsfRoute& aOtherRoute, std::vector<RouteIntersection>& aIntersections);
141 double GetTravelTime()
const;
143 double GetTravelTimeToPosition(
const double aPosition[2])
const;
146 const WsfWaypoint& GetWaypointAt(
size_t aIndex)
const;
148 unsigned int GetWaypointIndexAt(
WsfStringId aLabelId)
const;
150 bool IsGlobalRoute()
const;
152 void SetNetworkRouteId(
unsigned int aRouteId);
159 void SetSpeed(
double aSpeed);
163 double GetSpeed(
unsigned int aIndex)
const {
return mWaypoints[aIndex].GetSpeed(); };
181 bool Empty()
const {
return mWaypoints.empty(); }
185 unsigned int GetSize()
const {
return static_cast<unsigned int>(mWaypoints.size()); }
188 void Print(ut::log::MessageStream& aStream)
const;
196 std::swap(mTotalLength, aRhs.mTotalLength);
197 std::swap(mWaypointReferenceCountPtr, aRhs.mWaypointReferenceCountPtr);
198 std::swap(mTrackedReferencePtr, aRhs.mTrackedReferencePtr);
206 if (mWaypointReferenceCountPtr ==
nullptr)
208 mWaypointReferenceCountPtr =
new UtReferenceCount(1);
210 return mWaypointReferenceCountPtr;
218 aBuff& mRouteId& mWaypoints& mLabelId& mTotalLength;
221 UtScriptRef* ScriptRef();
222 UtScriptRef* ConstScriptRef()
const;
223 UtScriptRef* ScriptRefManage();
225 static void ProcessInputBlock(UtInputBlock& aInputBlock,
WsfRoute* aRoutePtr,
bool aAllowName);
226 bool ProcessNavigationInput(UtInput& aInput);
227 void ProcessWaypoint(UtInput& aInput,
WsfWaypoint& aWaypoint);
235 Segment(
double aLat1,
double aLon1,
double aLat2,
double aLon2)
236 : mBegin(aLat1, aLon1)
241 bool operator<(
const Segment& aRhs) {
return mBegin.GetLat() < aRhs.mBegin.GetLat(); }
246 using SegmentList = std::vector<Segment>;
253 int mSegmentIndices[2];
257 using IntersectionList = std::vector<Intersection>;
259 double ComputeDistance(
unsigned int& aFirstWptIndex,
unsigned int& aSecondWptIndex);
260 void ClearWaypointReference()
262 if (mWaypointReferenceCountPtr !=
nullptr)
264 mWaypointReferenceCountPtr->RemoveStrongRef();
265 mWaypointReferenceCountPtr =
nullptr;
269 double CalculateTurnWaypointDistance(
const WsfWaypoint& aWaypoint)
const;
271 double ProcessTurnWaypoint(
const WsfWaypoint& aWaypoint,
double aNewHeading,
double aCurrentHeading);
275 static void IntersectSegments(
const SegmentList& aSegmentList, IntersectionList& aIntersections);
277 static bool GreatCircleIntersect(
const Segment& aSegment1,
const Segment& aSegment2, UtLLPos& aInteceptPosition);
279 unsigned int mRouteId = 0;
280 WaypointVector mWaypoints{};
281 bool mOffsetRouteValid =
false;
285 double mTotalLength = 0.0;
286 UtReferenceCount* mWaypointReferenceCountPtr =
nullptr;
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
WsfAuxDataEnabled()=default
void Serialize(T &aBuff)
For XIO (de)serialization.
Definition WsfObject.hpp:104
WsfObject()
This is the constructor for the WsfObject class.
Definition WsfObject.cpp:88
virtual WsfObject * Clone() const =0
WsfObject & operator=(const WsfObject &aRhs)
Assignment operator.
Definition WsfObject.cpp:258
virtual bool ProcessInput(UtInput &aInput)
Definition WsfObject.cpp:140
const char * GetScriptClassName() const override
Definition WsfObject.cpp:115
A collection of WsfWaypoint objects that represent a path to be followed.
Definition WsfRoute.hpp:40
void GetAllNodes(WaypointPtrVector &aWaypointPtrVector)
Definition WsfRoute.cpp:405
void Swap(WsfRoute &aRhs)
Swap two WsfRoute's efficiently.
Definition WsfRoute.hpp:191
double GetTotalLength() const
Get the total distance along all waypoints in the route.
Definition WsfRoute.hpp:139
std::vector< WsfWaypoint * > WaypointPtrVector
Definition WsfRoute.hpp:46
bool IsBetweenWaypoints(const double aPointLL[2], const unsigned int aFirstWaypointIndex, const unsigned int aSecondWaypointIndex, const double aTolerancePercentage=0.01) const
Definition WsfRoute.cpp:489
bool GetEndPointsAtDistance(double aDistance, int &aWaypointIndex) const
Definition WsfRoute.cpp:925
const WaypointVector & GetWaypoints() const
Definition WsfRoute.hpp:167
int ProjectOntoRouteFast(const double aPointLL[2], double &aDistanceFromRoute, double &aDistanceAlongRoute) const
Definition WsfRoute.cpp:1088
static std::unique_ptr< UtScriptClass > CreateScriptClass(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfScriptRouteClass.cpp:853
int GetAdjacentNodeIndices(int aWaypointIndex, int *aAdjacentNodeIndices) const
Definition WsfRoute.cpp:448
WayptVecIter End()
Definition WsfRoute.hpp:174
std::pair< WsfWaypoint, WsfWaypoint > WaypointSegment
Definition WsfRoute.hpp:47
static std::unique_ptr< UtScriptClass > CreateIteratorScriptClass(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfScriptRouteClass.cpp:858
int Intersect(WsfRoute &aOtherRoute, std::vector< RouteIntersection > &aIntersections)
Definition WsfRoute.cpp:1286
bool ProjectOntoRouteGivenClosestWaypoint(double aLat, double aLon, int aClosestWaypointIndex, int &aSegmentIndex, double aProjectedLL[2])
Definition WsfRoute.cpp:1250
std::vector< WsfWaypoint >::iterator WayptVecIter
Definition WsfRoute.hpp:45
static bool ProjectOntoRoute(const double aPointLL[2], const double aSegmentStartLL[2], const double aSegmentEndLL[2], double aWaypointLL[2])
Definition WsfRoute.cpp:967
double GetSpeed(unsigned int aIndex) const
Definition WsfRoute.hpp:163
void GetSubroute(const WsfWaypoint &aFromWaypoint, const WsfWaypoint &aToWaypoint, WsfRoute &aRoute) const
Definition WsfRoute.cpp:324
int FindWaypointIndex(double aLat, double aLon, double aAlt)
Definition WsfRoute.cpp:428
virtual bool Initialize(double aSimTime=0.0)
Definition WsfRoute.cpp:132
UtReferenceCount * GetWaypointReferenceCount()
Definition WsfRoute.hpp:204
void TransformNED(double aNorth, double aEast, double aDown)
Definition WsfRoute.cpp:1884
void AppendSubroute(int aStartIndex, int aEndIndex, WsfRoute &aRoute) const
Definition WsfRoute.cpp:375
void Serialize(T &aBuff)
For XIO (de)serialization.
Definition WsfRoute.hpp:215
void Transform(double aRefLat, double aRefLon, double aHeading)
Definition WsfRoute.cpp:1832
void Insert(WayptVecIter aIter, const WsfWaypoint &aWaypoint)
Definition WsfRoute.cpp:204
double GetDistanceAlongRoute(const double aFromLL[2], const double aToLL[2]) const
Definition WsfRoute.cpp:750
std::vector< WsfWaypoint > WaypointVector
Definition WsfRoute.hpp:44
double GetDistance(int aFromWaypointIndex, int aToWaypointIndex) const
Definition WsfRoute.cpp:660
WsfWaypoint & operator[](size_t aIndex)
Definition WsfRoute.cpp:108
bool PointAlongRoute(double aDistanceFromStart, double aPointAlongRoute[2], int &aSegmentIndex)
Definition WsfRoute.cpp:1215
bool Empty() const
Definition WsfRoute.hpp:181
WayptVecIter Begin()
Return an iterator to the first waypoint in the route.
Definition WsfRoute.hpp:170
void Remove(unsigned int aWaypointIndex)
Definition WsfRoute.cpp:275
unsigned int GetNetworkRouteId() const
Get the network route Id associated with this route.
Definition WsfRoute.hpp:157
static constexpr const char * cTYPE_KIND
Definition WsfRoute.hpp:42
void Append(const WsfWaypoint &aWaypoint)
Add the given point to the end of the waypoint vector.
Definition WsfRoute.cpp:141
double GetDistanceOffset(const double aFromLL[2], const double aToLL[2], const double aPointLL[2], double &aOffsetDist) const
Definition WsfRoute.cpp:678
unsigned int GetSize() const
Definition WsfRoute.hpp:185
Definition WsfWaypoint.hpp:57
WsfOpticalAttenuation::Segment Segment
Definition WsfOpticalAttenuationTables.hpp:31
Template specialization for wsf::comm::Address. Allows usage of Address in std::unordered_map/set.
Definition WsfCommAddress.hpp:185
void swap(WsfRoute &aLhs, WsfRoute &aRhs)
Definition WsfRoute.hpp:294
Definition WsfRoute.hpp:50
int mWaypointIndex2
Definition WsfRoute.hpp:52
int mWaypointIndex1
Definition WsfRoute.hpp:51
UtLLPos mPoint
Definition WsfRoute.hpp:53