3 #include <cgv/base/base.h>
5 #include <cgv/media/axis_aligned_box.h>
6 #include <cgv/render/drawable.h>
7 #include <cgv/render/attribute_array_binding.h>
8 #include <cgv/render/vertex_buffer.h>
9 #include <cgv/render/shader_program.h>
10 #include <libs/cgv_gl/rectangle_renderer.h>
11 #include <cgv/media/color.h>
12 #include <cgv/media/color_scale.h>
13 #include <cgv/media/font/font.h>
14 #include <cgv/render/view.h>
15 #include <cgv/gui/provider.h>
16 #include "axis_config.h"
18 #include "lib_begin.h"
33 struct domain_config :
public cgv::render::render_types
50 float blend_width_in_pixel;
52 std::vector<axis_config> axis_configs;
54 unsigned label_font_index;
56 float label_font_size;
60 unsigned title_font_index;
62 float title_font_size;
66 domain_config(
unsigned nr_axes);
77 struct mapped_rgb :
public cgv::render::render_types
81 mapped_rgb(
const rgb& c = rgb(1,1,1)) : color(c), color_idx(-1) {}
88 mapped_opacity(
float o = 1.0f) : opacity(o), opacity_idx(-1) {}
95 mapped_size(
float s = 1.0f) : size(s), size_idx(-1) {}
98 struct mapped_rgba :
public cgv::render::render_types
103 mapped_rgba(
const rgba& c = rgba(1, 1, 1, 1)) : color(c), color_idx(-1), opacity_idx(-1) {}
107 enum SubPlotInfluence
116 SPI_BAR_OUTLINE = 64,
182 float bar_base_window;
195 virtual void configure_chart(ChartType chart_type);
197 virtual void set_colors(
const rgb& base_color);
198 virtual void set_color_indices(
int idx);
200 virtual void set_opacities(
float _opa);
201 virtual void set_opacity_indices(
int idx);
203 virtual void set_sizes(
float _size);
204 virtual void set_size_indices(
int idx);
221 AttributeSource source;
224 const float* pointer;
233 attribute_source(
int sub_plot_index,
size_t ai,
size_t _count,
size_t _stride);
245 bool samples_out_of_date;
246 bool sources_out_of_date;
250 std::vector<attribute_source> attribute_sources;
257 LC_PRIMARY_COLOR = 1,
258 LC_SECONDARY_COLOR = 2,
259 LC_PRIMARY_OPACITY = 4,
260 LC_SECONDARY_OPACITY = 8,
261 LC_PRIMARY_SIZE = 16,
262 LC_SECONDARY_SIZE = 32,
268 virtual size_t size(
unsigned i)
const = 0;
269 virtual float operator() (
unsigned i,
unsigned k,
unsigned o)
const = 0;
290 : position(_position), label(_label), align(_align), scale(1.0f) {}
293 struct tick_batch_info
300 unsigned first_vertex;
302 unsigned vertex_count;
304 unsigned first_label;
306 unsigned label_count;
308 tick_batch_info(
int _ai,
int _aj,
bool _primary,
unsigned _first_vertex = 0,
unsigned _first_label = 0);
319 static std::vector<const char*> font_names;
325 void ensure_font_names();
350 vec3 world_space_from_plot_space(
const vecn& pnt_plot)
const;
352 vec3 transform_to_world(
const vecn& pnt_attr)
const;
357 LegendComponent legend_components;
370 ivec4 out_of_range_mode;
373 static const unsigned MAX_NR_COLOR_MAPPINGS = 2;
375 int color_mapping[MAX_NR_COLOR_MAPPINGS];
377 cgv::media::ColorScale color_scale_index[MAX_NR_COLOR_MAPPINGS];
379 float color_scale_gamma[MAX_NR_COLOR_MAPPINGS];
381 float window_zero_position[MAX_NR_COLOR_MAPPINGS];
384 static const unsigned MAX_NR_OPACITY_MAPPINGS = 2;
386 int opacity_mapping[MAX_NR_OPACITY_MAPPINGS];
388 float opacity_gamma[MAX_NR_OPACITY_MAPPINGS];
390 bool opacity_is_bipolar[MAX_NR_OPACITY_MAPPINGS];
392 float opacity_window_zero_position[MAX_NR_OPACITY_MAPPINGS];
394 float opacity_min[MAX_NR_OPACITY_MAPPINGS];
396 float opacity_max[MAX_NR_OPACITY_MAPPINGS];
399 static const unsigned MAX_NR_SIZE_MAPPINGS = 2;
401 int size_mapping[MAX_NR_SIZE_MAPPINGS];
403 float size_gamma[MAX_NR_SIZE_MAPPINGS];
405 float size_min[MAX_NR_SIZE_MAPPINGS], size_max[MAX_NR_SIZE_MAPPINGS];
425 void on_font_selection();
427 void on_font_face_selection();
437 cgv::render::rectangle_render_style
rrs, font_rrs;
441 std::vector<box2>& R, std::vector<rgb>& C, std::vector<float>& D,
size_t offset = 0);
444 std::vector<label_info>& tick_labels, std::vector<tick_batch_info>& tick_batches,
float depth);
446 size_t enable_attributes(
cgv::render::context& ctx,
int i,
const std::vector<std::vector<vec2>>& samples);
448 size_t enable_attributes(
cgv::render::context& ctx,
int i,
const std::vector<std::vector<vec3>>& samples);
452 void update_samples_out_of_date_flag();
454 virtual bool compute_sample_coordinate_interval(
int i,
int ai,
float& samples_min,
float& samples_max) = 0;
456 void draw_sub_plot_samples(
int count,
const plot_base_config& spc,
bool strip =
false);
460 void draw_legend(
cgv::render::context& ctx,
int layer_idx = 0,
bool is_first =
true,
bool* multi_axis_modes = 0);
462 bool extract_tick_rectangles_and_tick_labels(
463 std::vector<box2>& R, std::vector<rgb>& C, std::vector<float>& D,
464 std::vector<label_info>& tick_labels,
int ai,
int ci,
int ti,
float he,
465 float z_plot,
float plot_scale = 1.0f,
vec2 plot_offset =
vec2(0.0f,0.0f),
float d = 0.0f,
bool multi_axis =
true);
467 void extract_legend_tick_rectangles_and_tick_labels(
468 std::vector<box2>& R, std::vector<rgb>& C, std::vector<float>& D,
469 std::vector<label_info>& tick_labels, std::vector<tick_batch_info>& tick_batches,
float d,
470 bool clear_cache =
false,
bool is_first =
true,
bool* multi_axis_modes = 0);
474 plot_base(
unsigned dim,
unsigned nr_attributes = 0);
484 const domain_config* get_domain_config_ptr()
const;
486 domain_config* get_domain_config_ptr();
488 void set_domain_config_ptr(domain_config* _new_ptr);
493 const box2 get_domain()
const;
496 const box3 get_domain3()
const;
498 void set_domain(
const box2& dom);
500 void set_domain3(
const box3& dom);
502 void set_extent(
const vecn& new_extent);
504 vecn get_extent()
const;
506 void set_width(
float new_width,
bool constrained =
true);
508 void set_height(
float new_height,
bool constrained =
true);
510 void set_orientation(
const quat& _orientation);
512 void place_origin(
const vec3& new_origin_location);
514 void place_center(
const vec3& new_center_location);
516 void place_corner(
unsigned corner_index,
const vec3& new_corner_location);
518 vec3 get_origin()
const;
520 const quat& get_orientation()
const;
522 const vec3& get_center()
const;
524 vec3 get_corner(
unsigned i)
const;
526 const vec3 get_axis_direction(
unsigned ai)
const;
531 bool determine_axis_extent_from_subplot(
unsigned ai,
unsigned i,
float& sample_min,
float& sample_max);
534 void adjust_domain_axis_to_data(
unsigned ai,
bool adjust_min =
true,
bool adjust_max =
true,
bool only_visible =
true);
536 void adjust_domain_to_data(
bool only_visible =
true);
538 void include_axis_to_domain(
unsigned ai);
540 void adjust_tick_marks(
unsigned max_nr_secondary_ticks = 20,
bool adjust_to_attribute_ranges =
true);
542 void adjust_extent_to_domain_aspect_ratio(
int preserve_ai = 0);
547 unsigned get_nr_sub_plots()
const;
556 void set_samples_out_of_date(
unsigned i);
558 void set_sub_plot_colors(
unsigned i,
const rgb& base_color);
560 void set_sub_plot_attribute(
unsigned i,
unsigned ai,
int subplot_index,
size_t aj);
562 void set_sub_plot_attribute(
unsigned i,
unsigned ai,
const float* _pointer,
size_t count,
size_t stride);
564 void set_sub_plot_attribute(
unsigned i,
unsigned ai,
const cgv::render::vertex_buffer* _vbo_ptr,
size_t _offset,
size_t _count,
size_t _stride);
609 #include <cgv/config/lib_end.h>
size_t end_sample
defaults to -1 and effectively is always the end of the sample vector
Definition: plot_base.h:129
Definition: attribute_array_binding.h:20
cgv::media::font::font_face_ptr label_font_face
store pointer to label font face
Definition: plot_base.h:411
std::vector< label_info > tick_labels
all tick labels
Definition: plot_base.h:311
unsigned nr_attributes
number of additional attributes
Definition: plot_base.h:334
cgv::render::attribute_array_binding aab_legend
manage attributes for legend drawing
Definition: plot_base.h:419
SubPlotInfluence sub_plot_influence
store bit field to define which sub plots are influenced by reference values
Definition: plot_base.h:135
cgv::render::rectangle_render_style rrs
render style of rectangles
Definition: plot_base.h:437
std::vector< attribute_source_array > attribute_source_arrays
attribute sources
Definition: plot_base.h:421
float layer_depth
depth offset of a single layer
Definition: plot_base.h:315
Definition: vertex_buffer.h:13
mapped_size point_halo_width
width of point halo in pixel
Definition: plot_base.h:151
unsigned get_dim() const
return nr dimensions of plot
Definition: plot_base.h:476
mapped_rgb ref_color
reference color, when changed, all colors are adapted with set_colors()
Definition: plot_base.h:137
mapped_size bar_percentual_width
percentual width of bar computed assuming a uniform y-sampling distance
Definition: plot_base.h:186
rgba legend_color
color and opacity of legend
Definition: plot_base.h:366
mapped_rgba point_halo_color
color of point halo
Definition: plot_base.h:153
A column vector class.
Definition: fvec.h:13
mapped_rgba bar_outline_color
bar outline color
Definition: plot_base.h:190
int legend_axis
coordinate direction along which to draw legend
Definition: plot_base.h:364
bool show_bars
whether to show bars
Definition: plot_base.h:178
mapped_size stick_width
line width of stick
Definition: plot_base.h:173
Definition: abst_signal.h:63
mapped_size bar_outline_width
line width of bar outlines
Definition: plot_base.h:184
bool show_sticks
whether to show straight lines to the bottom of the plot, which are called sticks
Definition: plot_base.h:167
mapped_rgba stick_color
color of the stick line
Definition: plot_base.h:175
mapped_rgba bar_color
bar fill color
Definition: plot_base.h:188
mapped_opacity ref_opacity
reference opacity, when changed, all opcities are adapted with set_opacity()
Definition: plot_base.h:139
bool show_points
whether to show data points
Definition: plot_base.h:144
attribute array manager used to upload arrays to gpu
Definition: renderer.h:21
std::vector< plot_base_config * > configs
store one configuration per sub plot
Definition: plot_base.h:340
cgv::media::font::font_ptr title_font
store pointer to title font
Definition: plot_base.h:413
derive from this class to provide a gui to the current viewer
Definition: provider.h:64
Definition: shader_program.h:25
static std::string font_name_enum_def
concatenate font names to enum definition for dropdown control
Definition: plot_base.h:322
cgv::render::vertex_buffer vbo_legend
vbo for legend drawing
Definition: plot_base.h:417
Definition: plot_base.h:274
mapped_rgba line_halo_color
color of line halo
Definition: plot_base.h:164
std::vector< tick_batch_info > tick_batches
twice number of axis pairs with index of first tick label and number of tick labels for primary and s...
Definition: plot_base.h:313
domain_config * dom_cfg_ptr
pointer to currently used domain config
Definition: plot_base.h:338
bool show_plot
whether to show sub plot
Definition: plot_base.h:132
virtual void delete_sub_plot(unsigned i)=0
delete the i-th sub plot
virtual unsigned add_sub_plot(const std::string &name)=0
add sub plot and return sub plot index
vec2 legend_extent
width of legend
Definition: plot_base.h:362
render information stored per label
Definition: plot_base.h:284
int stick_coordinate_index
extended stick information
Definition: plot_base.h:169
cgv::media::font::font_face_ptr title_font_face
store pointer to title font face
Definition: plot_base.h:415
domain_config dom_cfg
domain configuration
Definition: plot_base.h:336
vec3 legend_location
center location of legend in domain coordinates
Definition: plot_base.h:360
int bar_coordinate_index
extended bar information
Definition: plot_base.h:180
std::string name
name of sub plot
Definition: plot_base.h:124
Definition: drawable.h:15
mapped_rgba point_color
point color
Definition: plot_base.h:149
TextAlignment
different text alignments
Definition: context.h:218
mapped_size ref_size
reference size, when changed, all sizes are adapted with set_size()
Definition: plot_base.h:141
store source of a single plot attribute (one coordinate axis or one float attribute)
Definition: plot_base.h:220
mapped_rgba line_color
line color
Definition: plot_base.h:160
size_t begin_sample
offset into samples defaults to 0, if larger than end_sample vector is split into two parts
Definition: plot_base.h:127
mapped_size line_width
line width
Definition: plot_base.h:158
mapped_size point_size
point size in pixels
Definition: plot_base.h:146
bool show_lines
whether to connect data points with lines
Definition: plot_base.h:156
struct that manages attribute sources and corresponding gpu objects per subplot
Definition: plot_base.h:244
the cgv namespace
Definition: vr_calib.cxx:9
mapped_size line_halo_width
width of line halo in pixel
Definition: plot_base.h:162
float stick_base_window
base window position of stick
Definition: plot_base.h:171
cgv::media::font::font_ptr label_font
store pointer to label font
Definition: plot_base.h:409
Definition: context.h:525
vec3 center_location
center location of domain in world coordinates
Definition: plot_base.h:348
Definition: plot_base.h:122