From 351eb33d615d29bbee0ac903487a9dcabae4a848 Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 1 Aug 2022 18:25:55 +0200 Subject: [PATCH] Add the ability to use integer NAIF IDs in a SpiceTranslation --- .../missions/apollo/11/apollo11.asset | 4 ++-- .../missions/apollo/8/launch_model.asset | 2 +- .../solarsystem/missions/apollo/8/model.asset | 2 +- .../missions/apollo/8/trails.asset | 2 +- .../solarsystem/missions/insight/edl.asset | 4 ++-- .../solarsystem/missions/jwst/trail.asset | 10 ++++---- .../missions/jwst/transforms.asset | 8 +++---- .../missions/osirisrex/trail.asset | 2 +- .../missions/osirisrex/transforms.asset | 2 +- .../missions/perseverance/trail.asset | 2 +- .../missions/pioneer/pioneer10.asset | 2 +- .../missions/pioneer/pioneer11.asset | 2 +- .../planets/earth/lagrange_points/L1.asset | 2 +- .../planets/earth/lagrange_points/L2.asset | 2 +- .../planets/earth/lagrange_points/L4.asset | 2 +- .../planets/earth/lagrange_points/L5.asset | 2 +- .../space/translation/spicetranslation.cpp | 23 ++++++++++++++----- 17 files changed, 42 insertions(+), 31 deletions(-) diff --git a/data/assets/scene/solarsystem/missions/apollo/11/apollo11.asset b/data/assets/scene/solarsystem/missions/apollo/11/apollo11.asset index 5612b1f75e..f68e13b48b 100644 --- a/data/assets/scene/solarsystem/missions/apollo/11/apollo11.asset +++ b/data/assets/scene/solarsystem/missions/apollo/11/apollo11.asset @@ -23,8 +23,8 @@ local lem_model = asset.syncedResource({ --landing - 1969-07-20T20:17:40 -local apolloSpiceId = "-911" -local apolloLemSpiceId = "-911500" +local apolloSpiceId = -911 +local apolloLemSpiceId = -911500 local Apollo11Position = { Identifier = "Apollo11Position", diff --git a/data/assets/scene/solarsystem/missions/apollo/8/launch_model.asset b/data/assets/scene/solarsystem/missions/apollo/8/launch_model.asset index bc1f1af1d3..c66dfd8dc4 100644 --- a/data/assets/scene/solarsystem/missions/apollo/8/launch_model.asset +++ b/data/assets/scene/solarsystem/missions/apollo/8/launch_model.asset @@ -9,7 +9,7 @@ local models = asset.syncedResource({ Version = 4 }) -local apolloSpiceId = "-908" +local apolloSpiceId = -908 local Apollo8Launch = { Identifier = "Apollo8Launch", diff --git a/data/assets/scene/solarsystem/missions/apollo/8/model.asset b/data/assets/scene/solarsystem/missions/apollo/8/model.asset index 95686fcc26..c3ada29c00 100644 --- a/data/assets/scene/solarsystem/missions/apollo/8/model.asset +++ b/data/assets/scene/solarsystem/missions/apollo/8/model.asset @@ -9,7 +9,7 @@ local models = asset.syncedResource({ Version = 4 }) -local apolloSpiceId = "-908" +local apolloSpiceId = -908 local Apollo8 = { Identifier = "Apollo8", diff --git a/data/assets/scene/solarsystem/missions/apollo/8/trails.asset b/data/assets/scene/solarsystem/missions/apollo/8/trails.asset index f94415d757..978267062d 100644 --- a/data/assets/scene/solarsystem/missions/apollo/8/trails.asset +++ b/data/assets/scene/solarsystem/missions/apollo/8/trails.asset @@ -2,7 +2,7 @@ local earth_transforms = asset.require("scene/solarsystem/planets/earth/transfor local moon_transforms = asset.require("scene/solarsystem/planets/earth/moon/moon") local kernels = asset.require("./kernels").kernels -local apolloSpiceId = "-908" +local apolloSpiceId = -908 local LaunchTrail = { diff --git a/data/assets/scene/solarsystem/missions/insight/edl.asset b/data/assets/scene/solarsystem/missions/insight/edl.asset index c5f0e32834..4171b87b3c 100644 --- a/data/assets/scene/solarsystem/missions/insight/edl.asset +++ b/data/assets/scene/solarsystem/missions/insight/edl.asset @@ -104,7 +104,7 @@ local TranslationKeyframes = { Frame = "IAU_MARS", Kernels = iKernels, FixedDate = "2018 NOV 26 19:45:34" - }, + } } local RotationKeyframes = { @@ -770,7 +770,7 @@ local Insight_Trail = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = "-189", + Target = -189, Observer = "MARS", Frame = "IAU_MARS", Kernels = iKernels diff --git a/data/assets/scene/solarsystem/missions/jwst/trail.asset b/data/assets/scene/solarsystem/missions/jwst/trail.asset index de82f7f10a..15fb544305 100644 --- a/data/assets/scene/solarsystem/missions/jwst/trail.asset +++ b/data/assets/scene/solarsystem/missions/jwst/trail.asset @@ -29,7 +29,7 @@ local JWSTTrailLaunch = { Type = "RenderableTrailTrajectory", Translation = { Type = 'SpiceTranslation', - Target = '170', -- JWST + Target = 170, -- JWST Observer = 'EARTH', Frame = 'IAU_EARTH', Kernels = { kernels .. "webb.bsp" } @@ -62,7 +62,7 @@ local JWSTTrailCruise = { Type = "RenderableTrailTrajectory", Translation = { Type = 'SpiceTranslation', - Target = '170', -- JWST + Target = 170, -- JWST Observer = 'EARTH', Frame = 'GALACTIC', Kernels = { kernels .. "webb.bsp" } @@ -95,8 +95,8 @@ local JWSTTrailOrbit = { Type = "RenderableTrailOrbit", Translation = { Type = 'SpiceTranslation', - Target = '170', -- JWST - Observer = '392', -- L2 + Target = 170, -- JWST + Observer = 392, -- L2 Frame = 'GALACTIC', Kernels = { kernels .. "webb.bsp" } }, @@ -125,7 +125,7 @@ local JWSTSunTrail = { Type = "RenderableTrailOrbit", Translation = { Type = 'SpiceTranslation', - Target = '170', -- JWST + Target = 170, -- JWST Observer = 'SSB', Frame = 'GALACTIC', Kernels = { kernels .. "webb.bsp" } diff --git a/data/assets/scene/solarsystem/missions/jwst/transforms.asset b/data/assets/scene/solarsystem/missions/jwst/transforms.asset index 22c9384366..95e3637ed1 100644 --- a/data/assets/scene/solarsystem/missions/jwst/transforms.asset +++ b/data/assets/scene/solarsystem/missions/jwst/transforms.asset @@ -23,22 +23,22 @@ local JWSTPosition = { Keyframes = { [launchTime] = { Type = 'SpiceTranslation', - Target = '170', -- JWST + Target = 170, -- JWST Observer = 'EARTH', Frame = 'IAU_EARTH', Kernels = { kernels .. "webb.bsp" } }, [detachTime] = { Type = 'SpiceTranslation', - Target = '170', -- JWST + Target = 170, -- JWST Observer = 'EARTH', Frame = 'GALACTIC', Kernels = { kernels .. "webb.bsp" } }, [L2orbitInsertionTime] = { Type = 'SpiceTranslation', - Target = '170', -- JWST - Observer = '392', -- L2 + Target = 170, -- JWST + Observer = 392, -- L2 Frame = 'GALACTIC', Kernels = { kernels .. "webb.bsp" } } diff --git a/data/assets/scene/solarsystem/missions/osirisrex/trail.asset b/data/assets/scene/solarsystem/missions/osirisrex/trail.asset index fa15af8c29..5238d3f6a9 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/trail.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/trail.asset @@ -4,7 +4,7 @@ local earthTransforms = asset.require("scene/solarsystem/planets/earth/transform -local BENNU_BODY = "2101955" +local BENNU_BODY = 2101955 local OsirisRexTrailEarth = { Identifier = "OsirisRexTrailEarth", diff --git a/data/assets/scene/solarsystem/missions/osirisrex/transforms.asset b/data/assets/scene/solarsystem/missions/osirisrex/transforms.asset index 9875a0058e..cb7d63a118 100644 --- a/data/assets/scene/solarsystem/missions/osirisrex/transforms.asset +++ b/data/assets/scene/solarsystem/missions/osirisrex/transforms.asset @@ -2,7 +2,7 @@ local transforms = asset.require("scene/solarsystem/sun/transforms") -local BENNU_BODY = "2101955" +local BENNU_BODY = 2101955 local BennuBarycenter = { Identifier = "BennuBarycenter", diff --git a/data/assets/scene/solarsystem/missions/perseverance/trail.asset b/data/assets/scene/solarsystem/missions/perseverance/trail.asset index 7b2b8f2c36..2df94fa738 100644 --- a/data/assets/scene/solarsystem/missions/perseverance/trail.asset +++ b/data/assets/scene/solarsystem/missions/perseverance/trail.asset @@ -8,7 +8,7 @@ local kernels = asset.syncedResource({ Version = 2 }) -local perseverance_id = "-168" +local perseverance_id = -168 local m2020_kernels = { kernels .. "m2020.tf", diff --git a/data/assets/scene/solarsystem/missions/pioneer/pioneer10.asset b/data/assets/scene/solarsystem/missions/pioneer/pioneer10.asset index b3c11dab39..210e6091b6 100644 --- a/data/assets/scene/solarsystem/missions/pioneer/pioneer10.asset +++ b/data/assets/scene/solarsystem/missions/pioneer/pioneer10.asset @@ -11,7 +11,7 @@ local kernelsFolder = asset.syncedResource({ local kernelsList = { kernelsFolder .. "p10-a.bsp" } -local Pioneer10NAIF = "-23" +local Pioneer10NAIF = -23 local Pioneer10 = { Identifier = "Pioneer_10", diff --git a/data/assets/scene/solarsystem/missions/pioneer/pioneer11.asset b/data/assets/scene/solarsystem/missions/pioneer/pioneer11.asset index b04d3471be..53903a88c1 100644 --- a/data/assets/scene/solarsystem/missions/pioneer/pioneer11.asset +++ b/data/assets/scene/solarsystem/missions/pioneer/pioneer11.asset @@ -14,7 +14,7 @@ local kernelsList = { kernelsFolder .. "p11_sat336.bsp" } -local Pioneer11NAIF = "-24" +local Pioneer11NAIF = -24 local Pioneer11 = { Identifier = "Pioneer_11", diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/L1.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/L1.asset index a5b400333f..290b9518de 100644 --- a/data/assets/scene/solarsystem/planets/earth/lagrange_points/L1.asset +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/L1.asset @@ -21,7 +21,7 @@ local L1Position = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "391", -- L1 + Target = 391, -- L1 Observer = "SSB", Kernels = kernels .. "L1_de431.bsp" } diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/L2.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/L2.asset index db02b15b11..62a317284a 100644 --- a/data/assets/scene/solarsystem/planets/earth/lagrange_points/L2.asset +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/L2.asset @@ -21,7 +21,7 @@ local L2Position = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "392", -- L2 + Target = 392, -- L2 Observer = "SSB", Kernels = kernels .. "L2_de431.bsp" } diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/L4.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/L4.asset index 4a9d81f8fa..f1badc1ca5 100644 --- a/data/assets/scene/solarsystem/planets/earth/lagrange_points/L4.asset +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/L4.asset @@ -21,7 +21,7 @@ local L4Position = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "394", -- L4 + Target = 394, -- L4 Observer = "SSB", Kernels = kernels .. "L4_de431.bsp" } diff --git a/data/assets/scene/solarsystem/planets/earth/lagrange_points/L5.asset b/data/assets/scene/solarsystem/planets/earth/lagrange_points/L5.asset index 69e3bb4f5e..ef8486dec2 100644 --- a/data/assets/scene/solarsystem/planets/earth/lagrange_points/L5.asset +++ b/data/assets/scene/solarsystem/planets/earth/lagrange_points/L5.asset @@ -21,7 +21,7 @@ local L5Position = { Transform = { Translation = { Type = "SpiceTranslation", - Target = "395", -- L5 + Target = 395, -- L5 Observer = "SSB", Kernels = kernels .. "L5_de431.bsp" } diff --git a/modules/space/translation/spicetranslation.cpp b/modules/space/translation/spicetranslation.cpp index f1097a6861..cc4fed9291 100644 --- a/modules/space/translation/spicetranslation.cpp +++ b/modules/space/translation/spicetranslation.cpp @@ -35,6 +35,7 @@ #include #include #include +#include namespace { constexpr openspace::properties::Property::PropertyInfo TargetInfo = { @@ -69,12 +70,10 @@ namespace { struct [[codegen::Dictionary(SpiceTranslation)]] Parameters { // [[codegen::verbatim(TargetInfo.description)]] - std::string target - [[codegen::annotation("A valid SPICE NAIF name or identifier")]]; + std::variant target; // [[codegen::verbatim(ObserverInfo.description)]] - std::string observer - [[codegen::annotation("A valid SPICE NAIF name or identifier")]]; + std::variant observer; std::optional frame [[codegen::annotation("A valid SPICE NAIF name for a reference frame")]]; @@ -162,8 +161,20 @@ SpiceTranslation::SpiceTranslation(const ghoul::Dictionary& dictionary) _fixedDate = p.fixedDate.value_or(_fixedDate); addProperty(_fixedDate); - _target = p.target; - _observer = p.observer; + if (std::holds_alternative(p.target)) { + _target = std::get(p.target); + } + else { + _target = std::to_string(std::get(p.target)); + } + + if (std::holds_alternative(p.observer)) { + _observer = std::get(p.observer); + } + else { + _observer = std::to_string(std::get(p.observer)); + } + _frame = p.frame.value_or(_frame); }