mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-02-04 10:28:37 -06:00
added extension of signal activity with regards to light time travel
This commit is contained in:
@@ -42,26 +42,34 @@ namespace openspace {
|
||||
}
|
||||
|
||||
bool SignalManager::signalParser(int index) {
|
||||
|
||||
|
||||
std::string filename = _dataFiles[index];
|
||||
std::ifstream ifs(filename);
|
||||
nlohmann::json j = nlohmann::json::parse(ifs);
|
||||
|
||||
SignalManager::Signal structSignal;
|
||||
SignalManager::Signal structSignal;
|
||||
|
||||
// TODO handle the start time/ end time with regard to light time travel
|
||||
// ie. This has to be different for uplink and downlink
|
||||
// light time travel should extend endtime for uplink, and start time for downlink
|
||||
for (const auto& signalsInJson : j["Signals"]) {
|
||||
structSignal.dishName = signalsInJson["facility"].get<std::string>();
|
||||
structSignal.spacecraft = signalsInJson["projuser"].get<std::string>();
|
||||
structSignal.endTime = signalsInJson["eot"].get<std::string>();
|
||||
structSignal.startTime = signalsInJson["bot"].get<std::string>();
|
||||
structSignal.direction = signalsInJson["direction"].get<std::string>();
|
||||
structSignal.lightTravelTime = 71397.6659308273;
|
||||
for (const auto& signalsInJson : j["Signals"]) {
|
||||
structSignal.dishName = signalsInJson["facility"].get<std::string>();
|
||||
structSignal.spacecraft = signalsInJson["projuser"].get<std::string>();
|
||||
structSignal.endTime = signalsInJson["eot"].get<std::string>();
|
||||
structSignal.startTime = signalsInJson["bot"].get<std::string>();
|
||||
structSignal.direction = signalsInJson["direction"].get<std::string>();
|
||||
structSignal.lightTravelTime = 71397.6659308273;
|
||||
|
||||
//Add signals to vector of signals
|
||||
_signalData.signals.push_back(structSignal);
|
||||
if (structSignal.direction == "uplink") {
|
||||
structSignal.endTimeExtension = structSignal.lightTravelTime;
|
||||
}
|
||||
else if (structSignal.direction == "downlink") {
|
||||
structSignal.startTimeExtension = structSignal.lightTravelTime;
|
||||
}
|
||||
else if (structSignal.direction == "both") {
|
||||
structSignal.endTimeExtension = structSignal.lightTravelTime;
|
||||
structSignal.startTimeExtension = structSignal.lightTravelTime;
|
||||
}
|
||||
|
||||
//Add signal to vector of signals
|
||||
_signalData.signals.push_back(structSignal);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -45,6 +45,8 @@ namespace openspace {
|
||||
std::string direction;
|
||||
std::string startTime;
|
||||
std::string endTime;
|
||||
double startTimeExtension = 0.0;
|
||||
double endTimeExtension = 0.0;
|
||||
double timeSinceStart = 0.0;
|
||||
double lightTravelTime;
|
||||
};
|
||||
|
||||
@@ -291,8 +291,8 @@ void RenderableSignals::update(const UpdateData& data) {
|
||||
for (int i = 0; i < SignalManager::_signalData.signals.size(); i++) {
|
||||
|
||||
SignalManager::Signal currentSignal = SignalManager::_signalData.signals[i];
|
||||
if (isSignalActive(currentTime, currentSignal.startTime, currentSignal.endTime, currentSignal.lightTravelTime)) {
|
||||
currentSignal.timeSinceStart = currentTime - Time::convertTime(currentSignal.startTime);
|
||||
if (isSignalActive(currentTime, currentSignal)) {
|
||||
currentSignal.timeSinceStart = currentTime - (Time::convertTime(currentSignal.startTime) - currentSignal.startTimeExtension);
|
||||
pushSignalDataToVertexArray(currentSignal);
|
||||
}
|
||||
};
|
||||
@@ -343,10 +343,10 @@ int RenderableSignals::findFileIndexForCurrentTime(double time, std::vector<doub
|
||||
}
|
||||
|
||||
// Todo: handle signalIsSending, not only signalIsActive for the signal segments
|
||||
bool RenderableSignals::isSignalActive(double currentTime, std::string signalStartTime,
|
||||
std::string signalEndTime, double lightTravelTime) {
|
||||
double startTimeInSeconds = SpiceManager::ref().ephemerisTimeFromDate(signalStartTime);
|
||||
double endTimeInSeconds = SpiceManager::ref().ephemerisTimeFromDate(signalEndTime) + lightTravelTime;
|
||||
bool RenderableSignals::isSignalActive(double currentTime, SignalManager::Signal signal) {
|
||||
|
||||
double startTimeInSeconds = SpiceManager::ref().ephemerisTimeFromDate(signal.startTime) - signal.startTimeExtension;
|
||||
double endTimeInSeconds = SpiceManager::ref().ephemerisTimeFromDate(signal.endTime) + signal.endTimeExtension;
|
||||
|
||||
if (startTimeInSeconds <= currentTime && endTimeInSeconds >= currentTime)
|
||||
return true;
|
||||
|
||||
@@ -183,7 +183,7 @@ namespace openspace {
|
||||
UniformCache(modelViewStation, modelViewSpacecraft, projection) _uniformCache;
|
||||
|
||||
/*Checks if the current time is within a signal's start and endtime*/
|
||||
bool isSignalActive(double currentTime, std::string signalStartTime, std::string signalEndTime, double lightTravelTime);
|
||||
bool isSignalActive(double currentTime, SignalManager::Signal signal);
|
||||
|
||||
/// Size buffer for signal vector
|
||||
int _signalSizeBuffer = 10;
|
||||
|
||||
Reference in New Issue
Block a user