#include "agg_path_storage.h"

namespace agg
{
  class path_storage
  {
  public:
    ~path_storage();
    path_storage();
    path_storage(const path_storage& ps);
    
    void remove_all();
    
    unsigned last_vertex(double* vertex_x, double* vertex_y) const;
    unsigned prev_vertex(double* vertex_x, double* vertex_y) const;
    
    void rel_to_abs(double* vertex_x, double* vertex_y) const;
    
    void move_to(double x, double y);
    void move_rel(double dx, double dy);
    
    void line_to(double x, double y);
    void line_rel(double dx, double dy);
    
    void arc_to(double rx, double ry,
		double angle,
		bool large_arc_flag,
		bool sweep_flag,
		double x, double y);
    
    void arc_rel(double rx, double ry,
		 double angle,
		 bool large_arc_flag,
		 bool sweep_flag,
		 double dx, double dy);
    
    void curve3(double x_ctrl, double y_ctrl, 
		double x_to,   double y_to);
    
    void curve3_rel(double dx_ctrl, double dy_ctrl, 
		    double dx_to,   double dy_to);
    
    void curve3(double x_to, double y_to);
    
    void curve3_rel(double dx_to, double dy_to);
    
    void curve4(double x_ctrl1, double y_ctrl1, 
		double x_ctrl2, double y_ctrl2, 
		double x_to,    double y_to);
    
    void curve4_rel(double dx_ctrl1, double dy_ctrl1, 
		    double dx_ctrl2, double dy_ctrl2, 
		    double dx_to,    double dy_to);
    
    void curve4(double x_ctrl2, double y_ctrl2, 
		double x_to,    double y_to);
    
    void curve4_rel(double x_ctrl2, double y_ctrl2, 
		    double x_to,    double y_to);
    
    
    void end_poly(unsigned flags = path_flags_close);
    
    void close_polygon(unsigned flags = path_flags_none);
    void add_poly(const double* vertices, unsigned num, 
		  bool solid_path = false,
		  unsigned end_flags = path_flags_none);
    
    unsigned start_new_path();
    
    void copy_from(const path_storage& ps);
    unsigned total_vertices() const;
    unsigned vertex(unsigned idx, double* vertex_x, double* vertex_y) const;
    unsigned command(unsigned idx) const;
    void     rewind(unsigned path_id);
    unsigned vertex(double* vertex_x, double* vertex_y);
    
    unsigned arrange_orientations(unsigned path_id, path_flags_e new_orientation);
    void arrange_orientations_all_paths(path_flags_e new_orientation);
    
    void flip_x(double x1, double x2);
    void flip_y(double y1, double y2);
    void add_vertex(double x, double y, unsigned cmd);
    void modify_vertex(unsigned idx, double x, double y);
    void modify_command(unsigned idx, unsigned cmd);
  };
  
}



syntax highlighted by Code2HTML, v. 0.9.1