/* See {bbplot.h} */ /* Last edited on 2007-12-26 18:04:26 by stolfi */ #include #include #include #include #include #include PSStream *bbplot_new_stream ( bool_t epsfmt, char *outName, char *title, Interval xr, Interval yr, double hsize, double vsize, bool_t equal, double *xsc, double *ysc ) { PSStream *ps; /* Compute widths of {xr} and {yr}: */ double xw = xr.hi - xr.lo; double yw = yr.hi - yr.lo; /* Add a safety margin around {xr,yr}: */ double xmrg = 0.03*xw; double ymrg = 0.03*yw; xr.lo -= xmrg; xr.hi += xmrg; yr.lo -= ymrg; yr.hi += ymrg; /* Recompute {xw,yw} for expanded intervals: */ xw = xr.hi - xr.lo; yw = yr.hi - yr.lo; /* Compute {xscale,yscale} so that {(xscale*xw)/(yscale*yw) = hsize/vsize}: */ double xscale, yscale; if (equal) { /* Set {xscale,yscale} to 1. Then {pswr} will adjust the window for equal scales: */ xscale = 1.0; yscale = 1.0; } else { /* Set {xscale,yscale} so that {xscale*xw=hsize, yscale*yw = vsize}: */ xscale = hsize/xw; yscale = vsize/yw; } double mrg = 4.0; /* Figure margin, if EPS format. */ ps = pswr_new_stream(epsfmt, outName, NULL, "letter", hsize + 2*mrg, vsize + 2*mrg); pswr_new_picture(ps, xscale*xr.lo, xscale*xr.hi, yscale*yr.lo, yscale*yr.hi); pswr_set_pen(ps, 0.0,0.0,0.0, 0.10, 0.0,0.0); if (! epsfmt) { pswr_add_caption(ps, title, 0.0); } *xsc = xscale; *ysc = yscale; return ps; }