void draw_line(agg::grid_rasterizer& ras, double x1, double y1, double x2, double y2, double width) { double dx = x2 - x1; double dy = y2 - y1; double d = sqrt(dx*dx + dy*dy); dx = width * (y2 - y1) / d; dy = width * (x2 - x1) / d; ras.move_to_d(x1 - dx, y1 + dy); ras.line_to_d(x2 - dx, y2 + dy); ras.line_to_d(x2 + dx, y2 - dy); ras.line_to_d(x1 + dx, y1 - dy); }
void draw_ellipse(agg::grid_rasterizer& ras, double x, double y, double rx, double ry) { int i; ras.move_to_d(x + rx, y); for(i = 1; i < 360; i++) { double a = double(i) * 3.1415926 / 180.0; ras.line_to_d(x + cos(a) * rx, y + sin(a) * ry); } }
void draw_ellipse(agg::grid_rasterizer& ras, double x, double y, double rx, double ry) { int i; ras.move_to_d(x + rx, y); // Here we have a fixed number of approximation steps, namely 360 // while in reality it's supposed to be smarter. for(i = 1; i < 360; i++) { double a = double(i) * 3.1415926 / 180.0; ras.line_to_d(x + cos(a) * rx, y + sin(a) * ry); } }