#pragma once #include "plot_base.h" #include #include "lib_begin.h" namespace cgv { namespace plot { /** different lighting settings */ enum PlotFaceIllumination { PFI_NONE, PFI_PER_FACE, PFI_PER_VERTEX }; /** extend common plot configuration with parameters specific to 2d plot */ struct CGV_API plot2d_config : public plot_base_config { unsigned N; bool show_faces; Clr face_color; PlotFaceIllumination face_illumination; plot2d_config(); }; /** The \c plot2d class draws 2d plots with potentially several sub plots of different plot configuration */ class CGV_API plot2d : public plot_base { cgv::render::shader_program point_prog; cgv::render::shader_program line_prog; cgv::render::shader_program bar_prog; cgv::render::shader_program face_prog; void set_uniforms(cgv::render::context& ctx, cgv::render::shader_program& prog, unsigned i); protected: std::vector > samples; B3D domain; public: /// construct empty plot with default domain [0..1,0..1,0..1] plot2d(); /// adjust domain to data void adjust_domain_to_data(bool include_xy_plane = true); /// reference the shown domain B3D& ref_domain() { return domain; } /**@name management of sub plots*/ //@{ /// add sub plot and return reference to samples unsigned add_sub_plot(const std::string& name); /// set the number of samples of the i-th sub plot to N void set_samples_per_row(unsigned N, unsigned i = 0); /// return the number of samples per row unsigned get_samples_per_row(unsigned i) const; /// delete the i-th sub plot void delete_sub_plot(unsigned i); /// return a reference to the plot2d configuration of the i-th plot plot2d_config& ref_sub_plot2d_config(unsigned i = 0); /// return the samples of the i-th sub plot std::vector& ref_sub_plot_samples(unsigned i = 0); //@} void create_config_gui(cgv::base::base* bp, cgv::gui::provider& p, unsigned i); bool init(cgv::render::context& ctx); void draw(cgv::render::context& ctx); void clear(cgv::render::context& ctx); }; } } #include