// Shapes.cc // Gloobs example program // // draws a few shapes, for no particular reason // // by Smylers // 2000 Jan 10: original version // 2000 Jan 17: improved comments #include int main() { // avoid having to use the Gloobs:: prefix all over the place by specifying // the Gloobs namespace: using namespace Gloobs; // now can simply create a Canvas (meaning Gloobs::Canvas) of type X11 // (meaning Gloobs::X11): Canvas DemoPic(X11, 400, 300, "Shapes"); // open rectangles can be created just like filled ones: DemoPic.pen(4); DemoPic.rectangle(25, 25, 275, 50); // the line width is customizable: DemoPic.pen(14); DemoPic.set_line_width(4); DemoPic.rectangle(300, 25, 375, 75); // circles are easy, too; the first two parameters are the co-ordinates of // the centre point, and the third one is the radius: DemoPic.pen(11); DemoPic.filled_circle(75, 225, 50); // ellipses require two radii, one horizontal, and one vertical: DemoPic.pen(2); DemoPic.set_line_width(2); DemoPic.ellipse(300, 250, 75, 25); // an arc is a partial ellipse, so they have those same four parameters plus // a start angle and an end angle; these are in degrees and measure // counterclockwise from 3 o'clock: DemoPic.pen(6); DemoPic.arc(175, 250, 50, 25, 45, 160); // a filled arc is like a pie segment; setting both the radii to the same // value makes it a segment of a circle, rather than an ellipse: DemoPic.pen(16); DemoPic.filled_arc(150, 200, 50, 50, 0, 60); // for more complex polygons, first create an array of the co-ordinates of // their vertices: double Steps[] = { 25, 75, 25, 100, 50, 100, 50, 125, 75, 125, 75, 150, 100, 150, 100, 75 }; // then this can be drawn on the canvas; the first parameter is the number of // vertices: DemoPic.pen(22); DemoPic.filled_polygon(8, Steps); // individual pixels are plotted very simply: DemoPic.pen(3); DemoPic.plot(125, 75); // quasi-pixels are like pixels, but bigger; they can be circular: DemoPic.set_QP(6, QPcirc); DemoPic.plot_QP(150, 75); DemoPic.plot_QP(175, 75); DemoPic.plot_QP(200, 75); // or square: DemoPic.set_QP(4, QPrect); DemoPic.plot_QP(150, 100); DemoPic.plot_QP(175, 100); DemoPic.plot_QP(200, 100); // for text, specify the co-ordinates of the bottom-left corner: DemoPic.pen(19); DemoPic.string(225, 200, "ameliorate"); // the font size is specified in pixels: DemoPic.pen(20); DemoPic.set_font_size(25); DemoPic.string(150, 150, "synergy, not complexity"); DemoPic.pause(); return 0; }