]> git.cworth.org Git - acre/blobdiff - acre-test.c
Allow zooming in or out by setting ranges of data to be shown on either axis.
[acre] / acre-test.c
index 472ea98a37c9ac4aa0812b37ecc3e6675520a2d2..c0cc8836f83d03697b038df7918464fdb45fb4a8 100644 (file)
@@ -1,4 +1,5 @@
 #include "acre.h"
+#include <math.h>
 
 int
 main (void)
@@ -11,11 +12,10 @@ main (void)
     acre_t *acre;
     acre_data_t *data0, *data1, *data2;
 
-    surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 800, 600);
+    surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 1600, 1200);
     cr = cairo_create (surface);
 
     acre = acre_create ();
-    acre_set_title (acre, "Acre Test Plot");
     acre_set_x_axis_label (acre, "X axis");
     acre_set_y_axis_label (acre, "Y axis");
 
@@ -28,15 +28,58 @@ main (void)
     acre_data_set_name (data2, "Data 2");
 
     for (i = 0; i <= 100; i++) {
-       acre_data_add_point_2d (data0, i, 100 - (i/4.0)*(i/4.0));
-       acre_data_add_point_2d (data1, i,  50 - (i/3.5)*(i/3.5));
-       acre_data_add_point_2d (data2, i,   0 - (i/3.0)*(i/3.0));
+       acre_data_add_point_2d (data0, i,   0 - (i/3.0)*(i/3.0));
+    }
+
+    for (i = 0; i < 100; i++) {
+       double t = 1.0 - (i / 100.0);
+       acre_data_add_point_2d (data1, i, -1000 * (1.0 - t*t*t));
+    }
+
+    for (i = 0; i <= 1000; i++) {
+       double t, x, y;
+       t = i/10.0 - 50;
+       x = t + 50;
+       if (t == 0.0)
+           y = -200;
+       else
+           y = -1200 + 1000 * sin(t) / t;
+       acre_data_add_point_2d (data2, x, y);
     }
 
     acre_add_data (acre, data0);
     acre_add_data (acre, data1);
     acre_add_data (acre, data2);
 
+    /* Draw a full-data-range graph in upper-left. */
+    acre_set_title (acre, "All the data");
+
+    acre_draw (acre, cr, 800, 600);
+
+    /* Zoom in on X and draw at lower-left. */
+    cairo_translate (cr, 0, 600);
+
+    acre_set_title (acre, "Zoom X, auto-size Y");
+    acre_set_x_axis_range (acre, 40, 60);
+
+    acre_draw (acre, cr, 800, 600);
+
+    /* Zoom in on Y and draw at upper-right. */
+    cairo_translate (cr, 800, -600);
+
+    acre_set_title (acre, "Zoom Y, auto-size X");
+    acre_set_x_axis_range_auto (acre);
+    acre_set_y_axis_range (acre, -250, 0);
+
+    acre_draw (acre, cr, 800, 600);
+
+    /* Zoom out on X and Y lower-right. */
+    cairo_translate (cr, 0, 600);
+
+    acre_set_title (acre, "Zoom out X and Y");
+    acre_set_x_axis_range (acre, -50, 150);
+    acre_set_y_axis_range (acre, -1500, 500);
+
     acre_draw (acre, cr, 800, 600);
 
     acre_destroy (acre);