--- ray/src/common/image.c 1999/02/26 12:24:07 2.15 +++ ray/src/common/image.c 2004/01/01 19:47:05 2.25 @@ -1,21 +1,18 @@ -/* Copyright (c) 1996 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: image.c,v 2.25 2004/01/01 19:47:05 greg Exp $"; #endif - /* * image.c - routines for image generation. + * + * External symbols declared in view.h */ -#include "standard.h" +#include "copyright.h" +#include "rtio.h" #include "view.h" -#include "resolu.h" -#include "paths.h" - #define FEQ(x,y) (fabs((x)-(y)) <= FTINY) #define VEQ(v,w) (FEQ((v)[0],(w)[0]) && FEQ((v)[1],(w)[1]) \ && FEQ((v)[2],(w)[2])) @@ -108,6 +105,7 @@ register VIEW *v; } +void normaspect(va, ap, xp, yp) /* fix pixel aspect or resolution */ double va; /* view aspect ratio */ double *ap; /* pixel aspect in (or out if 0) */ @@ -199,6 +197,7 @@ double x, y; } +void viewloc(ip, v, p) /* find image location for point */ FVECT ip; register VIEW *v; @@ -268,29 +267,31 @@ FVECT p; } +void pix2loc(loc, rp, px, py) /* compute image location from pixel pos. */ -FLOAT loc[2]; +RREAL loc[2]; register RESOLU *rp; int px, py; { register int x, y; - if (rp->or & YMAJOR) { + if (rp->rt & YMAJOR) { x = px; y = py; } else { x = py; y = px; } - if (rp->or & XDECR) + if (rp->rt & XDECR) x = rp->xr-1 - x; - if (rp->or & YDECR) + if (rp->rt & YDECR) y = rp->yr-1 - y; loc[0] = (x+.5)/rp->xr; loc[1] = (y+.5)/rp->yr; } +void loc2pix(pp, rp, lx, ly) /* compute pixel pos. from image location */ int pp[2]; register RESOLU *rp; @@ -300,11 +301,11 @@ double lx, ly; x = lx * rp->xr; y = ly * rp->yr; - if (rp->or & XDECR) + if (rp->rt & XDECR) x = rp->xr-1 - x; - if (rp->or & YDECR) + if (rp->rt & YDECR) y = rp->yr-1 - y; - if (rp->or & YMAJOR) { + if (rp->rt & YMAJOR) { pp[0] = x; pp[1] = y; } else { @@ -391,12 +392,15 @@ register char *s; int na; int nvopts = 0; + while (*s == ' ') + s++; if (*s != '-') s = sskip2(s,1); while (*s) { ac = 0; do { - av[ac++] = s; + if (ac || *s == '-') + av[ac++] = s; while (*s && *s != ' ') s++; while (*s == ' ') @@ -413,6 +417,7 @@ register char *s; } +void fprintview(vp, fp) /* write out view parameters */ register VIEW *vp; FILE *fp; @@ -485,7 +490,7 @@ int isview(s) /* is this a view string? */ char *s; { - static char *altname[]={NULL,VIEWSTR,"rpict","rview","pinterp",NULL}; + static char *altname[]={NULL,VIEWSTR,"rpict","rview","rvu","rpiece","pinterp",NULL}; extern char *progname; register char *cp; register char **an; @@ -536,13 +541,15 @@ RESOLU *rp; struct myview mvs; FILE *fp; - if ((fp = fopen(fname, "r")) == NULL) + if (fname == NULL || !strcmp(fname, "-")) + fp = stdin; + else if ((fp = fopen(fname, "r")) == NULL) return(-1); mvs.hv = vp; mvs.ok = 0; - getheader(fp, gethview, &mvs); + getheader(fp, (int (*)(char *, char *))&gethview, (char *)&mvs); if (rp != NULL && !fgetsresolu(rp, fp)) mvs.ok = 0;