Back to index

plt-scheme  4.2.1
Functions
plvpor.c File Reference
#include "plplotP.h"

Go to the source code of this file.

Functions

static void c_plenvi (PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLINT just, PLINT axis, PLINT old)
MZ_DLLEXPORT void c_plenv (PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLINT just, PLINT axis)
void c_plenv0 (PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLINT just, PLINT axis)
void c_plvsta (void)
void c_plvpor (PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax)
void c_plvpas (PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax, PLFLT aspect)
void c_plvasp (PLFLT aspect)
void c_plsvpa (PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax)

Function Documentation

MZ_DLLEXPORT void c_plenv ( PLFLT  xmin,
PLFLT  xmax,
PLFLT  ymin,
PLFLT  ymax,
PLINT  just,
PLINT  axis 
)

Definition at line 58 of file plvpor.c.

{
  c_plenvi(xmin, xmax, ymin, ymax, just, axis, 1); 
}

Here is the call graph for this function:

void c_plenv0 ( PLFLT  xmin,
PLFLT  xmax,
PLFLT  ymin,
PLFLT  ymax,
PLINT  just,
PLINT  axis 
)

Definition at line 72 of file plvpor.c.

{
  c_plenvi(xmin, xmax, ymin, ymax, just, axis, 0); 
}

Here is the call graph for this function:

static void c_plenvi ( PLFLT  xmin,
PLFLT  xmax,
PLFLT  ymin,
PLFLT  ymax,
PLINT  just,
PLINT  axis,
PLINT  old 
) [static]

Definition at line 80 of file plvpor.c.

