From 1c942a7de735780aaf92c47a9bc7c235e562efe1 Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Mon, 9 Apr 2018 14:32:57 +0200 Subject: [PATCH] Make layer distance changable. Refs #1. As a side-effet, now the ordering of the layers is left-to-right rather than right-to-left. This shouldn't matter in normal processing, but it is interesting nonetheless. --- src/fmri/Options.cpp | 25 ++++++++++++++++++++++--- src/fmri/RenderingState.cpp | 2 +- src/fmri/utils.cpp | 2 +- src/fmri/utils.hpp | 4 +++- src/tools/launcher.cpp | 4 ++++ 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/fmri/Options.cpp b/src/fmri/Options.cpp index 9eadfdf..6944cbd 100644 --- a/src/fmri/Options.cpp +++ b/src/fmri/Options.cpp @@ -16,6 +16,24 @@ static void check_file(const std::string& filename) } } +/** + * Create a boost::program_options::value for some variable. + * + * Utility method to make generating value wrappers less repetitive. This + * method automatically sets the default value to whatever the variable + * currently holds. + * + * @tparam T + * @param val Variable to be set/use as default. + * @return A value wrapper + */ +template +inline static auto value_for(T& val) +{ + return boost::program_options::value(&val) + ->default_value(val); +} + /** * Parse a color string into a color array. * @@ -70,9 +88,10 @@ Options::Options(int argc, char * const argv[]): ("network,n", value(&modelPath)->required(), "caffe model file for the network") ("labels,l", value(&labelsPath), "labels file") ("means,m", value(&meansPath), "means file") - ("path-color,p", value(), "color for paths") - ("layer-opacity", value(&layerTransparancy_), "Opacity for layers") - ("interaction-opacity", value(&interactionTransparancy_), "Opacity for interactions") + ("path-color,p", value()->default_value("#ffffff19"), "color for paths") + ("layer-opacity", value_for(layerTransparancy_), "Opacity for layers") + ("interaction-opacity", value_for(interactionTransparancy_), "Opacity for interactions") + ("layer-distance", value_for(LAYER_X_OFFSET), "Distance between layers") ("dump,d", value(&dumpPath), "dump convolutional images in this directory"); options_description composed = desc; diff --git a/src/fmri/RenderingState.cpp b/src/fmri/RenderingState.cpp index 9f20217..9b5128d 100644 --- a/src/fmri/RenderingState.cpp +++ b/src/fmri/RenderingState.cpp @@ -236,7 +236,7 @@ void RenderingState::render(float time) const glPushMatrix(); - glTranslatef(5 * currentData->size(), 0, 0); + glTranslatef(-LAYER_X_OFFSET / 2 * currentData->size(), 0, 0); for (auto i : Range(currentData->size())) { glPushMatrix(); diff --git a/src/fmri/utils.cpp b/src/fmri/utils.cpp index c0a0d6a..5bbce8d 100644 --- a/src/fmri/utils.cpp +++ b/src/fmri/utils.cpp @@ -1,7 +1,7 @@ #include #include "utils.hpp" -const float fmri::LAYER_X_OFFSET = -10; +float fmri::LAYER_X_OFFSET = 10; std::default_random_engine &fmri::rng() { diff --git a/src/fmri/utils.hpp b/src/fmri/utils.hpp index c0d7bbc..985527f 100644 --- a/src/fmri/utils.hpp +++ b/src/fmri/utils.hpp @@ -21,8 +21,10 @@ namespace fmri /** * The distance between layers in the visualisation. + * + * This value is set from the options parser when provided. */ - extern const float LAYER_X_OFFSET; + extern float LAYER_X_OFFSET; constexpr const float EPSILON = 1e-10f; diff --git a/src/tools/launcher.cpp b/src/tools/launcher.cpp index d089581..03f1385 100644 --- a/src/tools/launcher.cpp +++ b/src/tools/launcher.cpp @@ -98,6 +98,7 @@ private: Gtk::FileChooserButton meansChooser; Gtk::FileChooserButton inputChooser; Gtk::ColorButton pathColor; + Gtk::Scale layerDistance; Gtk::Scale layerTransparancy; Gtk::Scale interactionTransparancy; Gtk::Button startButton; @@ -121,6 +122,7 @@ Launcher::Launcher() meansChooser("Select means file"), inputChooser("Select input directory", Gtk::FileChooserAction::FILE_CHOOSER_ACTION_SELECT_FOLDER), pathColor(Gdk::RGBA("rgba(255, 255, 255, 0.1)")), + layerDistance(Gtk::Adjustment::create(10, 0, 100, 0, 0.1, 0)), layerTransparancy(Gtk::Adjustment::create(1, 0, 1, 0.0, 1.f / 256)), interactionTransparancy(Gtk::Adjustment::create(1, 0, 1, 0.0, 1.f / 256)), startButton("Start FMRI") @@ -157,6 +159,7 @@ Launcher::Launcher() addRowWithLabel("Input directory", inputChooser); addRowWithLabel("Means (optional)", meansChooser); addRowWithLabel("Path color", pathColor); + addRowWithLabel("Layer distance", layerDistance); addRowWithLabel("Layer transparancy", layerTransparancy); addRowWithLabel("Interaction transparancy", interactionTransparancy); @@ -197,6 +200,7 @@ void Launcher::start() float_parameter(argv, "--layer-opacity", layerTransparancy.get_value()); float_parameter(argv, "--interaction-opacity", interactionTransparancy.get_value()); + float_parameter(argv, "--layer-distance", layerDistance.get_value()); if (labelChooser.get_file()) { argv.push_back(wrap_string("-l"));