ftp.nice.ch/pub/next/unix/developer/plplot.3.0.s.tar.gz#/plplot/src/plgrid3.c

This is plgrid3.c in view mode; [Download] [Up]

/* Routine to draw a grid around the back side of the 3d plot */
/* wih hidden line removal */

#include "plplot.h"
#include <math.h>

void plgrid3a(tick)
double tick;
{
    double xmin, ymin, zmin, xmax, ymax, zmax, zscale;
    double cxx, cxy, cyx, cyy, cyz;
    int u[3], v[3];
    int nsub, mode, prec, scal;
    double tp, dummy;

    gw3wc(&cxx,&cxy,&cyx,&cyy,&cyz);
    gdom(&xmin,&xmax,&ymin,&ymax);
    grange(&zscale,&zmin,&zmax);

    nsub = 0;
    dummy = tick;   /* Code to get around AIX bug. */
    pldtik(zmin,zmax,&dummy,&nsub,&mode,&prec,&scal);
    tick = dummy;
    tp = tick * floor(zmin/tick) + tick;

    set3upd(0);

    if (cxx >= 0.0 && cxy <= 0.0)  {
        while ( tp <= zmax ) {
            u[0] = wcpcx(w3wcx(xmin,ymax,tp));
            v[0] = wcpcy(w3wcy(xmin,ymax,tp));
            u[1] = wcpcx(w3wcx(xmax,ymax,tp));
            v[1] = wcpcy(w3wcy(xmax,ymax,tp));
            u[2] = wcpcx(w3wcx(xmax,ymin,tp));
            v[2] = wcpcy(w3wcy(xmax,ymin,tp));
            plnxtv(u,v,3,0);

            tp += tick;
        }
        u[0] = wcpcx(w3wcx(xmax,ymax,zmin));
        v[0] = wcpcy(w3wcy(xmax,ymax,zmin));
        u[1] = wcpcx(w3wcx(xmax,ymax,zmax));
        v[1] = wcpcy(w3wcy(xmax,ymax,zmax));
        plnxtv(u,v,2,0);
    }
    else if(cxx <= 0.0  && cxy <= 0.0)  {
        while ( tp <= zmax ) {
            u[0] = wcpcx(w3wcx(xmax,ymax,tp));
            v[0] = wcpcy(w3wcy(xmax,ymax,tp));
            u[1] = wcpcx(w3wcx(xmax,ymin,tp));
            v[1] = wcpcy(w3wcy(xmax,ymin,tp));
            u[2] = wcpcx(w3wcx(xmin,ymin,tp));
            v[2] = wcpcy(w3wcy(xmin,ymin,tp));
            plnxtv(u,v,3,0);

            tp += tick;
        }
        u[0] = wcpcx(w3wcx(xmax,ymin,zmin));
        v[0] = wcpcy(w3wcy(xmax,ymin,zmin));
        u[1] = wcpcx(w3wcx(xmax,ymin,zmax));
        v[1] = wcpcy(w3wcy(xmax,ymin,zmax));
        plnxtv(u,v,2,0);
    }
    else if(cxx <= 0.0  && cxy >= 0.0)  {
        while ( tp <= zmax ) {
            u[0] = wcpcx(w3wcx(xmax,ymin,tp));
            v[0] = wcpcy(w3wcy(xmax,ymin,tp));
            u[1] = wcpcx(w3wcx(xmin,ymin,tp));
            v[1] = wcpcy(w3wcy(xmin,ymin,tp));
            u[2] = wcpcx(w3wcx(xmin,ymax,tp));
            v[2] = wcpcy(w3wcy(xmin,ymax,tp));
            plnxtv(u,v,3,0);

            tp += tick;
        }
        u[0] = wcpcx(w3wcx(xmin,ymin,zmin));
        v[0] = wcpcy(w3wcy(xmin,ymin,zmin));
        u[1] = wcpcx(w3wcx(xmin,ymin,zmax));
        v[1] = wcpcy(w3wcy(xmin,ymin,zmax));
        plnxtv(u,v,2,0);
    }
    else if(cxx >= 0.0  && cxy >= 0.0)  {
        while ( tp <= zmax ) {
            u[0] = wcpcx(w3wcx(xmin,ymin,tp));
            v[0] = wcpcy(w3wcy(xmin,ymin,tp));
            u[1] = wcpcx(w3wcx(xmin,ymax,tp));
            v[1] = wcpcy(w3wcy(xmin,ymax,tp));
            u[2] = wcpcx(w3wcx(xmax,ymax,tp));
            v[2] = wcpcy(w3wcy(xmax,ymax,tp));
            plnxtv(u,v,3,0);

            tp += tick;
        }
        u[0] = wcpcx(w3wcx(xmin,ymax,zmin));
        v[0] = wcpcy(w3wcy(xmin,ymax,zmin));
        u[1] = wcpcx(w3wcx(xmin,ymax,zmax));
        v[1] = wcpcy(w3wcy(xmin,ymax,zmax));
        plnxtv(u,v,2,0);
    }

    set3upd(1);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.