WSF
WsfOrbitalEvent.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 WSFORBITALMISSIONEVENT_HPP
13#define WSFORBITALMISSIONEVENT_HPP
14
15#include "wsf_space_export.h"
16
17#include "UtCalendar.hpp"
18#include "UtCloneablePtr.hpp"
19#include "UtException.hpp"
20class UtInput;
21class UtOrbitalPropagatorBase;
22#include "UtScriptClassDefine.hpp"
23#include "UtUnitTypes.hpp"
27class WsfScenario;
28#include "WsfObject.hpp"
29#include "WsfStringId.hpp"
30#include "WsfUniqueId.hpp"
31
32namespace wsf
33{
34namespace space
35{
37
38} // namespace space
39} // namespace wsf
40
49class WSF_SPACE_EXPORT WsfOrbitalEvent : public WsfUniqueId, public WsfObject
50{
51public:
54 ~WsfOrbitalEvent() override = default;
55
57 WsfOrbitalEvent* Clone() const override = 0;
58
59 static WsfOrbitalEvent* Create(const WsfScenario& aScenario, UtInput& aInput, bool aIgnoreSomeExceptions = false);
60
61 bool ProcessInput(UtInput& aInput) override;
62 virtual bool Initialize(const UtCalendar& aEpoch, const wsf::space::OrbitalMissionContext& aContext);
63
65 bool CanVerify() const { return mCanVerify; }
66
67 virtual bool VerifyCondition() const;
68
69 virtual bool EvaluatePreconditions(const wsf::space::OrbitalMissionContext& aContext) const;
70
71 virtual bool EvaluatePostconditions(const wsf::space::OrbitalMissionContext& aContext) const;
72
73 virtual bool ValidateParameterRanges(const std::string& aExecutingPlatformName) const;
74
76 bool IsComplete() const { return mIsComplete; }
77
79 bool IsCanceled() const { return mIsCanceled; }
80
82 void SetCanceled() { mIsCanceled = true; }
83
84 bool Execute(const UtCalendar& aEpoch, wsf::space::OrbitalMissionContext& aContext);
85
86 const char* GetScriptClassName() const override { return "WsfOrbitalEvent"; }
87
90 bool IsFinite() const { return mIsFinite; }
91
93 void SetFinite(bool aIsFinite) { mIsFinite = aIsFinite; }
94
96 bool HasExecuted() const { return mHasExecuted; }
97
100
103
105 // Condition::Type GetConditionType() const { return mCondition.GetType(); }
106
108 WsfStringId GetConditionString() const { return mCondition->GetConditionString(); }
109
111 void SetCondition(std::unique_ptr<wsf::space::OrbitalPropagatorCondition> aConditionPtr)
112 {
113 mCondition = std::move(aConditionPtr);
114 }
115
116 // void SetConditionType(Condition::Type aConditionType) { mCondition.SetType(aConditionType); }
117
119 const UtCalendar& GetStartTime() const { return mStartTime; }
120
122 void SetStartTime(const UtCalendar& aStartTime) { mStartTime = aStartTime; }
123
125 const UtCalendar& GetEvaluationTime() const { return mEvaluationTime; }
126
128 UtTimeValue GetDuration() const { return mDuration; }
129
130 void SetDuration(const UtTimeValue& aDuration);
131 void SetOnlyDuration(const UtTimeValue& aDuration);
132
134 UtTimeValue GetUpdateInterval() const { return mUpdateInterval; }
135
137 void SetUpdateInterval(const UtTimeValue& aUpdateInterval) { mUpdateInterval = aUpdateInterval; }
138
141 virtual const WsfOrbitalEvent* GetCurrentMissionEvent() const { return this; }
142
145 virtual WsfOrbitalEvent* GetCurrentMissionEvent() { return this; }
146
149 virtual WsfOrbitalEvent* AdvanceMissionEvent(const UtCalendar& aEpoch,
150 const wsf::space::OrbitalMissionContext& aContext);
151
154 class AdvanceMissionEventException : public UtException
155 {
156 public:
158 };
159
161 virtual bool IsSequence() const { return false; }
162
164 virtual double GetRequiredDeltaV(const UtOrbitalPropagatorBase& aPropagator) const { return 0.0; }
165
167 virtual double GetDeltaV() const { return 0.0; }
168
170 virtual bool GetNextExecutionTime(const UtCalendar& aCurrentTime,
171 const UtOrbitalPropagatorBase& aPropagator,
172 UtCalendar& aNextExecutionTime);
173
174 virtual void Accept(WsfOrbitalEventVisitor* aVisitorPtr) = 0;
175
176protected:
177 explicit WsfOrbitalEvent(const WsfScenario& aScenario);
178
179 virtual bool InitializeVariables(const UtCalendar& aCurrentTime,
180 const UtCalendar& aEvaluationTime,
181 const wsf::space::OrbitalMissionContext& aContext);
182
183 virtual bool InitializeTimes(const UtCalendar& aEpoch, const wsf::space::OrbitalMissionContext& aContext);
184
190 virtual bool ExecuteEvent(const UtCalendar& aCurrentTime, wsf::space::OrbitalMissionContext& aContext) = 0;
191
192 virtual bool EvaluateCompletion(const UtCalendar& aEpoch, const UtOrbitalPropagatorBase& aPropagator);
193
194 static WsfOrbitalEvent* Create(const WsfScenario& aScenario, WsfStringId aType);
195
196 ut::CloneablePtr<wsf::space::OrbitalPropagatorCondition> mCondition{};
201 bool mDebug;
203 UtCalendar mStartTime;
204 UtCalendar mEvaluationTime;
205 UtTimeValue mDuration;
206 UtTimeValue mUpdateInterval;
208};
209
210#endif
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
WsfObject()
This is the constructor for the WsfObject class.
Definition WsfObject.cpp:88
virtual bool ProcessInput(UtInput &aInput)
Definition WsfObject.cpp:140
Definition WsfOrbitalEventVisitor.hpp:41
AdvanceMissionEventException()
Definition WsfOrbitalEvent.cpp:194
Definition WsfOrbitalEvent.hpp:50
bool mDebug
Definition WsfOrbitalEvent.hpp:201
UtTimeValue GetUpdateInterval() const
For finite events, return the interval at which the event is to be re-evaluated.
Definition WsfOrbitalEvent.hpp:134
bool IsCanceled() const
Return whether the event is canceled.
Definition WsfOrbitalEvent.hpp:79
UtTimeValue GetDuration() const
Return the full duration of the event. If the event is impulsive, this method returns 0.
Definition WsfOrbitalEvent.hpp:128
static WsfOrbitalEvent * Create(const WsfScenario &aScenario, UtInput &aInput, bool aIgnoreSomeExceptions=false)
Definition WsfOrbitalEvent.cpp:90
void SetCanceled()
Mark the event as canceled.
Definition WsfOrbitalEvent.hpp:82
virtual double GetDeltaV() const
Get the delta V expended to execute this event; the default is to return 0.0.
Definition WsfOrbitalEvent.hpp:167
void SetUpdateInterval(const UtTimeValue &aUpdateInterval)
Set the update interval for which the event is to be re-evaluated.
Definition WsfOrbitalEvent.hpp:137
virtual bool ExecuteEvent(const UtCalendar &aCurrentTime, wsf::space::OrbitalMissionContext &aContext)=0
virtual bool EvaluateCompletion(const UtCalendar &aEpoch, const UtOrbitalPropagatorBase &aPropagator)
Definition WsfOrbitalEvent.cpp:351
void SetFinite(bool aIsFinite)
Set whether the event is finite.
Definition WsfOrbitalEvent.hpp:93
const UtCalendar & GetEvaluationTime() const
Return the nominal time to execute the event impulsively.
Definition WsfOrbitalEvent.hpp:125
virtual bool IsSequence() const
Is this MissionEvent a MissionEvent sequence (WsfMissionEventSequence)?
Definition WsfOrbitalEvent.hpp:161
bool HasExecuted() const
Return whether the event has executed at least once (i.e., Execute() has been called).
Definition WsfOrbitalEvent.hpp:96
bool mIsComplete
Definition WsfOrbitalEvent.hpp:199
virtual WsfOrbitalEvent * GetCurrentMissionEvent()
Definition WsfOrbitalEvent.hpp:145
virtual void Accept(WsfOrbitalEventVisitor *aVisitorPtr)=0
bool mIsFinite
Definition WsfOrbitalEvent.hpp:197
UtCalendar mStartTime
Can this event be verified without running in a simulation?
Definition WsfOrbitalEvent.hpp:203
void SetStartTime(const UtCalendar &aStartTime)
Set the start time to begin event execution.
Definition WsfOrbitalEvent.hpp:122
bool mCanVerify
Definition WsfOrbitalEvent.hpp:202
WsfStringId GetConditionString() const
Return the condition string for event execution.
Definition WsfOrbitalEvent.hpp:108
const WsfScenario & mScenario
Definition WsfOrbitalEvent.hpp:207
WsfOrbitalEvent(const WsfOrbitalEvent &aSrc)
Definition WsfOrbitalEvent.cpp:361
bool CanVerify() const
Return whether this event can be verified.
Definition WsfOrbitalEvent.hpp:65
virtual const WsfOrbitalEvent * GetCurrentMissionEvent() const
Definition WsfOrbitalEvent.hpp:141
bool IsComplete() const
Return whether the event is complete.
Definition WsfOrbitalEvent.hpp:76
WsfOrbitalEvent & operator=(const WsfOrbitalEvent &)=delete
UtTimeValue mDuration
Definition WsfOrbitalEvent.hpp:205
virtual bool Initialize(const UtCalendar &aEpoch, const wsf::space::OrbitalMissionContext &aContext)
Definition WsfOrbitalEvent.cpp:202
bool mHasExecuted
Definition WsfOrbitalEvent.hpp:198
void SetCondition(std::unique_ptr< wsf::space::OrbitalPropagatorCondition > aConditionPtr)
Set the condition for execution.
Definition WsfOrbitalEvent.hpp:111
bool IsFinite() const
Definition WsfOrbitalEvent.hpp:90
WsfOrbitalEvent * Clone() const override=0
Make a copy of this object.
UtCalendar mEvaluationTime
Definition WsfOrbitalEvent.hpp:204
virtual bool InitializeTimes(const UtCalendar &aEpoch, const wsf::space::OrbitalMissionContext &aContext)
Definition WsfOrbitalEvent.cpp:283
~WsfOrbitalEvent() override=default
const char * GetScriptClassName() const override
Definition WsfOrbitalEvent.hpp:86
UtTimeValue mUpdateInterval
Definition WsfOrbitalEvent.hpp:206
virtual double GetRequiredDeltaV(const UtOrbitalPropagatorBase &aPropagator) const
Return the minimum required delta-v needed to complete this event; the default is to return 0....
Definition WsfOrbitalEvent.hpp:164
const wsf::space::OrbitalPropagatorCondition & GetCondition() const
Return the condition for event execution (const).
Definition WsfOrbitalEvent.hpp:99
ut::CloneablePtr< wsf::space::OrbitalPropagatorCondition > mCondition
Definition WsfOrbitalEvent.hpp:196
wsf::space::OrbitalPropagatorCondition & GetCondition()
Return the condition for event execution (non-const).
Definition WsfOrbitalEvent.hpp:102
bool mIsCanceled
Definition WsfOrbitalEvent.hpp:200
virtual bool InitializeVariables(const UtCalendar &aCurrentTime, const UtCalendar &aEvaluationTime, const wsf::space::OrbitalMissionContext &aContext)
Definition WsfOrbitalEvent.cpp:340
const UtCalendar & GetStartTime() const
Return the time at which the event will begin executing.
Definition WsfOrbitalEvent.hpp:119
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfSpaceMoverBase.hpp:70
WsfUniqueId()
Construtor initializes the unique identifier to 0.
Definition WsfUniqueId.hpp:38
Definition WsfSpaceOrbitalMissionContext.hpp:38
Definition WsfSpaceOrbitalPropagatorCondition.hpp:38
Definition WsfAtmosphere.cpp:23
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved