f3d
f3d copied to clipboard
Option struct
You are modifying libf3d public API! :warning:Please update bindings accordingly:warning:!
You can find them in their respective directories: python, java, webassembly.
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:
Project coverage is 96.84%. Comparing base (
5d89ea3) to head (a564083). Report is 1 commits behind head on master.
Additional details and impacted files
@@ Coverage Diff @@
## master #1471 +/- ##
==========================================
+ Coverage 96.83% 96.84% +0.01%
==========================================
Files 106 106
Lines 7871 7680 -191
==========================================
- Hits 7622 7438 -184
+ Misses 249 242 -7
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
options_struct.h
#ifndef f3d_options_struct_h
#define f3d_options_struct_h
#include "types.h"
#include <vector>
#include <string>
namespace f3d {
struct options_struct {
struct interactor {
bool axis = false;
bool invert_zoom = false;
bool trackball = false;
} interactor;
struct model {
struct color {
double opacity = 1.0;
std::vector<double> rgb = {1.0, 1.0, 1.0};
std::string texture = "";
} color;
struct emissive {
std::vector<double> factor = {1.0, 1.0, 1.0};
std::string texture = "";
} emissive;
struct matcap {
std::string texture = "";
} matcap;
struct material {
double metallic = 0.0;
double roughness = 0.3;
std::string texture = "";
} material;
struct normal {
double scale = 1.0;
std::string texture = "";
} normal;
struct point_sprites {
bool enable = false;
std::string type = "sphere";
} point_sprites;
struct scivis {
std::string array_name = "f3d_reserved";
bool cells = false;
std::vector<double> colormap = {0.0, 0.0, 0.0, 0.0, 0.4, 0.9, 0.0, 0.0, 0.8, 0.9, 0.9, 0.0, 1.0, 1.0, 1.0, 1.0};
int component = -1;
std::vector<double> range = {0.0};
} scivis;
struct volume {
bool enable = false;
bool inverse = false;
} volume;
} model;
struct render {
std::string backface_type = "default";
struct background {
bool blur = false;
double blur_coc = 20.0;
std::vector<double> color = {0.2, 0.2, 0.2};
bool skybox = false;
} background;
struct effect {
bool ambient_occlusion = false;
bool anti_aliasing = false;
std::string final_shader = "";
bool tone_mapping = false;
bool translucency_support = false;
} effect;
struct grid {
bool absolute = false;
std::vector<double> color = {0.0, 0.0, 0.0};
bool enable = false;
int subdivisions = 10;
double unit = 0.0;
} grid;
struct hdri {
bool ambient = false;
std::string file = "";
} hdri;
struct light {
double intensity = 1.0;
} light;
double line_width = 1.0;
double point_size = 10.0;
struct raytracing {
bool denoise = false;
bool enable = false;
int samples = 5;
} raytracing;
bool show_edges = false;
} render;
struct scene {
struct animation {
bool autoplay = false;
double frame_rate = 60.0;
int index = 0;
f3d::ratio_t speed_factor = f3d::ratio_t(1.0);
double time = 0.0;
} animation;
struct camera {
int index = -1;
bool orthographic = false;
} camera;
std::string up_direction = "+Y";
} scene;
struct ui {
bool animation_progress = false;
bool cheatsheet = false;
bool dropzone = false;
std::string dropzone_info = "";
bool filename = false;
std::string filename_info = "";
std::string font_file = "";
bool fps = false;
bool loader_progress = false;
bool metadata = false;
bool scalar_bar = false;
} ui;
};
};
#endif
options_struct_internals.h:
#ifndef f3d_options_struct_internals_h
#define f3d_options_struct_internals_h
#include "options_struct.h"
#include "options.h"
namespace options_struct_internals {
void set(f3d::options_struct& ostruct, const std::string& name, const option_variant_t& value){
try
{
if (name == "interactor.axis") ostruct.interactor.axis = std::get<bool>(value);
else if (name == "interactor.invert_zoom") ostruct.interactor.invert_zoom = std::get<bool>(value);
else if (name == "interactor.trackball") ostruct.interactor.trackball = std::get<bool>(value);
else if (name == "model.color.opacity") ostruct.model.color.opacity = std::get<double>(value);
else if (name == "model.color.rgb") ostruct.model.color.rgb = std::get<std::vector<double>>(value);
else if (name == "model.color.texture") ostruct.model.color.texture = std::get<std::string>(value);
else if (name == "model.emissive.factor") ostruct.model.emissive.factor = std::get<std::vector<double>>(value);
else if (name == "model.emissive.texture") ostruct.model.emissive.texture = std::get<std::string>(value);
else if (name == "model.matcap.texture") ostruct.model.matcap.texture = std::get<std::string>(value);
else if (name == "model.material.metallic") ostruct.model.material.metallic = std::get<double>(value);
else if (name == "model.material.roughness") ostruct.model.material.roughness = std::get<double>(value);
else if (name == "model.material.texture") ostruct.model.material.texture = std::get<std::string>(value);
else if (name == "model.normal.scale") ostruct.model.normal.scale = std::get<double>(value);
else if (name == "model.normal.texture") ostruct.model.normal.texture = std::get<std::string>(value);
else if (name == "model.point_sprites.enable") ostruct.model.point_sprites.enable = std::get<bool>(value);
else if (name == "model.point_sprites.type") ostruct.model.point_sprites.type = std::get<std::string>(value);
else if (name == "model.scivis.array_name") ostruct.model.scivis.array_name = std::get<std::string>(value);
else if (name == "model.scivis.cells") ostruct.model.scivis.cells = std::get<bool>(value);
else if (name == "model.scivis.colormap") ostruct.model.scivis.colormap = std::get<std::vector<double>>(value);
else if (name == "model.scivis.component") ostruct.model.scivis.component = std::get<int>(value);
else if (name == "model.scivis.range") ostruct.model.scivis.range = std::get<std::vector<double>>(value);
else if (name == "model.volume.enable") ostruct.model.volume.enable = std::get<bool>(value);
else if (name == "model.volume.inverse") ostruct.model.volume.inverse = std::get<bool>(value);
else if (name == "render.backface_type") ostruct.render.backface_type = std::get<std::string>(value);
else if (name == "render.background.blur") ostruct.render.background.blur = std::get<bool>(value);
else if (name == "render.background.blur_coc") ostruct.render.background.blur_coc = std::get<double>(value);
else if (name == "render.background.color") ostruct.render.background.color = std::get<std::vector<double>>(value);
else if (name == "render.background.skybox") ostruct.render.background.skybox = std::get<bool>(value);
else if (name == "render.effect.ambient_occlusion") ostruct.render.effect.ambient_occlusion = std::get<bool>(value);
else if (name == "render.effect.anti_aliasing") ostruct.render.effect.anti_aliasing = std::get<bool>(value);
else if (name == "render.effect.final_shader") ostruct.render.effect.final_shader = std::get<std::string>(value);
else if (name == "render.effect.tone_mapping") ostruct.render.effect.tone_mapping = std::get<bool>(value);
else if (name == "render.effect.translucency_support") ostruct.render.effect.translucency_support = std::get<bool>(value);
else if (name == "render.grid.absolute") ostruct.render.grid.absolute = std::get<bool>(value);
else if (name == "render.grid.color") ostruct.render.grid.color = std::get<std::vector<double>>(value);
else if (name == "render.grid.enable") ostruct.render.grid.enable = std::get<bool>(value);
else if (name == "render.grid.subdivisions") ostruct.render.grid.subdivisions = std::get<int>(value);
else if (name == "render.grid.unit") ostruct.render.grid.unit = std::get<double>(value);
else if (name == "render.hdri.ambient") ostruct.render.hdri.ambient = std::get<bool>(value);
else if (name == "render.hdri.file") ostruct.render.hdri.file = std::get<std::string>(value);
else if (name == "render.light.intensity") ostruct.render.light.intensity = std::get<double>(value);
else if (name == "render.line_width") ostruct.render.line_width = std::get<double>(value);
else if (name == "render.point_size") ostruct.render.point_size = std::get<double>(value);
else if (name == "render.raytracing.denoise") ostruct.render.raytracing.denoise = std::get<bool>(value);
else if (name == "render.raytracing.enable") ostruct.render.raytracing.enable = std::get<bool>(value);
else if (name == "render.raytracing.samples") ostruct.render.raytracing.samples = std::get<int>(value);
else if (name == "render.show_edges") ostruct.render.show_edges = std::get<bool>(value);
else if (name == "scene.animation.autoplay") ostruct.scene.animation.autoplay = std::get<bool>(value);
else if (name == "scene.animation.frame_rate") ostruct.scene.animation.frame_rate = std::get<double>(value);
else if (name == "scene.animation.index") ostruct.scene.animation.index = std::get<int>(value);
else if (name == "scene.animation.speed_factor") ostruct.scene.animation.speed_factor = std::get<f3d::ratio_t>(value);
else if (name == "scene.animation.time") ostruct.scene.animation.time = std::get<double>(value);
else if (name == "scene.camera.index") ostruct.scene.camera.index = std::get<int>(value);
else if (name == "scene.camera.orthographic") ostruct.scene.camera.orthographic = std::get<bool>(value);
else if (name == "scene.up_direction") ostruct.scene.up_direction = std::get<std::string>(value);
else if (name == "ui.animation_progress") ostruct.ui.animation_progress = std::get<bool>(value);
else if (name == "ui.cheatsheet") ostruct.ui.cheatsheet = std::get<bool>(value);
else if (name == "ui.dropzone") ostruct.ui.dropzone = std::get<bool>(value);
else if (name == "ui.dropzone_info") ostruct.ui.dropzone_info = std::get<std::string>(value);
else if (name == "ui.filename") ostruct.ui.filename = std::get<bool>(value);
else if (name == "ui.filename_info") ostruct.ui.filename_info = std::get<std::string>(value);
else if (name == "ui.font_file") ostruct.ui.font_file = std::get<std::string>(value);
else if (name == "ui.fps") ostruct.ui.fps = std::get<bool>(value);
else if (name == "ui.loader_progress") ostruct.ui.loader_progress = std::get<bool>(value);
else if (name == "ui.metadata") ostruct.ui.metadata = std::get<bool>(value);
else if (name == "ui.scalar_bar") ostruct.ui.scalar_bar = std::get<bool>(value);
else throw f3d::options::inexistent_exception("Option " + name + " does not exist");
}
catch (const std::bad_variant_access&)
{
throw f3d::options::incompatible_exception(
"Trying to set " + name + " with incompatible type");
}
}
option_variant_t get(const f3d::options_struct& ostruct, const std::string& name){
option_variant_t var;
if (name == "interactor.axis") var = ostruct.interactor.axis;
else if (name == "interactor.invert_zoom") var = ostruct.interactor.invert_zoom;
else if (name == "interactor.trackball") var = ostruct.interactor.trackball;
else if (name == "model.color.opacity") var = ostruct.model.color.opacity;
else if (name == "model.color.rgb") var = ostruct.model.color.rgb;
else if (name == "model.color.texture") var = ostruct.model.color.texture;
else if (name == "model.emissive.factor") var = ostruct.model.emissive.factor;
else if (name == "model.emissive.texture") var = ostruct.model.emissive.texture;
else if (name == "model.matcap.texture") var = ostruct.model.matcap.texture;
else if (name == "model.material.metallic") var = ostruct.model.material.metallic;
else if (name == "model.material.roughness") var = ostruct.model.material.roughness;
else if (name == "model.material.texture") var = ostruct.model.material.texture;
else if (name == "model.normal.scale") var = ostruct.model.normal.scale;
else if (name == "model.normal.texture") var = ostruct.model.normal.texture;
else if (name == "model.point_sprites.enable") var = ostruct.model.point_sprites.enable;
else if (name == "model.point_sprites.type") var = ostruct.model.point_sprites.type;
else if (name == "model.scivis.array_name") var = ostruct.model.scivis.array_name;
else if (name == "model.scivis.cells") var = ostruct.model.scivis.cells;
else if (name == "model.scivis.colormap") var = ostruct.model.scivis.colormap;
else if (name == "model.scivis.component") var = ostruct.model.scivis.component;
else if (name == "model.scivis.range") var = ostruct.model.scivis.range;
else if (name == "model.volume.enable") var = ostruct.model.volume.enable;
else if (name == "model.volume.inverse") var = ostruct.model.volume.inverse;
else if (name == "render.backface_type") var = ostruct.render.backface_type;
else if (name == "render.background.blur") var = ostruct.render.background.blur;
else if (name == "render.background.blur_coc") var = ostruct.render.background.blur_coc;
else if (name == "render.background.color") var = ostruct.render.background.color;
else if (name == "render.background.skybox") var = ostruct.render.background.skybox;
else if (name == "render.effect.ambient_occlusion") var = ostruct.render.effect.ambient_occlusion;
else if (name == "render.effect.anti_aliasing") var = ostruct.render.effect.anti_aliasing;
else if (name == "render.effect.final_shader") var = ostruct.render.effect.final_shader;
else if (name == "render.effect.tone_mapping") var = ostruct.render.effect.tone_mapping;
else if (name == "render.effect.translucency_support") var = ostruct.render.effect.translucency_support;
else if (name == "render.grid.absolute") var = ostruct.render.grid.absolute;
else if (name == "render.grid.color") var = ostruct.render.grid.color;
else if (name == "render.grid.enable") var = ostruct.render.grid.enable;
else if (name == "render.grid.subdivisions") var = ostruct.render.grid.subdivisions;
else if (name == "render.grid.unit") var = ostruct.render.grid.unit;
else if (name == "render.hdri.ambient") var = ostruct.render.hdri.ambient;
else if (name == "render.hdri.file") var = ostruct.render.hdri.file;
else if (name == "render.light.intensity") var = ostruct.render.light.intensity;
else if (name == "render.line_width") var = ostruct.render.line_width;
else if (name == "render.point_size") var = ostruct.render.point_size;
else if (name == "render.raytracing.denoise") var = ostruct.render.raytracing.denoise;
else if (name == "render.raytracing.enable") var = ostruct.render.raytracing.enable;
else if (name == "render.raytracing.samples") var = ostruct.render.raytracing.samples;
else if (name == "render.show_edges") var = ostruct.render.show_edges;
else if (name == "scene.animation.autoplay") var = ostruct.scene.animation.autoplay;
else if (name == "scene.animation.frame_rate") var = ostruct.scene.animation.frame_rate;
else if (name == "scene.animation.index") var = ostruct.scene.animation.index;
else if (name == "scene.animation.speed_factor") var = ostruct.scene.animation.speed_factor;
else if (name == "scene.animation.time") var = ostruct.scene.animation.time;
else if (name == "scene.camera.index") var = ostruct.scene.camera.index;
else if (name == "scene.camera.orthographic") var = ostruct.scene.camera.orthographic;
else if (name == "scene.up_direction") var = ostruct.scene.up_direction;
else if (name == "ui.animation_progress") var = ostruct.ui.animation_progress;
else if (name == "ui.cheatsheet") var = ostruct.ui.cheatsheet;
else if (name == "ui.dropzone") var = ostruct.ui.dropzone;
else if (name == "ui.dropzone_info") var = ostruct.ui.dropzone_info;
else if (name == "ui.filename") var = ostruct.ui.filename;
else if (name == "ui.filename_info") var = ostruct.ui.filename_info;
else if (name == "ui.font_file") var = ostruct.ui.font_file;
else if (name == "ui.fps") var = ostruct.ui.fps;
else if (name == "ui.loader_progress") var = ostruct.ui.loader_progress;
else if (name == "ui.metadata") var = ostruct.ui.metadata;
else if (name == "ui.scalar_bar") var = ostruct.ui.scalar_bar;
else throw f3d::options::inexistent_exception("Option " + name + " does not exist");
return var;
}
std::vector<std::string> getNames() {
std::vector<std::string> vec{
"interactor.axis",
"interactor.invert_zoom",
"interactor.trackball",
"model.color.opacity",
"model.color.rgb",
"model.color.texture",
"model.emissive.factor",
"model.emissive.texture",
"model.matcap.texture",
"model.material.metallic",
"model.material.roughness",
"model.material.texture",
"model.normal.scale",
"model.normal.texture",
"model.point_sprites.enable",
"model.point_sprites.type",
"model.scivis.array_name",
"model.scivis.cells",
"model.scivis.colormap",
"model.scivis.component",
"model.scivis.range",
"model.volume.enable",
"model.volume.inverse",
"render.backface_type",
"render.background.blur",
"render.background.blur_coc",
"render.background.color",
"render.background.skybox",
"render.effect.ambient_occlusion",
"render.effect.anti_aliasing",
"render.effect.final_shader",
"render.effect.tone_mapping",
"render.effect.translucency_support",
"render.grid.absolute",
"render.grid.color",
"render.grid.enable",
"render.grid.subdivisions",
"render.grid.unit",
"render.hdri.ambient",
"render.hdri.file",
"render.light.intensity",
"render.line_width",
"render.point_size",
"render.raytracing.denoise",
"render.raytracing.enable",
"render.raytracing.samples",
"render.show_edges",
"scene.animation.autoplay",
"scene.animation.frame_rate",
"scene.animation.index",
"scene.animation.speed_factor",
"scene.animation.time",
"scene.camera.index",
"scene.camera.orthographic",
"scene.up_direction",
"ui.animation_progress",
"ui.cheatsheet",
"ui.dropzone",
"ui.dropzone_info",
"ui.filename",
"ui.filename_info",
"ui.font_file",
"ui.fps",
"ui.loader_progress",
"ui.metadata",
"ui.scalar_bar"
};
return vec;
}
}
#endif