racket/collects/plot/src/all/pltick.c
2005-05-27 18:56:37 +00:00

140 lines
3.3 KiB
C

/* $Id: pltick.c,v 1.2 2005/03/17 21:39:21 eli Exp $
Routines for drawing error bars and tick marks.
*/
#include "plplotP.h"
/*----------------------------------------------------------------------*\
* void plxtik()
*
* Draws a tick parallel to x.
\*----------------------------------------------------------------------*/
void
plxtik(PLINT x, PLINT y, PLINT below, PLINT above)
{
plP_draphy(x, y);
if (below != 0)
plP_draphy(x, y - below);
if (above != 0)
plP_draphy(x, y + above);
plP_draphy(x, y);
}
/*----------------------------------------------------------------------*\
* void plytik()
*
* Draws a tick parallel to y.
\*----------------------------------------------------------------------*/
void
plytik(PLINT x, PLINT y, PLINT left, PLINT right)
{
plP_draphy(x, y);
if (left != 0)
plP_draphy(x - left, y);
if (right != 0)
plP_draphy(x + right, y);
plP_draphy(x, y);
}
/*----------------------------------------------------------------------*\
* void plstik()
*
* Draws a slanting tick at position (mx,my) (measured in mm) of
* vector length (dx,dy).
\*----------------------------------------------------------------------*/
void
plstik(PLFLT mx, PLFLT my, PLFLT dx, PLFLT dy)
{
plP_draphy(plP_mmpcx(mx), plP_mmpcy(my));
plP_draphy(plP_mmpcx((PLFLT) (mx + dx)), plP_mmpcy((PLFLT) (my + dy)));
plP_draphy(plP_mmpcx(mx), plP_mmpcy(my));
}
/*----------------------------------------------------------------------*\
* void plerx1()
*
* Plot single horizontal error bar.
\*----------------------------------------------------------------------*/
static void
plerx1(PLFLT xmin, PLFLT xmax, PLFLT y)
{
PLINT yminor;
yminor = MAX(1.0, plsc->minht * plsc->ypmm);
plP_movwor(xmin, y);
plxtik(plP_wcpcx(xmin), plP_wcpcy(y), yminor, yminor);
plP_drawor(xmax, y);
plxtik(plP_wcpcx(xmax), plP_wcpcy(y), yminor, yminor);
}
/*----------------------------------------------------------------------*\
* void plery1()
*
* Plot single vertical error bar.
\*----------------------------------------------------------------------*/
static void
plery1(PLFLT x, PLFLT ymin, PLFLT ymax)
{
PLINT xminor;
xminor = MAX(1.0, plsc->minht * plsc->xpmm);
plP_movwor(x, ymin);
plytik(plP_wcpcx(x), plP_wcpcy(ymin), xminor, xminor);
plP_drawor(x, ymax);
plytik(plP_wcpcx(x), plP_wcpcy(ymax), xminor, xminor);
}
/*----------------------------------------------------------------------*\
* void plerrx()
*
* Plot horizontal error bars (xmin(i),y(i)) to (xmax(i),y(i)).
\*----------------------------------------------------------------------*/
MZ_DLLEXPORT
void
c_plerrx(PLINT n, PLFLT *xmin, PLFLT *xmax, PLFLT *y)
{
PLINT i;
if (plsc->level < 3) {
plabort("plerrx: Please set up window first");
return;
}
for (i = 0; i < n; i++)
plerx1(xmin[i], xmax[i], y[i]);
}
/*----------------------------------------------------------------------*\
* void plerry()
*
* Plot vertical error bars (x,ymin(i)) to (x(i),ymax(i)).
\*----------------------------------------------------------------------*/
MZ_DLLEXPORT
void
c_plerry(PLINT n, PLFLT *x, PLFLT *ymin, PLFLT *ymax)
{
PLINT i;
if (plsc->level < 3) {
plabort("plerry: Please set up window first");
return;
}
for (i = 0; i < n; i++)
plery1(x[i], ymin[i], ymax[i]);
}