{
    PLFLT lb, rb, tb, bb, dx, dy;
    PLFLT xsize, ysize, size, xscale, yscale, scale;
    PLFLT spxmin, spxmax, spymin, spymax;
    PLFLT vpxmin, vpxmax, vpymin, vpymax;

    if (plsc->level < 1) {
       plabort("plenv: Please call plinit first");
       return;
    }
    if (xmin == xmax) {
       plabort("plenv: Invalid xmin and xmax arguments");
       return;
    }
    if (ymin == ymax) {
       plabort("plenv: Invalid ymin and ymax arguments");
       return;
    }
    if (just < -1 || just > 2) {
       plabort("plenv: Invalid just option");
       return;
    }

    if (plsc->nsubx * plsc->nsuby == 1) /* not multiplot mode */
      old = 1;

    if (old == 1)
      pladv(0);
    else 
      plclear();

    if (just == 0)
       plvsta();
    else  if (just == 1){
       lb = 8.0 * plsc->chrht;
       rb = 5.0 * plsc->chrht;
       tb = 5.0 * plsc->chrht;
       bb = 5.0 * plsc->chrht;
       dx = ABS(xmax - xmin);
       dy = ABS(ymax - ymin);
       plgspa(&spxmin, &spxmax, &spymin, &spymax);
       xsize = spxmax - spxmin;
       ysize = spymax - spymin;
       xscale = dx / (xsize - lb - rb);
       yscale = dy / (ysize - tb - bb);
       scale = MAX(xscale, yscale);
       vpxmin = MAX(lb, 0.5 * (xsize - dx / scale));
       vpxmax = vpxmin + (dx / scale);
       vpymin = MAX(bb, 0.5 * (ysize - dy / scale));
       vpymax = vpymin + (dy / scale);
       plsvpa(vpxmin, vpxmax, vpymin, vpymax);
    } else if(just == 2) {
        lb = 8.0 * plsc->chrht;
        rb = 5.0 * plsc->chrht;
       tb = 5.0 * plsc->chrht;
       bb = 5.0 * plsc->chrht;
       plgspa(&spxmin, &spxmax, &spymin, &spymax);
       xsize = spxmax - spxmin;
       ysize = spymax - spymin;
       size = MIN(xsize-lb-rb, ysize-tb-bb);
       dx = (xsize-size-lb-rb)/2;
       vpxmin = lb + dx;
       vpxmax = vpxmin + size;
       dy = (ysize-size-bb-tb)/2;
       vpymin = bb + dy;
       vpymax = vpymin + size;
       plsvpa(vpxmin, vpxmax, vpymin, vpymax);
    }

    plwind(xmin, xmax, ymin, ymax);

    switch (axis) {
    case -2:
       break;
    case -1:
       plbox("bc", (PLFLT) 0.0, 0, "bc", (PLFLT) 0.0, 0);
       break;
    case 0:
       plbox("bcnst", (PLFLT) 0.0, 0, "bcnstv", (PLFLT) 0.0, 0);
       break;
    case 1:
       plbox("abcnst", (PLFLT) 0.0, 0, "abcnstv", (PLFLT) 0.0, 0);
       break;
    case 2:
       plbox("abcgnst", (PLFLT) 0.0, 0, "abcgnstv", (PLFLT) 0.0, 0);
       break;
    case 3:
       plbox("abcgnsth", (PLFLT) 0.0, 0, "abcgnstvh", (PLFLT) 0.0, 0);
       break;
    case 10:
       plbox("bclnst", (PLFLT) 0.0, 0, "bcnstv", (PLFLT) 0.0, 0);
       break;
    case 11:
       plbox("abclnst", (PLFLT) 0.0, 0, "abcnstv", (PLFLT) 0.0, 0);
       break;
    case 12:
       plbox("abcglnst", (PLFLT) 0.0, 0, "abcgnstv", (PLFLT) 0.0, 0);
       break;
    case 13:
       plbox("abcglnsth", (PLFLT) 0.0, 0, "abcgnstvh", (PLFLT) 0.0, 0);
       break;
    case 20:
       plbox("bcnst", (PLFLT) 0.0, 0, "bclnstv", (PLFLT) 0.0, 0);
       break;
    case 21:
       plbox("abcnst", (PLFLT) 0.0, 0, "abclnstv", (PLFLT) 0.0, 0);
       break;
    case 22:
       plbox("abcgnst", (PLFLT) 0.0, 0, "abcglnstv", (PLFLT) 0.0, 0);
       break; 
    case 23:
       plbox("abcgnsth", (PLFLT) 0.0, 0, "abcglnstvh", (PLFLT) 0.0, 0);
       break; 
    case 30:
       plbox("bclnst", (PLFLT) 0.0, 0, "bclnstv", (PLFLT) 0.0, 0);
       break;
    case 31:
       plbox("abclnst", (PLFLT) 0.0, 0, "abclnstv", (PLFLT) 0.0, 0);
       break;
    case 32:
       plbox("abcglnst", (PLFLT) 0.0, 0, "abcglnstv", (PLFLT) 0.0, 0);
       break; 
    case 33:
       plbox("abcglnsth", (PLFLT) 0.0, 0, "abcglnstvh", (PLFLT) 0.0, 0);
       break; 
    default:
       plwarn("plenv: Invalid axis argument");
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void c_plsvpa ( PLFLT  xmin,
PLFLT  xmax,
PLFLT  ymin,
PLFLT  ymax 
)

Definition at line 408 of file plvpor.c.

{
    PLFLT sxmin, symin;

    if (plsc->level < 1) {
       plabort("plsvpa: Please call plinit first");
       return;
    }
    if ((xmin >= xmax) || (ymin >= ymax)) {
       plabort("plsvpa: Invalid limits");
       return;
    }
    if ((plsc->cursub <= 0) || (plsc->cursub > (plsc->nsubx * plsc->nsuby))) {
       plabort("plsvpa: Please call pladv or plenv to go to a subpage");
       return;
    }

    sxmin = plP_dcmmx(plsc->spdxmi);
    symin = plP_dcmmy(plsc->spdymi);

    plsc->vpdxmi = plP_mmdcx((PLFLT) (sxmin + xmin));
    plsc->vpdxma = plP_mmdcx((PLFLT) (sxmin + xmax));
    plsc->vpdymi = plP_mmdcy((PLFLT) (symin + ymin));
    plsc->vpdyma = plP_mmdcy((PLFLT) (symin + ymax));

    plsc->vppxmi = plP_dcpcx(plsc->vpdxmi);
    plsc->vppxma = plP_dcpcx(plsc->vpdxma);
    plsc->vppymi = plP_dcpcy(plsc->vpdymi);
    plsc->vppyma = plP_dcpcy(plsc->vpdyma);

    plsc->clpxmi = plP_dcpcx(plsc->vpdxmi);
    plsc->clpxma = plP_dcpcx(plsc->vpdxma);
    plsc->clpymi = plP_dcpcy(plsc->vpdymi);
    plsc->clpyma = plP_dcpcy(plsc->vpdyma);

    plsc->level = 2;
}

Here is the call graph for this function:

void c_plvasp ( PLFLT  aspect)

Definition at line 359 of file plvpor.c.

{
    PLFLT spxmin, spxmax, spymin, spymax;
    PLFLT vpxmin, vpxmax, vpymin, vpymax;
    PLFLT xsize, ysize, nxsize, nysize;
    PLFLT lb, rb, tb, bb;

    if (plsc->level < 1) {
       plabort("plvasp: Please call plinit first");
       return;
    }

    lb = 8.0 * plsc->chrht;
    rb = 5.0 * plsc->chrht;
    tb = 5.0 * plsc->chrht;
    bb = 5.0 * plsc->chrht;

    plgspa(&spxmin, &spxmax, &spymin, &spymax);
    xsize = spxmax - spxmin;
    ysize = spymax - spymin;
    xsize -= lb + rb;              /* adjust for labels */
    ysize -= bb + tb;
    if (aspect * xsize > ysize) {
       nxsize = ysize / aspect;
       nysize = ysize;
    }
    else {
       nxsize = xsize;
       nysize = xsize * aspect;
    }

/* center plot within page */

    vpxmin = .5 * (xsize - nxsize) + lb;
    vpxmax = vpxmin + nxsize;
    vpymin = .5 * (ysize - nysize) + bb;
    vpymax = vpymin + nysize;

    plsvpa(vpxmin, vpxmax, vpymin, vpymax);
}

Here is the call graph for this function:

void c_plvpas ( PLFLT  xmin,
PLFLT  xmax,
PLFLT  ymin,
PLFLT  ymax,
PLFLT  aspect 
)

Definition at line 295 of file plvpor.c.

{
    PLFLT vpxmi, vpxma, vpymi, vpyma;
    PLFLT vpxmid, vpymid, vpxlen, vpylen, w_aspect, ratio;

    if (plsc->level < 1) {
       plabort("plvpas: Please call plinit first");
       return;
    }
    if ((xmin >= xmax) || (ymin >= ymax)) {
       plabort("plvpas: Invalid limits");
       return;
    }

    if (aspect <= 0.0) {
       c_plvpor(xmin, xmax, ymin, ymax);
       return;
    }

    vpxmi = plP_dcmmx(xmin);
    vpxma = plP_dcmmx(xmax);
    vpymi = plP_dcmmy(ymin);
    vpyma = plP_dcmmy(ymax);

    vpxmid = (vpxmi + vpxma) / 2.;
    vpymid = (vpymi + vpyma) / 2.;

    vpxlen = vpxma - vpxmi;
    vpylen = vpyma - vpymi;

    w_aspect = vpylen / vpxlen;
    ratio = aspect / w_aspect;

/*
 * If ratio < 1, you are requesting an aspect ratio (y/x) less than the natural
 * aspect ratio of the specified window, and you will need to reduce the length
 * in y correspondingly.  Similarly, for ratio > 1, x length must be reduced.
 */

    if (ratio <= 0.) {
       plabort("plvpas: Error in aspect ratio setting");
       return;
    }
    else if (ratio < 1.)
       vpylen = vpylen * ratio;
    else
       vpxlen = vpxlen / ratio;

    vpxmi = vpxmid - vpxlen / 2.;
    vpxma = vpxmid + vpxlen / 2.;
    vpymi = vpymid - vpylen / 2.;
    vpyma = vpymid + vpylen / 2.;

    plsvpa(vpxmi, vpxma, vpymi, vpyma);
}

Here is the call graph for this function:

void c_plvpor ( PLFLT  xmin,
PLFLT  xmax,
PLFLT  ymin,
PLFLT  ymax 
)

Definition at line 254 of file plvpor.c.

{
    if (plsc->level < 1) {
       plabort("plvpor: Please call plinit first");
       return;
    }
    if ((xmin >= xmax) || (ymin >= ymax)) {
       plabort("plvpor: Invalid limits");
       return;
    }
    if ((plsc->cursub <= 0) || (plsc->cursub > (plsc->nsubx * plsc->nsuby))) {
       plabort("plvpor: Please call pladv or plenv to go to a subpage");
       return;
    }

    plsc->vpdxmi = plsc->spdxmi + (plsc->spdxma - plsc->spdxmi) * xmin;
    plsc->vpdxma = plsc->spdxmi + (plsc->spdxma - plsc->spdxmi) * xmax;
    plsc->vpdymi = plsc->spdymi + (plsc->spdyma - plsc->spdymi) * ymin;
    plsc->vpdyma = plsc->spdymi + (plsc->spdyma - plsc->spdymi) * ymax;

    plsc->vppxmi = plP_dcpcx(plsc->vpdxmi);
    plsc->vppxma = plP_dcpcx(plsc->vpdxma);
    plsc->vppymi = plP_dcpcy(plsc->vpdymi);
    plsc->vppyma = plP_dcpcy(plsc->vpdyma);

    plsc->clpxmi = MAX(plsc->vppxmi, plsc->phyxmi);
    plsc->clpxma = MIN(plsc->vppxma, plsc->phyxma);
    plsc->clpymi = MAX(plsc->vppymi, plsc->phyymi);
    plsc->clpyma = MIN(plsc->vppyma, plsc->phyyma);

    plsc->level = 2;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 220 of file plvpor.c.

{
    PLFLT xmin, xmax, ymin, ymax;
    PLFLT lb, rb, tb, bb;

    if (plsc->level < 1) {
       plabort("plvsta: Please call plinit first");
       return;
    }

/*  Find out position of subpage boundaries in millimetres, reduce by */
/*  the desired border, and convert back into normalized subpage */
/*  coordinates */

    lb = 8.0 * plsc->chrht;
    rb = 5.0 * plsc->chrht;
    tb = 5.0 * plsc->chrht;
    bb = 5.0 * plsc->chrht;

    xmin = plP_dcscx(plP_mmdcx((PLFLT) (plP_dcmmx(plsc->spdxmi) + lb)));
    xmax = plP_dcscx(plP_mmdcx((PLFLT) (plP_dcmmx(plsc->spdxma) - rb)));
    ymin = plP_dcscy(plP_mmdcy((PLFLT) (plP_dcmmy(plsc->spdymi) + tb)));
    ymax = plP_dcscy(plP_mmdcy((PLFLT) (plP_dcmmy(plsc->spdyma) - bb)));

    plvpor(xmin, xmax, ymin, ymax);
}

Here is the call graph for this function: