cgv
plot_base.h
1 #pragma once
2 
3 #include <cgv/base/base.h>
4 #include <vector>
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"
17 
18 #include "lib_begin.h"
19 
20 namespace cgv {
21  namespace plot {
22 
26 enum VisualVariable
27 {
28  VV_COLOR,
29  VV_OPACITY,
30  VV_SIZE
31 };
32 
33 struct domain_config : public cgv::render::render_types
34 {
36  bool show_domain;
38  bool fill;
40  std::string title;
42  vecn title_pos;
44  rgb color;
46  rgba title_color;
48  float reference_size;
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);
67 };
68 
70 enum ChartType
71 {
72  CT_POINT,
73  CT_LINE_CHART,
74  CT_BAR_CHART
75 };
76 
77 struct mapped_rgb : public cgv::render::render_types
78 {
79  rgb color;
80  int color_idx;
81  mapped_rgb(const rgb& c = rgb(1,1,1)) : color(c), color_idx(-1) {}
82 };
83 
84 struct mapped_opacity
85 {
86  float opacity;
87  int opacity_idx;
88  mapped_opacity(float o = 1.0f) : opacity(o), opacity_idx(-1) {}
89 };
90 
91 struct mapped_size
92 {
93  float size;
94  int size_idx;
95  mapped_size(float s = 1.0f) : size(s), size_idx(-1) {}
96 };
97 
98 struct mapped_rgba : public cgv::render::render_types
99 {
100  rgba color;
101  int color_idx;
102  int opacity_idx;
103  mapped_rgba(const rgba& c = rgba(1, 1, 1, 1)) : color(c), color_idx(-1), opacity_idx(-1) {}
104 
105 };
106 
107 enum SubPlotInfluence
108 {
109  SPI_NONE = 0,
110  SPI_POINT = 1,
111  SPI_POINT_HALO = 2,
112  SPI_LINE = 4,
113  SPI_LINE_HALO = 8,
114  SPI_STICK = 16,
115  SPI_BAR = 32,
116  SPI_BAR_OUTLINE = 64,
117  SPI_ALL = 127
118 };
119 
121 struct CGV_API plot_base_config : public cgv::render::render_types
122 {
124  std::string name;
125 
127  size_t begin_sample;
129  size_t end_sample;
130 
132  bool show_plot;
133 
135  SubPlotInfluence sub_plot_influence;
137  mapped_rgb ref_color;
139  mapped_opacity ref_opacity;
141  mapped_size ref_size;
142 
146  mapped_size point_size;
147 
149  mapped_rgba point_color;
151  mapped_size point_halo_width;
153  mapped_rgba point_halo_color;
154 
158  mapped_size line_width;
160  mapped_rgba line_color;
162  mapped_size line_halo_width;
164  mapped_rgba line_halo_color;
165 
173  mapped_size stick_width;
175  mapped_rgba stick_color;
176 
178  bool show_bars;
182  float bar_base_window;
184  mapped_size bar_outline_width;
186  mapped_size bar_percentual_width;
188  mapped_rgba bar_color;
190  mapped_rgba bar_outline_color;
191 
193  plot_base_config(const std::string& _name, unsigned dim);
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);
206  virtual ~plot_base_config();
207 };
208 
210 enum AttributeSource
211 {
212  AS_NONE,
213  AS_SAMPLE_CONTAINER,
214  AS_POINTER,
215  AS_VBO
216 };
217 
219 struct CGV_API attribute_source
220 {
221  AttributeSource source;
222  union {
223  int sub_plot_index; // index of other subplot or -1 for current subplot
224  const float* pointer; // pointer to external data
225  const cgv::render::vertex_buffer* vbo_ptr; // pointer to vbo
226  };
227  size_t offset; // offset into vbo or coordinate axis into sample container
228  size_t count;
229  size_t stride; // stride in all representations
233  attribute_source(int sub_plot_index, size_t ai, size_t _count, size_t _stride);
235  attribute_source(const float* _pointer, size_t _count, size_t _stride);
237  attribute_source(const cgv::render::vertex_buffer* _vbo_ptr, size_t _offset, size_t _count, size_t _stride);
240 };
241 
244 {
245  bool samples_out_of_date;
246  bool sources_out_of_date;
247  size_t count;
250  std::vector<attribute_source> attribute_sources;
252 };
254 enum LegendComponent
255 {
256  LC_HIDDEN = 0,
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,
263  LC_ANY = 63
264 };
265 
266 struct sample_access
267 {
268  virtual size_t size(unsigned i) const = 0;
269  virtual float operator() (unsigned i, unsigned k, unsigned o) const = 0;
270 };
271 
273 class CGV_API plot_base : public cgv::render::drawable, virtual public cgv::signal::tacker
274 {
277 private:
279  cgv::render::shader_program legend_prog;
280 protected:
281  cgv::render::view* view_ptr;
283  struct label_info
284  {
285  vecn position;
286  std::string label;
288  float scale;
289  label_info(const vecn& _position, const std::string& _label, cgv::render::TextAlignment _align)
290  : position(_position), label(_label), align(_align), scale(1.0f) {}
291  };
293  struct tick_batch_info
294  {
296  int ai, aj;
298  bool primary;
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);
309  };
311  std::vector<label_info> tick_labels, legend_tick_labels;
313  std::vector<tick_batch_info> tick_batches, legend_tick_batches;
315  float layer_depth;
316 
319  static std::vector<const char*> font_names;
322  static std::string font_name_enum_def;
323 public:
325  void ensure_font_names();
326 protected:
328 
331  unsigned dim;
334  unsigned nr_attributes;
336  domain_config dom_cfg;
338  domain_config* dom_cfg_ptr;
340  std::vector<plot_base_config*> configs;
342 
345  quat orientation;
350  vec3 world_space_from_plot_space(const vecn& pnt_plot) const;
352  vec3 transform_to_world(const vecn& pnt_attr) const;
354 public:
357  LegendComponent legend_components;
368 
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];
382 
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];
397 
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];
407 protected:
421  std::vector<attribute_source_array> attribute_source_arrays;
423  void on_legend_axis_change(cgv::gui::provider& p, cgv::gui::control<int>& ctrl);
425  void on_font_selection();
427  void on_font_face_selection();
429  void set_plot_uniforms(cgv::render::context& ctx, cgv::render::shader_program& prog);
431  void set_mapping_uniforms(cgv::render::context& ctx, cgv::render::shader_program& prog);
432 private:
434  size_t enable_attributes(cgv::render::context& ctx, int i, const sample_access& sa);
435 protected:
437  cgv::render::rectangle_render_style rrs, font_rrs;
438  cgv::render::attribute_array_manager aam_legend, aam_legend_ticks, aam_title;
440  void draw_rectangles(cgv::render::context& ctx, cgv::render::attribute_array_manager& aam,
441  std::vector<box2>& R, std::vector<rgb>& C, std::vector<float>& D, size_t offset = 0);
443  void draw_tick_labels(cgv::render::context& ctx, cgv::render::attribute_array_manager& aam_ticks,
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);
450  void disable_attributes(cgv::render::context& ctx, int i);
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);
458  void draw_title(cgv::render::context& ctx, vec2 pos, float depth, int si = -1);
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);
471 
472 public:
474  plot_base(unsigned dim, unsigned nr_attributes = 0);
476  unsigned get_dim() const { return dim; }
478  void set_view_ptr(cgv::render::view* _view_ptr);
481  void set_label_font(float font_size, cgv::media::font::FontFaceAttributes ffa = cgv::media::font::FFA_REGULAR, const std::string& font_name = "");
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);
490 
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;
528 
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);
544 
547  unsigned get_nr_sub_plots() const;
550  virtual unsigned add_sub_plot(const std::string& name) = 0;
552  virtual void delete_sub_plot(unsigned i) = 0;
554  plot_base_config& ref_sub_plot_config(unsigned i);
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);
566 
568  bool init(cgv::render::context& ctx);
570  void clear(cgv::render::context& ctx);
571 
574 protected:
575  void update_ref_opacity(unsigned i, cgv::gui::provider& p);
576  void update_ref_opacity_index(unsigned i, cgv::gui::provider& p);
577  void update_ref_size(unsigned i, cgv::gui::provider& p);
578  void update_ref_size_index(unsigned i, cgv::gui::provider& p);
579  void update_ref_color(unsigned i, cgv::gui::provider& p);
580  void update_ref_color_index(unsigned i, cgv::gui::provider& p);
581  void add_mapped_size_control(cgv::gui::provider& p, cgv::base::base* bp, const std::string& name, mapped_size& ms, std::string options = "");
582  void add_mapped_rgb_control(cgv::gui::provider& p, cgv::base::base* bp, const std::string& name, mapped_rgb& ms);
583  void add_mapped_rgba_control(cgv::gui::provider& p, cgv::base::base* bp, const std::string& name, mapped_rgba& ms);
584  void add_mapped_opacity_control(cgv::gui::provider& p, cgv::base::base* bp, const std::string& name, mapped_opacity& ms);
585 
586 public:
588  virtual void create_plot_gui(cgv::base::base* bp, cgv::gui::provider& p);
590  virtual void create_base_config_gui(cgv::base::base* bp, cgv::gui::provider& p, unsigned i);
592  virtual void create_point_config_gui(cgv::base::base* bp, cgv::gui::provider& p, plot_base_config& pbc);
594  virtual void create_line_config_gui(cgv::base::base* bp, cgv::gui::provider& p, plot_base_config& pbc);
596  virtual void create_stick_config_gui(cgv::base::base* bp, cgv::gui::provider& p, plot_base_config& pbc);
598  virtual void create_bar_config_gui(cgv::base::base* bp, cgv::gui::provider& p, plot_base_config& pbc);
600  virtual void create_config_gui(cgv::base::base* bp, cgv::gui::provider& p, unsigned i);
602  virtual void create_gui(cgv::base::base* bp, cgv::gui::provider& p);
604 };
605 
606  }
607 }
608 
609 #include <cgv/config/lib_end.h>
cgv::plot::plot_base_config::end_sample
size_t end_sample
defaults to -1 and effectively is always the end of the sample vector
Definition: plot_base.h:129
cgv::render::attribute_array_binding
Definition: attribute_array_binding.h:20
cgv::render::view
Definition: view.h:22
cgv::plot::plot_base::label_font_face
cgv::media::font::font_face_ptr label_font_face
store pointer to label font face
Definition: plot_base.h:411
cgv::plot::plot_base::tick_labels
std::vector< label_info > tick_labels
all tick labels
Definition: plot_base.h:311
cgv::plot::plot_base::nr_attributes
unsigned nr_attributes
number of additional attributes
Definition: plot_base.h:334
cgv::plot::plot_base::aab_legend
cgv::render::attribute_array_binding aab_legend
manage attributes for legend drawing
Definition: plot_base.h:419
cgv::plot::plot_base_config::sub_plot_influence
SubPlotInfluence sub_plot_influence
store bit field to define which sub plots are influenced by reference values
Definition: plot_base.h:135
cgv::plot::plot_base::rrs
cgv::render::rectangle_render_style rrs
render style of rectangles
Definition: plot_base.h:437
cgv::plot::plot_base::attribute_source_arrays
std::vector< attribute_source_array > attribute_source_arrays
attribute sources
Definition: plot_base.h:421
cgv::plot::plot_base::layer_depth
float layer_depth
depth offset of a single layer
Definition: plot_base.h:315
cgv::math::fvec< float, 2 >
cgv::render::vertex_buffer
Definition: vertex_buffer.h:13
cgv::plot::plot_base_config::point_halo_width
mapped_size point_halo_width
width of point halo in pixel
Definition: plot_base.h:151
cgv::plot::plot_base::get_dim
unsigned get_dim() const
return nr dimensions of plot
Definition: plot_base.h:476
cgv::plot::plot_base_config::ref_color
mapped_rgb ref_color
reference color, when changed, all colors are adapted with set_colors()
Definition: plot_base.h:137
cgv::math::quaternion< float >
cgv::plot::plot_base_config::bar_percentual_width
mapped_size bar_percentual_width
percentual width of bar computed assuming a uniform y-sampling distance
Definition: plot_base.h:186
cgv::plot::plot_base::legend_color
rgba legend_color
color and opacity of legend
Definition: plot_base.h:366
cgv::plot::plot_base_config::point_halo_color
mapped_rgba point_halo_color
color of point halo
Definition: plot_base.h:153
cgv::math::vec
A column vector class.
Definition: fvec.h:13
cgv::data::ref_ptr< font >
cgv::media::font::FontFaceAttributes
FontFaceAttributes
declaration of supported attributes of font faces
Definition: font.h:21
cgv::plot::plot_base_config::bar_outline_color
mapped_rgba bar_outline_color
bar outline color
Definition: plot_base.h:190
cgv::plot::plot_base::legend_axis
int legend_axis
coordinate direction along which to draw legend
Definition: plot_base.h:364
cgv::plot::plot_base_config::show_bars
bool show_bars
whether to show bars
Definition: plot_base.h:178
cgv::plot::plot_base_config::stick_width
mapped_size stick_width
line width of stick
Definition: plot_base.h:173
cgv::signal::tacker
Definition: abst_signal.h:63
cgv::plot::plot_base_config::bar_outline_width
mapped_size bar_outline_width
line width of bar outlines
Definition: plot_base.h:184
cgv::plot::plot_base_config::show_sticks
bool show_sticks
whether to show straight lines to the bottom of the plot, which are called sticks
Definition: plot_base.h:167
cgv::plot::plot_base_config::stick_color
mapped_rgba stick_color
color of the stick line
Definition: plot_base.h:175
cgv::plot::plot_base_config::bar_color
mapped_rgba bar_color
bar fill color
Definition: plot_base.h:188
cgv::plot::plot_base_config::ref_opacity
mapped_opacity ref_opacity
reference opacity, when changed, all opcities are adapted with set_opacity()
Definition: plot_base.h:139
cgv::plot::plot_base_config::show_points
bool show_points
whether to show data points
Definition: plot_base.h:144
cgv::render::attribute_array_manager
attribute array manager used to upload arrays to gpu
Definition: renderer.h:21
cgv::plot::plot_base::configs
std::vector< plot_base_config * > configs
store one configuration per sub plot
Definition: plot_base.h:340
cgv::plot::plot_base::title_font
cgv::media::font::font_ptr title_font
store pointer to title font
Definition: plot_base.h:413
cgv::gui::provider
derive from this class to provide a gui to the current viewer
Definition: provider.h:64
cgv::render::shader_program
Definition: shader_program.h:25
cgv::media::color
Definition: color.h:51
cgv::plot::plot_base::font_name_enum_def
static std::string font_name_enum_def
concatenate font names to enum definition for dropdown control
Definition: plot_base.h:322
cgv::plot::plot_base::vbo_legend
cgv::render::vertex_buffer vbo_legend
vbo for legend drawing
Definition: plot_base.h:417
cgv::plot::plot_base
Definition: plot_base.h:274
cgv::plot::plot_base_config::line_halo_color
mapped_rgba line_halo_color
color of line halo
Definition: plot_base.h:164
cgv::plot::plot_base::tick_batches
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
cgv::plot::plot_base::dom_cfg_ptr
domain_config * dom_cfg_ptr
pointer to currently used domain config
Definition: plot_base.h:338
cgv::gui::control
Definition: control.h:82
cgv::plot::plot_base_config::show_plot
bool show_plot
whether to show sub plot
Definition: plot_base.h:132
cgv::plot::plot_base::delete_sub_plot
virtual void delete_sub_plot(unsigned i)=0
delete the i-th sub plot
cgv::plot::plot_base::add_sub_plot
virtual unsigned add_sub_plot(const std::string &name)=0
add sub plot and return sub plot index
cgv::plot::plot_base::legend_extent
vec2 legend_extent
width of legend
Definition: plot_base.h:362
cgv::plot::plot_base::label_info
render information stored per label
Definition: plot_base.h:284
cgv::plot::plot_base_config::stick_coordinate_index
int stick_coordinate_index
extended stick information
Definition: plot_base.h:169
cgv::plot::plot_base::title_font_face
cgv::media::font::font_face_ptr title_font_face
store pointer to title font face
Definition: plot_base.h:415
cgv::plot::plot_base::dom_cfg
domain_config dom_cfg
domain configuration
Definition: plot_base.h:336
cgv::plot::plot_base::legend_location
vec3 legend_location
center location of legend in domain coordinates
Definition: plot_base.h:360
cgv::plot::plot_base_config::bar_coordinate_index
int bar_coordinate_index
extended bar information
Definition: plot_base.h:180
cgv::plot::plot_base_config::name
std::string name
name of sub plot
Definition: plot_base.h:124
cgv::base::base
Definition: base.h:57
cgv::render::drawable
Definition: drawable.h:15
cgv::plot::plot_base_config::point_color
mapped_rgba point_color
point color
Definition: plot_base.h:149
cgv::render::TextAlignment
TextAlignment
different text alignments
Definition: context.h:218
cgv::plot::plot_base_config::ref_size
mapped_size ref_size
reference size, when changed, all sizes are adapted with set_size()
Definition: plot_base.h:141
cgv::plot::attribute_source
store source of a single plot attribute (one coordinate axis or one float attribute)
Definition: plot_base.h:220
cgv::plot::plot_base_config::line_color
mapped_rgba line_color
line color
Definition: plot_base.h:160
cgv::plot::plot_base_config::begin_sample
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
cgv::plot::plot_base_config::line_width
mapped_size line_width
line width
Definition: plot_base.h:158
cgv::plot::plot_base_config::point_size
mapped_size point_size
point size in pixels
Definition: plot_base.h:146
cgv::plot::plot_base_config::show_lines
bool show_lines
whether to connect data points with lines
Definition: plot_base.h:156
cgv::plot::attribute_source_array
struct that manages attribute sources and corresponding gpu objects per subplot
Definition: plot_base.h:244
cgv
the cgv namespace
Definition: vr_calib.cxx:9
cgv::plot::plot_base_config::line_halo_width
mapped_size line_halo_width
width of line halo in pixel
Definition: plot_base.h:162
cgv::plot::plot_base_config::stick_base_window
float stick_base_window
base window position of stick
Definition: plot_base.h:171
cgv::plot::plot_base::label_font
cgv::media::font::font_ptr label_font
store pointer to label font
Definition: plot_base.h:409
cgv::render::context
Definition: context.h:525
cgv::plot::plot_base::center_location
vec3 center_location
center location of domain in world coordinates
Definition: plot_base.h:348
cgv::plot::plot_base_config
Definition: plot_base.h:122