From f62c2859e31e34ea028414e1ce389569265e6f9c Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Tue, 3 Apr 2018 16:43:23 +0200 Subject: [PATCH] Implement an option to choose path color. Refs #1. --- src/fmri/ActivityAnimation.cpp | 2 +- src/fmri/Options.cpp | 7 ++++++- src/fmri/Options.hpp | 4 +++- src/fmri/RenderingState.cpp | 10 ++++++++++ src/fmri/RenderingState.hpp | 9 +++++++++ src/fmri/main.cpp | 1 + src/fmri/utils.hpp | 3 +++ 7 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/fmri/ActivityAnimation.cpp b/src/fmri/ActivityAnimation.cpp index 8257271..7325f80 100644 --- a/src/fmri/ActivityAnimation.cpp +++ b/src/fmri/ActivityAnimation.cpp @@ -72,7 +72,7 @@ void ActivityAnimation::draw(float timeScale) glDrawArrays(GL_POINTS, 0, bufferLength / 3); glDisableClientState(GL_COLOR_ARRAY); if (RenderingState::instance().renderInteractionPaths()) { - glColor4f(1, 1, 1, 0.1); + glColor4fv(RenderingState::instance().pathColor().data()); glVertexPointer(3, GL_FLOAT, 0, startingPos.data()); glDrawElements(GL_LINES, lineIndices.size(), GL_UNSIGNED_INT, lineIndices.data()); checkGLErrors(); diff --git a/src/fmri/Options.cpp b/src/fmri/Options.cpp index d04d5a9..2f832ff 100644 --- a/src/fmri/Options.cpp +++ b/src/fmri/Options.cpp @@ -41,7 +41,7 @@ static void check_file(const char *filename) * @param targetColor * @return true if the read was successful. */ -static bool parse_color(const char *input, std::array &targetColor) +static bool parse_color(const char *input, Color &targetColor) { if (input[0] == '#') { // Attempt to parse #RRGGBBAA @@ -176,3 +176,8 @@ Options::Options() noexcept : dumpPath(nullptr) { } + +const Color &Options::pathColor() const +{ + return pathColor_; +} diff --git a/src/fmri/Options.hpp b/src/fmri/Options.hpp index 28cc3c1..123b205 100644 --- a/src/fmri/Options.hpp +++ b/src/fmri/Options.hpp @@ -4,6 +4,7 @@ #include #include +#include "utils.hpp" #include "PNGDumper.hpp" namespace fmri { @@ -18,13 +19,14 @@ namespace fmri { const string& model() const; const string& weights() const; const string& means() const; + const Color& pathColor() const; std::optional> labels() const; std::optional imageDumper() const; const vector& inputs() const; private: - std::array pathColor_; + Color pathColor_; string modelPath; string weightsPath; string meansPath; diff --git a/src/fmri/RenderingState.cpp b/src/fmri/RenderingState.cpp index 23fc5ba..5570612 100644 --- a/src/fmri/RenderingState.cpp +++ b/src/fmri/RenderingState.cpp @@ -322,3 +322,13 @@ bool RenderingState::renderInteractionPaths() const { return options.renderInteractionPaths; } + +void RenderingState::loadOptions(const Options &options) +{ + this->options.pathColor = options.pathColor(); +} + +const Color &RenderingState::pathColor() const +{ + return options.pathColor; +} diff --git a/src/fmri/RenderingState.hpp b/src/fmri/RenderingState.hpp index 96287ec..17368c6 100644 --- a/src/fmri/RenderingState.hpp +++ b/src/fmri/RenderingState.hpp @@ -5,6 +5,7 @@ #include "LayerData.hpp" #include "LayerVisualisation.hpp" #include "Animation.hpp" +#include "Options.hpp" namespace fmri { @@ -39,11 +40,18 @@ namespace fmri void render(float time) const; void loadSimulationData(const std::map &info, std::vector> &&data); + /** + * Load rendering-specific options from the given options object. + * + * @param options + */ + void loadOptions(const Options& options); /** * @return Whether the network should only render activated nodes, rather than all of them. */ bool renderActivatedOnly() const; bool renderInteractionPaths() const; + const Color& pathColor() const; static RenderingState& instance(); @@ -55,6 +63,7 @@ namespace fmri bool renderInteractions = true; bool activatedOnly = false; bool renderInteractionPaths = false; + Color pathColor; } options; std::array pos; std::array angle; diff --git a/src/fmri/main.cpp b/src/fmri/main.cpp index 282d148..a7d8275 100644 --- a/src/fmri/main.cpp +++ b/src/fmri/main.cpp @@ -60,6 +60,7 @@ int main(int argc, char *argv[]) // Prepare data for simulations Options options = Options::parse(argc, argv); loadSimulationData(options); + RenderingState::instance().loadOptions(options); // Register callbacks glutReshapeFunc(changeWindowSize); diff --git a/src/fmri/utils.hpp b/src/fmri/utils.hpp index 07ed1e2..c0d7bbc 100644 --- a/src/fmri/utils.hpp +++ b/src/fmri/utils.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include @@ -16,6 +17,8 @@ namespace fmri { typedef float DType; + typedef std::array Color; + /** * The distance between layers in the visualisation. */