-rw-r--r-- | agg-plot/cplot.h | 64 |
diff --git a/agg-plot/cplot.h b/agg-plot/cplot.h index 4e81c7fb..626cb6f9 100644 --- a/agg-plot/cplot.h +++ b/agg-plot/cplot.h @@ -5,32 +5,76 @@ #include <stdlib.h> #include <limits.h> -#include <list> - #include "canvas.h" #include "units.h" #include "agg_conv_transform.h" #include "agg_color_rgba.h" #include "agg_path_storage.h" +#include "agg_array.h" -class line { -public: - line(agg::rgba8 c) : path(), color(c) {}; +struct drawable { + virtual void draw(canvas& can, agg::trans_affine& t) = 0; + virtual void bounding_box(double *x1, double *y1, double *x2, double *y2) = 0; + virtual ~drawable() {}; +}; +struct line : public drawable { agg::path_storage path; agg::rgba8 color; + + line(agg::rgba8 col): path(), color(col) {}; + + virtual void draw(canvas& can, agg::trans_affine& t); + virtual void bounding_box(double *x1, double *y1, double *x2, double *y2); +}; + +struct dashed_line : public line { +public: + dashed_line(double l1, double l2, agg::rgba8 col): + line(col), m_l1(l1), m_l2(l2) + {}; + + virtual void draw(canvas& can, agg::trans_affine& t); + +private: + double m_l1; + double m_l2; +}; + +struct polygon : public line { + polygon(agg::rgba8 col): line(col) {}; + virtual void draw(canvas& can, agg::trans_affine& t); +}; + +struct poly_outline : public line { + agg::rgba8 m_outline_color; + + poly_outline(agg::rgba8 col, agg::rgba8 out_col) : + line(col), m_outline_color(out_col) + {}; + + virtual void draw(canvas& can, agg::trans_affine& t); }; class cplot { + typedef agg::pod_bvector<drawable *> container_type; + public: - line& new_line(agg::rgba8 color); - - const agg::trans_affine& trans() const { return m_trans; }; + + cplot() : m_lines(), m_trans(), m_bbox_set(false) {}; + + virtual ~cplot() + { + for (unsigned j = 0; j < m_lines.size(); j++) + delete m_lines[j]; + }; + + void add(drawable *d); virtual void draw(canvas &canvas); - cplot() : m_lines(), m_trans(), m_bbox_set(false) {}; + const agg::trans_affine& trans() const { return m_trans; }; protected: void draw_lines(canvas &canvas); @@ -39,7 +83,7 @@ protected: static void viewport_scale(agg::trans_affine& trans); - std::list<line> m_lines; + container_type m_lines; agg::trans_affine m_trans; // bounding box |