--- ray/src/gen/genbox.c 1991/11/12 17:04:38 2.1 +++ ray/src/gen/genbox.c 2020/07/25 19:18:01 2.8 @@ -1,16 +1,15 @@ -/* Copyright (c) 1986 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: genbox.c,v 2.8 2020/07/25 19:18:01 greg Exp $"; #endif - /* * genbox.c - generate a parallelepiped. * * 1/8/86 */ -#include +#include "rtio.h" +#include +#include char let[]="0123456789._ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; @@ -23,16 +22,90 @@ double size[3]; /* ppd size */ double bevel = 0.0; /* bevel amount */ -int round = 0; /* boolean true for round edges */ +int rounde = 0; /* boolean true for rounde edges */ int reverse = 0; /* boolean true for reversed normals */ -main(argc, argv) -int argc; -char **argv; + +static void +vertex(int v) { - double atof(); + register int i; + + for (i = 0; i < 3; i++) { + if (v & 010) + printf("\t%18.12g", v & 01 ? size[i]-bevel : bevel); + else + printf("\t%18.12g", v & 01 ? size[i] : 0.0); + v >>= 1; + } + printf("\n"); +} + + +static void +side(int a, int b, int c, int d) /* generate a rectangular face */ +{ + printf("\n%s polygon %s.%c%c%c%c\n", cmtype, cname, + let[a], let[b], let[c], let[d]); + printf("0\n0\n12\n"); + if (reverse) { + vertex(d); + vertex(c); + vertex(b); + vertex(a); + } else { + vertex(a); + vertex(b); + vertex(c); + vertex(d); + } +} + + +static void +corner(int a, int b, int c) /* generate a triangular face */ +{ + printf("\n%s polygon %s.%c%c%c\n", cmtype, cname, + let[a], let[b], let[c]); + printf("0\n0\n9\n"); + if (reverse) { + vertex(c); + vertex(b); + vertex(a); + } else { + vertex(a); + vertex(b); + vertex(c); + } +} + + +static void +cylinder(int v0, int v1) /* generate a cylinder */ +{ + printf("\n%s cylinder %s.%c%c\n", cmtype, cname, v0+'0', v1+'0'); + printf("0\n0\n7\n"); + vertex(v0); + vertex(v1); + printf("\t%18.12g\n", bevel); +} + + +static void +sphere(int v0) /* generate a sphere */ +{ + printf("\n%s sphere %s.%c\n", cmtype, cname, v0+'0'); + printf("0\n0\n4\n"); + vertex(v0); + printf("\t%18.12g\n", bevel); +} + + +int +main(int argc, char **argv) +{ int i; if (argc < 6) @@ -49,7 +122,7 @@ char **argv; goto userr; switch (argv[i][1]) { case 'r': - round = 1; + rounde = 1; /* fall through */ case 'b': bevel = atof(argv[++i]); @@ -62,7 +135,8 @@ char **argv; } } - printhead(argc, argv); + fputs("# ", stdout); + printargs(argc, argv, stdout); if (bevel > 0.0) { /* minor faces */ @@ -73,7 +147,7 @@ char **argv; side(065, 061, 063, 067); side(036, 034, 035, 037); } - if (bevel > 0.0 && !round) { + if (bevel > 0.0 && !rounde) { /* bevel faces */ side(031, 051, 050, 030); side(060, 062, 032, 030); @@ -97,8 +171,8 @@ char **argv; corner(053, 063, 033); corner(037, 067, 057); } - if (bevel > 0.0 && round) { - /* round edges */ + if (bevel > 0.0 && rounde) { + /* rounde edges */ cylinder(070, 071); cylinder(070, 074); cylinder(070, 072); @@ -111,7 +185,7 @@ char **argv; cylinder(076, 072); cylinder(076, 074); cylinder(076, 077); - /* round corners */ + /* rounde corners */ sphere(070); sphere(071); sphere(072); @@ -130,98 +204,11 @@ char **argv; side(5, 1, 3, 7); side(6, 4, 5, 7); } - exit(0); + return(0); userr: fprintf(stderr, "Usage: %s ", argv[0]); fprintf(stderr, "material name xsize ysize zsize "); - fprintf(stderr, "[-i] [-b bevel | -r round]\n"); - exit(1); + fprintf(stderr, "[-i] [-b bevel | -r rounde]\n"); + return(1); } - -side(a, b, c, d) /* generate a rectangular face */ -int a, b, c, d; -{ - printf("\n%s polygon %s.%c%c%c%c\n", cmtype, cname, - let[a], let[b], let[c], let[d]); - printf("0\n0\n12\n"); - if (reverse) { - vertex(d); - vertex(c); - vertex(b); - vertex(a); - } else { - vertex(a); - vertex(b); - vertex(c); - vertex(d); - } -} - - -corner(a, b, c) /* generate a triangular face */ -int a, b, c; -{ - printf("\n%s polygon %s.%c%c%c\n", cmtype, cname, - let[a], let[b], let[c]); - printf("0\n0\n9\n"); - if (reverse) { - vertex(c); - vertex(b); - vertex(a); - } else { - vertex(a); - vertex(b); - vertex(c); - } -} - - -cylinder(v0, v1) /* generate a cylinder */ -int v0, v1; -{ - printf("\n%s cylinder %s.%c%c\n", cmtype, cname, v0+'0', v1+'0'); - printf("0\n0\n7\n"); - vertex(v0); - vertex(v1); - printf("\t%18.12g\n", bevel); -} - - -sphere(v0) /* generate a sphere */ -int v0; -{ - printf("\n%s sphere %s.%c\n", cmtype, cname, v0+'0'); - printf("0\n0\n4\n"); - vertex(v0); - printf("\t%18.12g\n", bevel); -} - - -vertex(v) -register int v; -{ - register int i; - - for (i = 0; i < 3; i++) { - if (v & 010) - printf("\t%18.12g", v & 01 ? size[i]-bevel : bevel); - else - printf("\t%18.12g", v & 01 ? size[i] : 0.0); - v >>= 1; - } - printf("\n"); -} - - -printhead(ac, av) /* print command header */ -register int ac; -register char **av; -{ - putchar('#'); - while (ac--) { - putchar(' '); - fputs(*av++, stdout); - } - putchar('\n'); -}