1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
/*
* Demo showing the use of xyplot overlay, plot key and
* PostScript output.
*
* This file is part of xforms package
* T.C. Zhao and M. Overmars
*/
#include "forms.h"
#include <stdlib.h>
#include <math.h>
/**** Forms and Objects ****/
typedef struct
{
FL_FORM *fff;
void *vdata;
long ldata;
FL_OBJECT *xyplot;
} FD_fff;
extern FD_fff *create_form_fff(void);
extern void init_xyplot(FD_fff *);
int
main(int argc, char *argv[])
{
FD_fff *fd_fff;
fl_initialize(&argc, argv, "FormDemo", 0, 0);
fd_fff = create_form_fff();
/* fill-in form initialization code */
init_xyplot(fd_fff);
/* show the first form */
fl_show_form(fd_fff->fff, FL_PLACE_MOUSE, FL_TRANSIENT, "XYPlot Overlay");
fl_do_forms();
if(fl_object_ps_dump(fd_fff->xyplot,"test.ps")>= 0)
fprintf(stderr,"PostScript output test.ps written\n");
return 0;
}
void newsymbol(FL_OBJECT *ob, int id,
FL_POINT *p, int n, int w, int h)
{
int r = (w + h) / 4;
FL_POINT *ps = p + n;
for (; p < ps; p++)
fl_circf(p->x, p->y, r, FL_WHITE);
}
void
init_xyplot(FD_fff * fd_fff)
{
int i;
float xx[20], yy[20];
for (i = 0; i <= 10; i++)
{
xx[i] = i;
yy[i] = exp(-(xx[i] - 5) * (xx[i] - 5) / 8);
}
fl_set_xyplot_data(fd_fff->xyplot, xx, yy, 8, "Plot Title", "X-Axis", "Y|Axis");
fl_set_xyplot_ybounds(fd_fff->xyplot, 0, 1.1);
fl_set_xyplot_xbounds(fd_fff->xyplot, 0, 10);
fl_add_xyplot_overlay(fd_fff->xyplot, 1, xx, yy, 11, FL_GREEN);
fl_set_xyplot_overlay_type(fd_fff->xyplot, 1, FL_LINEPOINTS_XYPLOT);
fl_set_xyplot_interpolate(fd_fff->xyplot, 1, 2, 0.1);
fl_set_xyplot_symbol(fd_fff->xyplot,-1, newsymbol);
fl_add_xyplot_text(fd_fff->xyplot, 0.5, 1.0, "Gaussian\nDistribution",
FL_ALIGN_RIGHT, FL_WHITE);
fl_set_xyplot_key(fd_fff->xyplot, 0, "Original");
fl_set_xyplot_key(fd_fff->xyplot, 1, "Overlay");
fl_set_xyplot_key_position(fd_fff->xyplot, 9.8, 1.08, FL_ALIGN_BOTTOM_LEFT);
}
FD_fff *
create_form_fff(void)
{
FL_OBJECT *obj;
FD_fff *fdui = (FD_fff *) fl_calloc(1, sizeof(*fdui));
fdui->fff = fl_bgn_form(FL_NO_BOX, 370, 310);
obj = fl_add_box(FL_UP_BOX, 0, 0, 370, 310, "");
fdui->xyplot = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT, 10, 20, 350, 260,
"An XYPlot with overlay");
fl_set_object_lalign(obj, FL_ALIGN_BOTTOM | FL_ALIGN_INSIDE);
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
fl_set_object_boxtype(obj, FL_DOWN_BOX);
fl_set_object_color(obj, FL_BLACK, FL_YELLOW);
obj = fl_add_button(FL_HIDDEN_BUTTON, 10, 10, 350, 290, "");
fl_set_button_shortcut(obj,"qQ", 0);
fl_end_form();
return fdui;
}
/*---------------------------------------*/
|