From 29e77534c7656ed93dcaff43d58657bb47d6cab2 Mon Sep 17 00:00:00 2001 From: Emma Broman Date: Tue, 2 Mar 2021 08:11:49 +0100 Subject: [PATCH] Make use of new verifiers (Color and File) (#1510) * Use codegen for renderable discs * Utilize color and file verifier * Add missing property assignment in exoplanets module --- .../rendering/grids/renderableboxgrid.cpp | 2 +- .../base/rendering/grids/renderablegrid.cpp | 2 +- .../rendering/grids/renderableradialgrid.cpp | 2 +- .../grids/renderablesphericalgrid.cpp | 2 +- .../rendering/renderablecartesianaxes.cpp | 27 ++----- modules/base/rendering/renderabledisc.cpp | 60 ++++++---------- modules/base/rendering/renderablelabels.cpp | 4 +- modules/base/rendering/renderablenodeline.cpp | 4 +- modules/base/rendering/renderableplane.cpp | 2 +- .../rendering/renderablebillboardscloud.cpp | 4 +- .../rendering/renderabledumeshes.cpp | 2 +- .../rendering/renderableplanescloud.cpp | 4 +- .../rendering/renderablepoints.cpp | 2 +- modules/exoplanets/exoplanetsmodule.cpp | 39 ++++++---- .../rendering/renderableorbitdisc.cpp | 69 +++++++----------- .../tasks/exoplanetsdatapreparationtask.cpp | 9 +-- .../src/globelabelscomponent.cpp | 2 +- modules/globebrowsing/src/layer.cpp | 2 +- modules/globebrowsing/src/layeradjustment.cpp | 2 +- .../renderableconstellationbounds.cpp | 2 +- .../rendering/renderablehabitablezone.cpp | 71 ++++++------------- .../rendering/renderableorbitalkepler.cpp | 2 +- .../dashboard/dashboarditeminstruments.cpp | 4 +- .../rendering/renderablecrawlingline.cpp | 4 +- .../rendering/renderableshadowcylinder.cpp | 4 +- src/engine/openspaceengine_lua.inl | 5 +- tests/test_lua_createsinglecolorimage.cpp | 18 ++--- 27 files changed, 141 insertions(+), 209 deletions(-) diff --git a/modules/base/rendering/grids/renderableboxgrid.cpp b/modules/base/rendering/grids/renderableboxgrid.cpp index 518f87b248..c9a474306b 100644 --- a/modules/base/rendering/grids/renderableboxgrid.cpp +++ b/modules/base/rendering/grids/renderableboxgrid.cpp @@ -58,7 +58,7 @@ namespace { struct [[codegen::Dictionary(RenderableBoxGrid)]] Parameters { // [[codegen::verbatim(ColorInfo.description)]] - std::optional color; + std::optional color [[codegen::color()]]; // [[codegen::verbatim(LineWidthInfo.description)]] std::optional lineWidth; diff --git a/modules/base/rendering/grids/renderablegrid.cpp b/modules/base/rendering/grids/renderablegrid.cpp index 861b54598b..4c7b1e598c 100644 --- a/modules/base/rendering/grids/renderablegrid.cpp +++ b/modules/base/rendering/grids/renderablegrid.cpp @@ -65,7 +65,7 @@ namespace { struct [[codegen::Dictionary(RenderableGrid)]] Parameters { // [[codegen::verbatim(ColorInfo.description)]] - std::optional color; + std::optional color [[codegen::color()]]; // [[codegen::verbatim(SegmentsInfo.description)]] std::optional segments; diff --git a/modules/base/rendering/grids/renderableradialgrid.cpp b/modules/base/rendering/grids/renderableradialgrid.cpp index 1c90c090a1..73993cd951 100644 --- a/modules/base/rendering/grids/renderableradialgrid.cpp +++ b/modules/base/rendering/grids/renderableradialgrid.cpp @@ -80,7 +80,7 @@ namespace { struct [[codegen::Dictionary(RenderableRadialGrid)]] Parameters { // [[codegen::verbatim(ColorInfo.description)]] - std::optional color; + std::optional color [[codegen::color()]]; // [[codegen::verbatim(GridSegmentsInfo.description)]] std::optional gridSegments; diff --git a/modules/base/rendering/grids/renderablesphericalgrid.cpp b/modules/base/rendering/grids/renderablesphericalgrid.cpp index 1580276c27..878e05972d 100644 --- a/modules/base/rendering/grids/renderablesphericalgrid.cpp +++ b/modules/base/rendering/grids/renderablesphericalgrid.cpp @@ -59,7 +59,7 @@ namespace { struct [[codegen::Dictionary(RenderableSphericalGrid)]] Parameters { // [[codegen::verbatim(ColorInfo.description)]] - std::optional color; + std::optional color [[codegen::color()]]; // [[codegen::verbatim(SegmentsInfo.description)]] std::optional segments; diff --git a/modules/base/rendering/renderablecartesianaxes.cpp b/modules/base/rendering/renderablecartesianaxes.cpp index 67b4f00783..2a6a985522 100644 --- a/modules/base/rendering/renderablecartesianaxes.cpp +++ b/modules/base/rendering/renderablecartesianaxes.cpp @@ -60,13 +60,13 @@ namespace { struct [[codegen::Dictionary(RenderableCartesianAxes)]] Parameters { // [[codegen::verbatim(XColorInfo.description)]] - std::optional xColor; + std::optional xColor [[codegen::color()]]; // [[codegen::verbatim(YColorInfo.description)]] - std::optional yColor; + std::optional yColor [[codegen::color()]]; // [[codegen::verbatim(ZColorInfo.description)]] - std::optional zColor; + std::optional zColor [[codegen::color()]]; }; #include "renderablecartesianaxes_codegen.cpp" @@ -83,24 +83,9 @@ documentation::Documentation RenderableCartesianAxes::Documentation() { RenderableCartesianAxes::RenderableCartesianAxes(const ghoul::Dictionary& dictionary) : Renderable(dictionary) , _program(nullptr) - , _xColor( - XColorInfo, - glm::vec3(1.f, 0.f, 0.f), - glm::vec3(0.f), - glm::vec3(1.f) - ) - , _yColor( - YColorInfo, - glm::vec3(0.f, 1.f, 0.f), - glm::vec3(0.f), - glm::vec3(1.f) - ) - , _zColor( - ZColorInfo, - glm::vec3(0.f, 0.f, 1.f), - glm::vec3(0.f), - glm::vec3(1.f) - ) + , _xColor(XColorInfo, glm::vec3(1.f, 0.f, 0.f), glm::vec3(0.f), glm::vec3(1.f)) + , _yColor(YColorInfo, glm::vec3(0.f, 1.f, 0.f), glm::vec3(0.f), glm::vec3(1.f)) + , _zColor(ZColorInfo, glm::vec3(0.f, 0.f, 1.f), glm::vec3(0.f), glm::vec3(1.f)) { const Parameters p = codegen::bake(dictionary); _xColor = p.xColor.value_or(_xColor); diff --git a/modules/base/rendering/renderabledisc.cpp b/modules/base/rendering/renderabledisc.cpp index c3de8be2b1..d15ed1deb9 100644 --- a/modules/base/rendering/renderabledisc.cpp +++ b/modules/base/rendering/renderabledisc.cpp @@ -35,6 +35,8 @@ #include #include #include +#include +#include namespace { constexpr const char _loggerCat[] = "RenderableDisc"; @@ -63,36 +65,26 @@ namespace { "based on the given size and this value should be set between 0 and 1. A value " "of 1 results in a full circle and 0.5 a disc with an inner radius of 0.5*size." }; + + struct [[codegen::Dictionary(RenderableDisc)]] Parameters { + // [[codegen::verbatim(TextureInfo.description)]] + std::filesystem::path texture; + + // [[codegen::verbatim(SizeInfo.description)]] + std::optional size; + + // [[codegen::verbatim(WidthInfo.description)]] + std::optional width; + }; +#include "renderabledisc_codegen.cpp" } // namespace namespace openspace { documentation::Documentation RenderableDisc::Documentation() { - using namespace documentation; - return { - "Renderable Disc", - "renderable_disc", - { - { - TextureInfo.identifier, - new StringVerifier, - Optional::No, - TextureInfo.description - }, - { - SizeInfo.identifier, - new DoubleVerifier, - Optional::Yes, - SizeInfo.description - }, - { - WidthInfo.identifier, - new DoubleVerifier, - Optional::Yes, - WidthInfo.description - } - } - }; + documentation::Documentation doc = codegen::doc(); + doc.id = "base_renderable_disc"; + return doc; } RenderableDisc::RenderableDisc(const ghoul::Dictionary& dictionary) @@ -101,27 +93,20 @@ RenderableDisc::RenderableDisc(const ghoul::Dictionary& dictionary) , _size(SizeInfo, 1.f, 0.f, 1e13f) , _width(WidthInfo, 0.5f, 0.f, 1.f) { - documentation::testSpecificationAndThrow( - Documentation(), - dictionary, - "RenderableDisc" - ); + const Parameters p = codegen::bake(dictionary); - _texturePath = absPath(dictionary.value(TextureInfo.identifier)); + _texturePath = p.texture.string(); _texturePath.onChange([&]() { _texture->loadFromFile(_texturePath); }); addProperty(_texturePath); - if (dictionary.hasKey(SizeInfo.identifier)) { - _size = static_cast(dictionary.value(SizeInfo.identifier)); - } + _size = p.size.value_or(_size); setBoundingSphere(_size); _size.onChange([&]() { _planeIsDirty = true; }); addProperty(_size); - if (dictionary.hasKey(WidthInfo.identifier)) { - _width = static_cast(dictionary.value(WidthInfo.identifier)); - } + _width = p.width.value_or(_width); addProperty(_width); + addProperty(_opacity); setRenderBin(Renderable::RenderBin::PostDeferredTransparent); @@ -173,7 +158,6 @@ void RenderableDisc::render(const RenderData& data, RendererTasks&) { data.camera.projectionMatrix() * glm::mat4(modelViewTransform) ); _shader->setUniform(_uniformCache.width, _width); - _shader->setUniform(_uniformCache.opacity, _opacity); ghoul::opengl::TextureUnit unit; diff --git a/modules/base/rendering/renderablelabels.cpp b/modules/base/rendering/renderablelabels.cpp index d5a240cc74..42c0ea0ab0 100644 --- a/modules/base/rendering/renderablelabels.cpp +++ b/modules/base/rendering/renderablelabels.cpp @@ -194,7 +194,7 @@ namespace { std::optional labelOrientationOption; // [[codegen::verbatim(LabelColorInfo.description)]] - std::optional labelColor; + std::optional labelColor [[codegen::color()]]; // [[codegen::verbatim(LabelTextInfo.description)]] std::optional labelText; @@ -511,7 +511,7 @@ RenderableLabels::RenderableLabels(const ghoul::Dictionary& dictionary) _fadeEndUnitOption = AU; } addProperty(_fadeEndUnitOption); - + _fadeEndSpeed = p.fadeEndSpeed.value_or(_fadeEndSpeed); addProperty(_fadeEndSpeed); } diff --git a/modules/base/rendering/renderablenodeline.cpp b/modules/base/rendering/renderablenodeline.cpp index 779c28e226..b8eaed01d6 100644 --- a/modules/base/rendering/renderablenodeline.cpp +++ b/modules/base/rendering/renderablenodeline.cpp @@ -93,7 +93,7 @@ namespace { std::optional endNode; // [[codegen::verbatim(LineColorInfo.description)]] - std::optional color; + std::optional color [[codegen::color()]]; // [[codegen::verbatim(LineWidthInfo.description)]] std::optional lineWidth; @@ -128,7 +128,7 @@ RenderableNodeLine::RenderableNodeLine(const ghoul::Dictionary& dictionary) _lineColor = p.color.value_or(_lineColor); addProperty(_lineColor); - + _lineWidth = p.lineWidth.value_or(_lineWidth); addProperty(_lineWidth); diff --git a/modules/base/rendering/renderableplane.cpp b/modules/base/rendering/renderableplane.cpp index b718506c3e..5254b1f8b4 100644 --- a/modules/base/rendering/renderableplane.cpp +++ b/modules/base/rendering/renderableplane.cpp @@ -76,7 +76,7 @@ namespace { // [[codegen::verbatim(SizeInfo.description)]] float size; - + enum class BlendMode { Normal, Additive diff --git a/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp b/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp index 7ee516e26b..d49e7682f8 100644 --- a/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp +++ b/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp @@ -234,7 +234,7 @@ namespace { std::optional file; // [[codegen::verbatim(ColorInfo.description)]] - glm::vec3 color; + glm::vec3 color [[codegen::color()]]; // [[codegen::verbatim(SpriteTextureInfo.description)]] std::optional texture; @@ -277,7 +277,7 @@ namespace { std::optional drawLabels; // [[codgen::verbatim(TextColorInfo.description)]] - std::optional textColor; + std::optional textColor [[codegen::color()]]; // [[codgen::verbatim(TextOpacityInfo.description)]] std::optional textOpacity; diff --git a/modules/digitaluniverse/rendering/renderabledumeshes.cpp b/modules/digitaluniverse/rendering/renderabledumeshes.cpp index 64b6dbc467..661de9600d 100644 --- a/modules/digitaluniverse/rendering/renderabledumeshes.cpp +++ b/modules/digitaluniverse/rendering/renderabledumeshes.cpp @@ -151,7 +151,7 @@ namespace { std::optional unit; // [[codegen::verbatim(TextColorInfo.description)]] - std::optional textColor; + std::optional textColor [[codegen::color()]]; // [[codegen::verbatim(TextOpacityInfo.description)]] std::optional textOpacity; diff --git a/modules/digitaluniverse/rendering/renderableplanescloud.cpp b/modules/digitaluniverse/rendering/renderableplanescloud.cpp index 97f27b3264..b190a78757 100644 --- a/modules/digitaluniverse/rendering/renderableplanescloud.cpp +++ b/modules/digitaluniverse/rendering/renderableplanescloud.cpp @@ -180,7 +180,7 @@ namespace { std::optional scaleFactor; // [[codegen::verbatim(TextColorInfo.description)]] - std::optional textColor; + std::optional textColor [[codegen::color()]]; // [[codegen::verbatim(TextOpacityInfo.description)]] std::optional textOpacity; @@ -381,7 +381,7 @@ RenderablePlanesCloud::RenderablePlanesCloud(const ghoul::Dictionary& dictionary } _planeMinSize = p.planeMinSize.value_or(_planeMinSize); - + if (p.planeMinSize.has_value()) { addProperty(_planeMinSize); } diff --git a/modules/digitaluniverse/rendering/renderablepoints.cpp b/modules/digitaluniverse/rendering/renderablepoints.cpp index e56a454603..906f6f84f4 100644 --- a/modules/digitaluniverse/rendering/renderablepoints.cpp +++ b/modules/digitaluniverse/rendering/renderablepoints.cpp @@ -88,7 +88,7 @@ namespace { std::string file; // Astronomical Object Color (r,g,b) - glm::vec3 color; + glm::vec3 color [[codegen::color()]]; enum class Unit { Meter [[codegen::key("m")]], diff --git a/modules/exoplanets/exoplanetsmodule.cpp b/modules/exoplanets/exoplanetsmodule.cpp index 98afb68e84..80909f7e86 100644 --- a/modules/exoplanets/exoplanetsmodule.cpp +++ b/modules/exoplanets/exoplanetsmodule.cpp @@ -33,8 +33,7 @@ #include #include #include -#include -#include +#include #include "exoplanetsmodule_lua.inl" @@ -115,19 +114,19 @@ namespace { struct [[codegen::Dictionary(ExoplanetsModule)]] Parameters { // [[codegen::verbatim(DataFolderInfo.description)]] - std::optional dataFolder; + std::optional dataFolder [[codegen::directory()]]; // [[codegen::verbatim(StarTextureInfo.description)]] - std::optional starTexture; + std::optional starTexture; // [[codegen::verbatim(NoDataTextureInfo.description)]] - std::optional noDataTexture; + std::optional noDataTexture; // [[codegen::verbatim(OrbitDiscTextureInfo.description)]] - std::optional orbitDiscTexture; + std::optional orbitDiscTexture; // [[codegen::verbatim(HabitableZoneTextureInfo.description)]] - std::optional habitableZoneTexture; + std::optional habitableZoneTexture; // [[codegen::verbatim(ShowComparisonCircleInfo.description)]] std::optional showComparisonCircle; @@ -258,16 +257,32 @@ scripting::LuaLibrary ExoplanetsModule::luaLibrary() const { void ExoplanetsModule::internalInitialize(const ghoul::Dictionary& dict) { const Parameters p = codegen::bake(dict); - _exoplanetsDataFolder = p.dataFolder.value_or(_exoplanetsDataFolder); - _starTexturePath = p.starTexture.value_or(_starTexturePath); - _noDataTexturePath = p.noDataTexture.value_or(_noDataTexturePath); - _orbitDiscTexturePath = p.orbitDiscTexture.value_or(_orbitDiscTexturePath); - _habitableZoneTexturePath = p.habitableZoneTexture.value_or(_habitableZoneTexturePath); + if (p.dataFolder.has_value()) { + _exoplanetsDataFolder = p.dataFolder.value().string(); + } + + if (p.starTexture.has_value()) { + _starTexturePath = p.starTexture.value().string(); + } + + if (p.noDataTexture.has_value()) { + _noDataTexturePath = p.noDataTexture.value().string(); + } + + if (p.orbitDiscTexture.has_value()) { + _orbitDiscTexturePath = p.orbitDiscTexture.value().string(); + } + + if (p.habitableZoneTexture.has_value()) { + _habitableZoneTexturePath = p.habitableZoneTexture.value().string(); + } _showComparisonCircle = p.showComparisonCircle.value_or(_showComparisonCircle); _showHabitableZone = p.showHabitableZone.value_or(_showHabitableZone); _useOptimisticZone = p.useOptimisticZone.value_or(_useOptimisticZone); + _habitableZoneOpacity = p.habitableZoneOpacity.value_or(_habitableZoneOpacity); + auto fTask = FactoryManager::ref().factory(); auto fRenderable = FactoryManager::ref().factory(); ghoul_assert(fTask, "No task factory existed"); diff --git a/modules/exoplanets/rendering/renderableorbitdisc.cpp b/modules/exoplanets/rendering/renderableorbitdisc.cpp index 1ad0e6a85b..7581788fac 100644 --- a/modules/exoplanets/rendering/renderableorbitdisc.cpp +++ b/modules/exoplanets/rendering/renderableorbitdisc.cpp @@ -36,6 +36,8 @@ #include #include #include +#include +#include namespace { constexpr const std::array UniformNames = { @@ -71,42 +73,29 @@ namespace { "relative to the size of the semi-major axis. That is, 0 means no deviation " "from the semi-major axis and 1 is a whole semi-major axis's worth of deviation." }; + + struct [[codegen::Dictionary(RenderableOrbitDisc)]] Parameters { + // [[codegen::verbatim(TextureInfo.description)]] + std::filesystem::path texture; + + // [[codegen::verbatim(SizeInfo.description)]] + float size; + + // [[codegen::verbatim(EccentricityInfo.description)]] + float eccentricity; + + // [[codegen::verbatim(OffsetInfo.description)]] + std::optional offset; + }; +#include "renderableorbitdisc_codegen.cpp" } // namespace namespace openspace { documentation::Documentation RenderableOrbitDisc::Documentation() { - using namespace documentation; - return { - "Renderable Orbit Disc", - "exoplanets_renderable_orbit_disc", - { - { - TextureInfo.identifier, - new StringVerifier, - Optional::No, - TextureInfo.description - }, - { - SizeInfo.identifier, - new DoubleVerifier, - Optional::No, - SizeInfo.description - }, - { - EccentricityInfo.identifier, - new DoubleVerifier, - Optional::No, - EccentricityInfo.description - }, - { - OffsetInfo.identifier, - new DoubleVector2Verifier, - Optional::Yes, - OffsetInfo.description - } - } - }; + documentation::Documentation doc = codegen::doc(); + doc.id = "exoplanets_renderableorbitdisc"; + return doc; } RenderableOrbitDisc::RenderableOrbitDisc(const ghoul::Dictionary& dictionary) @@ -116,31 +105,23 @@ RenderableOrbitDisc::RenderableOrbitDisc(const ghoul::Dictionary& dictionary) , _eccentricity(EccentricityInfo, 0.f, 0.f, 1.f) , _offset(OffsetInfo, glm::vec2(0.f), glm::vec2(0.f), glm::vec2(1.f)) { - documentation::testSpecificationAndThrow( - Documentation(), - dictionary, - "RenderableOrbitDisc" - ); + const Parameters p = codegen::bake(dictionary); - if (dictionary.hasKey(OffsetInfo.identifier)) { - _offset = dictionary.value(OffsetInfo.identifier); - } + _offset = p.offset.value_or(_offset); _offset.onChange([&]() { _planeIsDirty = true; }); addProperty(_offset); - _size = static_cast(dictionary.value(SizeInfo.identifier)); + _size = p.size; _size.onChange([&]() { _planeIsDirty = true; }); addProperty(_size); setBoundingSphere(_size + _offset.value().y * _size); - _texturePath = absPath(dictionary.value(TextureInfo.identifier)); + _texturePath = p.texture.string(); _texturePath.onChange([&]() { _texture->loadFromFile(_texturePath); }); addProperty(_texturePath); - _eccentricity = static_cast( - dictionary.value(EccentricityInfo.identifier) - ); + _eccentricity = p.eccentricity; _eccentricity.onChange([&]() { _planeIsDirty = true; }); addProperty(_eccentricity); diff --git a/modules/exoplanets/tasks/exoplanetsdatapreparationtask.cpp b/modules/exoplanets/tasks/exoplanetsdatapreparationtask.cpp index 058122d86f..837e9cafa3 100644 --- a/modules/exoplanets/tasks/exoplanetsdatapreparationtask.cpp +++ b/modules/exoplanets/tasks/exoplanetsdatapreparationtask.cpp @@ -449,13 +449,13 @@ documentation::Documentation ExoplanetsDataPreparationTask::documentation() { { { KeyInputDataFile, - new StringAnnotationVerifier("A valid filepath"), + new FileVerifier, Optional::No, "The csv file to extract data from" }, { KeyInputSpeck, - new StringAnnotationVerifier("A file path to a speck file"), + new FileVerifier, Optional::No, "The speck file with star locations" }, @@ -473,9 +473,10 @@ documentation::Documentation ExoplanetsDataPreparationTask::documentation() { }, { KeyTeffToBv, - new StringAnnotationVerifier("A valid filepath"), + new FileVerifier, Optional::No, - "The path to a teff to bv conversion file" + "The path to a teff to bv conversion file. Should be a txt file where " + "each line has the format 'teff,bv'" } } }; diff --git a/modules/globebrowsing/src/globelabelscomponent.cpp b/modules/globebrowsing/src/globelabelscomponent.cpp index 7632011bbd..3975dfb0af 100644 --- a/modules/globebrowsing/src/globelabelscomponent.cpp +++ b/modules/globebrowsing/src/globelabelscomponent.cpp @@ -217,7 +217,7 @@ documentation::Documentation GlobeLabelsComponent::Documentation() { }, { LabelsColorInfo.identifier, - new DoubleVector3Verifier, + new Color3Verifier, Optional::Yes, LabelsColorInfo.description }, diff --git a/modules/globebrowsing/src/layer.cpp b/modules/globebrowsing/src/layer.cpp index 51a3ebc990..7cc2745cb3 100644 --- a/modules/globebrowsing/src/layer.cpp +++ b/modules/globebrowsing/src/layer.cpp @@ -108,7 +108,7 @@ namespace { std::optional description; // [[codegen::verbatim(ColorInfo.description)]] - std::optional color; + std::optional color [[codegen::color()]]; // Specifies the type of layer that is to be added. If this value is not // specified, the layer is a DefaultTileLayer diff --git a/modules/globebrowsing/src/layeradjustment.cpp b/modules/globebrowsing/src/layeradjustment.cpp index b459122329..a572fab6d2 100644 --- a/modules/globebrowsing/src/layeradjustment.cpp +++ b/modules/globebrowsing/src/layeradjustment.cpp @@ -68,7 +68,7 @@ documentation::Documentation LayerAdjustment::Documentation() { }, { KeyChromaKeyColor, - new DoubleVector3Verifier, + new Color3Verifier, Optional::Yes, "Specifies the chroma key used when selecting 'ChromaKey' for the 'Type'." }, diff --git a/modules/space/rendering/renderableconstellationbounds.cpp b/modules/space/rendering/renderableconstellationbounds.cpp index 4fe8e5a9cc..fb3404d4f5 100644 --- a/modules/space/rendering/renderableconstellationbounds.cpp +++ b/modules/space/rendering/renderableconstellationbounds.cpp @@ -84,7 +84,7 @@ namespace { std::optional constellationFile; // [[codegen::verbatim(ColorInfo.description)]] - std::optional color; + std::optional color [[codegen::color()]]; // [[codegen::verbatim(LineWidthInfo.description)]] std::optional lineWidth; diff --git a/modules/space/rendering/renderablehabitablezone.cpp b/modules/space/rendering/renderablehabitablezone.cpp index a8d0d4dc1d..274fff4b96 100644 --- a/modules/space/rendering/renderablehabitablezone.cpp +++ b/modules/space/rendering/renderablehabitablezone.cpp @@ -37,6 +37,7 @@ #include #include #include +#include namespace { constexpr const char _loggerCat[] = "RenderableHabitableZone"; @@ -75,42 +76,28 @@ namespace { "a simpler method by Tom E. Harris is used. This method only uses the star " "luminosity and does not include computation of the optimistic boundaries." }; + + struct [[codegen::Dictionary(RenderableHabitableZone)]] Parameters { + // [[codegen::verbatim(EffectiveTemperatureInfo.description)]] + float effectiveTemperature; + + // [[codegen::verbatim(LuminosityInfo.description)]] + float luminosity; + + // [[codegen::verbatim(OptimisticInfo.description)]] + std::optional optimistic; + + // [[codegen::verbatim(KopparapuTeffIntervalInfo.description)]] + std::optional kopparapuTeffInterval; + }; +#include "renderablehabitablezone_codegen.cpp" } // namespace namespace openspace { documentation::Documentation RenderableHabitableZone::Documentation() { - using namespace documentation; - documentation::Documentation doc { - "Renderable Habitable Zone", - "exoplanets_renderable_habitable_zone", - { - { - EffectiveTemperatureInfo.identifier, - new DoubleVerifier, - Optional::No, - EffectiveTemperatureInfo.description - }, - { - LuminosityInfo.identifier, - new DoubleVerifier, - Optional::No, - LuminosityInfo.description - }, - { - OptimisticInfo.identifier, - new BoolVerifier, - Optional::Yes, - OptimisticInfo.description - }, - { - KopparapuTeffIntervalInfo.identifier, - new DoubleVector2Verifier, - Optional::Yes, - KopparapuTeffIntervalInfo.description - } - } - }; + documentation::Documentation doc = codegen::doc(); + doc.id = "space_renderablehabitablezone"; // @TODO cleanup // Insert the parents documentation entries until we have a verifier that can deal @@ -132,31 +119,17 @@ RenderableHabitableZone::RenderableHabitableZone(const ghoul::Dictionary& dictio , _showOptimistic(OptimisticInfo, false) , _kopparapuTeffInterval(KopparapuTeffIntervalInfo, glm::vec2(1000.f, 10000.f)) { - documentation::testSpecificationAndThrow( - Documentation(), - dictionary, - "RenderableHabitableZone" - ); + const Parameters p = codegen::bake(dictionary); - if (dictionary.hasKey(EffectiveTemperatureInfo.identifier)) { - _teff = static_cast( - dictionary.value(EffectiveTemperatureInfo.identifier) - ); - } + _teff = p.effectiveTemperature; _teff.onChange([this]() { computeZone(); }); addProperty(_teff); - if (dictionary.hasKey(LuminosityInfo.identifier)) { - _luminosity = static_cast( - dictionary.value(LuminosityInfo.identifier) - ); - } + _luminosity = p.luminosity; _luminosity.onChange([this]() { computeZone(); }); addProperty(_luminosity); - if (dictionary.hasKey(OptimisticInfo.identifier)) { - _showOptimistic = dictionary.value(OptimisticInfo.identifier); - } + _showOptimistic = p.optimistic.value_or(_showOptimistic); addProperty(_showOptimistic); // The user should not be able to change this property. It's just used to communicate diff --git a/modules/space/rendering/renderableorbitalkepler.cpp b/modules/space/rendering/renderableorbitalkepler.cpp index b60c20abe8..291f8daa1b 100644 --- a/modules/space/rendering/renderableorbitalkepler.cpp +++ b/modules/space/rendering/renderableorbitalkepler.cpp @@ -242,7 +242,7 @@ namespace { std::optional lineWidth; // [[codegen::verbatim(LineColorInfo.description)]] - glm::dvec3 color; + glm::dvec3 color [[codegen::color()]]; // [[codegen::verbatim(TrailFadeInfo.description)]] std::optional trailFade; diff --git a/modules/spacecraftinstruments/dashboard/dashboarditeminstruments.cpp b/modules/spacecraftinstruments/dashboard/dashboarditeminstruments.cpp index b8371ac55e..84debee14f 100644 --- a/modules/spacecraftinstruments/dashboard/dashboarditeminstruments.cpp +++ b/modules/spacecraftinstruments/dashboard/dashboarditeminstruments.cpp @@ -96,10 +96,10 @@ namespace { std::optional fontSize; // [[codegen::verbatim(ActiveColorInfo.description)]] - std::optional activeColor; + std::optional activeColor [[codegen::color()]]; // [[codegen::verbatim(FlashColorInfo.description)]] - std::optional flashColor; + std::optional flashColor [[codegen::color()]]; }; #include "dashboarditeminstruments_codegen.cpp" } // namespace diff --git a/modules/spacecraftinstruments/rendering/renderablecrawlingline.cpp b/modules/spacecraftinstruments/rendering/renderablecrawlingline.cpp index b1cf2a0ecb..363969ed1c 100644 --- a/modules/spacecraftinstruments/rendering/renderablecrawlingline.cpp +++ b/modules/spacecraftinstruments/rendering/renderablecrawlingline.cpp @@ -86,13 +86,13 @@ documentation::Documentation RenderableCrawlingLine::Documentation() { new TableVerifier({ { KeyColorStart, - new DoubleVector4Verifier, + new Color4Verifier, Optional::No, "The color at the start of the line", }, { KeyColorEnd, - new DoubleVector4Verifier, + new Color4Verifier, Optional::No, "The color at the end of the line" } diff --git a/modules/spacecraftinstruments/rendering/renderableshadowcylinder.cpp b/modules/spacecraftinstruments/rendering/renderableshadowcylinder.cpp index 4857d8d23d..88a3251e7d 100644 --- a/modules/spacecraftinstruments/rendering/renderableshadowcylinder.cpp +++ b/modules/spacecraftinstruments/rendering/renderableshadowcylinder.cpp @@ -104,7 +104,7 @@ namespace { "Aberration", "This value determines the aberration method that is used to compute the shadow " "cylinder." - }; + }; struct [[codegen::Dictionary(RenderableShadowCylinder)]] Parameters { // [[codegen::verbatim(NumberPointsInfo.description)]] @@ -114,7 +114,7 @@ namespace { std::optional shadowLength; // [[codegen::verbatim(ShadowColorInfo.description)]] - std::optional shadowColor; + std::optional shadowColor [[codegen::color()]]; enum class TerminatorType { Umbral [[codegen::key("UMBRAL")]], diff --git a/src/engine/openspaceengine_lua.inl b/src/engine/openspaceengine_lua.inl index 2b4636a66f..c52a1dae18 100644 --- a/src/engine/openspaceengine_lua.inl +++ b/src/engine/openspaceengine_lua.inl @@ -310,10 +310,7 @@ int createSingeColorImage(lua_State* L) { const std::string& key = "color"; ghoul::Dictionary colorDict; colorDict.setValue(key, d); - TestResult res = DoubleVector3Verifier()(colorDict, key); - - // @TODO (emmbr 2020-02-04) A 'ColorVerifier' would be really useful here, to easily - // check that we have a vector with values in [0, 1] + TestResult res = Color3Verifier()(colorDict, key); if (!res.success) { return ghoul::lua::luaError( diff --git a/tests/test_lua_createsinglecolorimage.cpp b/tests/test_lua_createsinglecolorimage.cpp index e2311a5cf9..612b7b6af9 100644 --- a/tests/test_lua_createsinglecolorimage.cpp +++ b/tests/test_lua_createsinglecolorimage.cpp @@ -105,18 +105,14 @@ TEST_CASE("CreateSingleColorImage: Faulty color value (invalid values)", { ghoul::lua::LuaState L; ghoul::lua::push(L, "notCreatedColorFile"); - ghoul::lua::push(L, std::vector{ 255.0, 0.0, 0.0 }); + ghoul::lua::push(L, std::vector{ 255.0, 0.0, 0.0 }); // not a valid color - // @TODO (emmbr 2020-02-04) This test case should be here, but as of now this case is - // not handled. Finish it up when we have a better way of verifying that a dictionary - // is a color - - //CHECK_THROWS_WITH( - // openspace::luascriptfunctions::createSingeColorImage(L), - // Catch::Matchers::Contains( - // "Invalid color. Expected three double values {r, g, b} in range 0 to 1" - // ) - //); + CHECK_THROWS_WITH( + openspace::luascriptfunctions::createSingeColorImage(L), + Catch::Matchers::Contains( + "Invalid color. Expected three double values {r, g, b} in range 0 to 1" + ) + ); } TEST_CASE("CreateSingleColorImage: Check if file was created",