From cd769952dc40159ac1e03a4e32d1c2fb078e492f Mon Sep 17 00:00:00 2001 From: Lovisa Hassler Date: Thu, 29 Nov 2018 16:59:09 -0500 Subject: [PATCH 1/3] cleanup, comment and renaming variables and functions --- modules/dsn/translation/radectranslation.cpp | 18 +++++++++--------- modules/dsn/translation/radectranslation.h | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/dsn/translation/radectranslation.cpp b/modules/dsn/translation/radectranslation.cpp index 01be7494ff..932669a247 100644 --- a/modules/dsn/translation/radectranslation.cpp +++ b/modules/dsn/translation/radectranslation.cpp @@ -110,15 +110,16 @@ glm::dvec3 RadecTranslation::convertRaDecRangeToCartesian(double ra, double dec, return raDecPos; } -glm::dvec3 RadecTranslation::transformCartesianCoordinates(glm::vec3 pos) const { +glm::dvec3 RadecTranslation::radecToCartesianCoordinates(glm::vec3 pos) const { + // get the Earth relative cartesian coordinates + // expressed in the equatorial sphere coordinate system glm::dvec3 cartesianPos = convertRaDecRangeToCartesian(pos.x, pos.y, pos.z); - + // get Earth and make sure it has been placed in OpenSpace glm::dvec3 earthPos = global::renderEngine.scene()->sceneGraphNode("Earth")->worldPosition(); glm::dmat4 translationMatrixEarth = glm::translate( glm::dmat4(1.0), glm::dvec3(earthPos) ); - - glm::dvec4 newPos = { cartesianPos, 1.0 }; - glm::dvec4 nodePos = translationMatrixEarth * _rotEquatorialSphere * newPos; + // calculate the cartesian world coordinates + glm::dvec4 nodePos = translationMatrixEarth * _rotEquatorialSphere * glm::vec4{ cartesianPos, 1.0 }; glm::dvec3 worldposition = { nodePos.x, nodePos.y, nodePos.z }; return worldposition; @@ -126,15 +127,14 @@ glm::dvec3 RadecTranslation::transformCartesianCoordinates(glm::vec3 pos) const glm::dvec3 RadecTranslation::position(const UpdateData& data) const { double endTime = 3600; - + //if true -> time is within file interval const bool isTimeInFileInterval = (data.time.j2000Seconds() >= radecManager._checkFileTime) && - (data.time.j2000Seconds() < radecManager._checkFileTime + endTime); //if true -> time is within file interval + (data.time.j2000Seconds() < radecManager._checkFileTime + endTime); if (!isTimeInFileInterval) { // The time in open space is is not in the file interval, we need to update the positions glm::vec3 pos = radecManager.getPosForTime(data.time.j2000Seconds()); - _pos = transformCartesianCoordinates(pos); - + _pos = radecToCartesianCoordinates(pos); } return _pos; } diff --git a/modules/dsn/translation/radectranslation.h b/modules/dsn/translation/radectranslation.h index dc0b101837..1193543bb8 100644 --- a/modules/dsn/translation/radectranslation.h +++ b/modules/dsn/translation/radectranslation.h @@ -54,7 +54,7 @@ private: /* Converts the Ra Dec range coordinates into cartesian coordinates*/ glm::dvec3 convertRaDecRangeToCartesian(double ra, double dec, double range) const; /*Transforms the cartesian coordinates with a rotation and a translation*/ - glm::dvec3 transformCartesianCoordinates(glm::vec3 pos) const; + glm::dvec3 radecToCartesianCoordinates(glm::vec3 pos) const; RadecManager radecManager; mutable glm::vec3 _pos; From b2f76a8941a6f2d4d67636dccb374868608425c7 Mon Sep 17 00:00:00 2001 From: Lovisa Hassler Date: Fri, 30 Nov 2018 12:06:59 -0500 Subject: [PATCH 2/3] deleted unused translation property --- modules/dsn/translation/radectranslation.cpp | 27 +++----------------- modules/dsn/translation/radectranslation.h | 3 +-- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/modules/dsn/translation/radectranslation.cpp b/modules/dsn/translation/radectranslation.cpp index 932669a247..6476a966aa 100644 --- a/modules/dsn/translation/radectranslation.cpp +++ b/modules/dsn/translation/radectranslation.cpp @@ -48,33 +48,12 @@ documentation::Documentation RadecTranslation::Documentation() { "Type", new StringEqualVerifier("RadecTranslation"), Optional::No - }, - { - PositionInfo.identifier, - new DoubleVector3Verifier, - Optional::Yes, - PositionInfo.description } } }; } -RadecTranslation::RadecTranslation() - : _position( - PositionInfo, - glm::dvec3(0.0), - glm::dvec3(-std::numeric_limits::max()), - glm::dvec3(std::numeric_limits::max()) - ) -{ - //todo, exchange this property to ra dec range probably - addProperty(_position); - - _position.onChange([this]() { - requireUpdate(); - notifyObservers(); - }); -} +RadecTranslation::RadecTranslation() = default; RadecTranslation::RadecTranslation(const ghoul::Dictionary& dictionary) : RadecTranslation() @@ -134,9 +113,9 @@ glm::dvec3 RadecTranslation::position(const UpdateData& data) const { if (!isTimeInFileInterval) { // The time in open space is is not in the file interval, we need to update the positions glm::vec3 pos = radecManager.getPosForTime(data.time.j2000Seconds()); - _pos = radecToCartesianCoordinates(pos); + _position = radecToCartesianCoordinates(pos); } - return _pos; + return _position; } } // namespace openspace diff --git a/modules/dsn/translation/radectranslation.h b/modules/dsn/translation/radectranslation.h index 1193543bb8..12375134dd 100644 --- a/modules/dsn/translation/radectranslation.h +++ b/modules/dsn/translation/radectranslation.h @@ -57,8 +57,7 @@ private: glm::dvec3 radecToCartesianCoordinates(glm::vec3 pos) const; RadecManager radecManager; - mutable glm::vec3 _pos; - properties::DVec3Property _position; + mutable glm::vec3 _position; glm::dmat4 _rotEquatorialSphere = { -0.05487554, 0.4941095, -0.8676661, 0.0, -0.8734371 , -0.4448296, -0.1980764, 0.0, From 1ff8a970ef05307f6ac5027097580c35e6f21fba Mon Sep 17 00:00:00 2001 From: Lovisa Hassler Date: Fri, 30 Nov 2018 16:45:32 -0500 Subject: [PATCH 3/3] added object identifier for radectranslation --- .../scene/solarsystem/dsn/testRADEC.asset | 6 +++-- modules/dsn/translation/radectranslation.cpp | 27 ++++++++++++++----- modules/dsn/translation/radectranslation.h | 2 ++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/data/assets/scene/solarsystem/dsn/testRADEC.asset b/data/assets/scene/solarsystem/dsn/testRADEC.asset index 7698227969..6d910b9fd2 100644 --- a/data/assets/scene/solarsystem/dsn/testRADEC.asset +++ b/data/assets/scene/solarsystem/dsn/testRADEC.asset @@ -7,14 +7,16 @@ local models = asset.syncedResource({ Identifier = "dsn_stations", Version = 1 }) +local spacecraftIdentifier = "testRADEC"; local testRADEC = { - Identifier = "testRADEC", + Identifier = spacecraftIdentifier, Transform = { Translation = { Type = "RadecTranslation", DataFolder = dataFolder, - DataFileType = "json" + DataFileType = "json", + ObjectIdentifier = spacecraftIdentifier }, Scale = { Type = "StaticScale", diff --git a/modules/dsn/translation/radectranslation.cpp b/modules/dsn/translation/radectranslation.cpp index 6476a966aa..cea5157ec7 100644 --- a/modules/dsn/translation/radectranslation.cpp +++ b/modules/dsn/translation/radectranslation.cpp @@ -27,16 +27,17 @@ #include namespace { - constexpr openspace::properties::Property::PropertyInfo PositionInfo = { - "Position", - "Position", - "Write some documentaion here!" + constexpr openspace::properties::Property::PropertyInfo ObjectIdentifierInfo = { + "ObjectIdentifier", + "Object Identifier", + "Identifier of the object that this translation is applied to." }; } // namespace namespace openspace { constexpr const char* _loggerCat = "RadecTranslation"; +constexpr const char* KeyIdentifier = "ObjectIdentifier"; documentation::Documentation RadecTranslation::Documentation() { using namespace documentation; @@ -48,6 +49,12 @@ documentation::Documentation RadecTranslation::Documentation() { "Type", new StringEqualVerifier("RadecTranslation"), Optional::No + }, + { + ObjectIdentifierInfo.identifier, + new StringVerifier, + Optional::No, + ObjectIdentifierInfo.description } } }; @@ -59,6 +66,11 @@ RadecTranslation::RadecTranslation(const ghoul::Dictionary& dictionary) : RadecTranslation() { std::unique_ptr dictionaryPtr = std::make_unique(dictionary); + + if (dictionary.hasKeyAndValue(KeyIdentifier)) { + _objectIdentifier = dictionary.value(KeyIdentifier); + } + extractData(dictionaryPtr); documentation::testSpecificationAndThrow( @@ -66,16 +78,17 @@ RadecTranslation::RadecTranslation(const ghoul::Dictionary& dictionary) dictionary, "RadecTranslation" ); + } void RadecTranslation::extractData(std::unique_ptr &dictionary){ - const char* _identifier = "spacecraft"; + constexpr const char* _identifier = "RadecTranslation"; if (!radecManager.extractMandatoryInfoFromDictionary(_identifier, dictionary)) { - LERROR(fmt::format("{}: Did not manage to extract data. (from RadecTranslation and RadecManager)", _identifier)); + LERROR(fmt::format("{}: Did not manage to extract data for {}.", _identifier, _objectIdentifier.c_str())); } else { - LDEBUG(fmt::format("{}: Successfully read data. (from RadecTranslation and RadecManager)", _identifier)); + LDEBUG(fmt::format("{}: Successfully read data for {}.", _identifier, _objectIdentifier.c_str())); } } diff --git a/modules/dsn/translation/radectranslation.h b/modules/dsn/translation/radectranslation.h index 12375134dd..302614f110 100644 --- a/modules/dsn/translation/radectranslation.h +++ b/modules/dsn/translation/radectranslation.h @@ -58,6 +58,8 @@ private: RadecManager radecManager; mutable glm::vec3 _position; + /* Identifier for object using the translation, used for logging */ + std::string _objectIdentifier; glm::dmat4 _rotEquatorialSphere = { -0.05487554, 0.4941095, -0.8676661, 0.0, -0.8734371 , -0.4448296, -0.1980764, 0.0,