ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/gen/genbox.c
(Generate patch)

Comparing ray/src/gen/genbox.c (file contents):
Revision 2.1 by greg, Tue Nov 12 17:04:38 1991 UTC vs.
Revision 2.8 by greg, Sat Jul 25 19:18:01 2020 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1986 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   *  genbox.c - generate a parallelepiped.
6   *
7   *     1/8/86
8   */
9  
10 < #include  <stdio.h>
10 > #include  "rtio.h"
11 > #include  <stdlib.h>
12 > #include  <math.h>
13  
14  
15   char  let[]="0123456789._ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
# Line 23 | Line 22 | double  size[3];       /* ppd size */
22  
23   double  bevel = 0.0;    /* bevel amount */
24  
25 < int  round = 0;         /* boolean true for round edges */
25 > int  rounde = 0;                /* boolean true for rounde edges */
26  
27   int  reverse = 0;       /* boolean true for reversed normals */
28  
29  
30 < main(argc, argv)
31 < int  argc;
32 < char  **argv;
30 >
31 > static void
32 > vertex(int v)
33   {
34 <        double  atof();
34 >        register int  i;
35 >
36 >        for (i = 0; i < 3; i++) {
37 >                if (v & 010)
38 >                        printf("\t%18.12g", v & 01 ? size[i]-bevel : bevel);
39 >                else
40 >                        printf("\t%18.12g", v & 01 ? size[i] : 0.0);
41 >                v >>= 1;
42 >        }
43 >        printf("\n");
44 > }
45 >
46 >
47 > static void
48 > side(int a, int b, int c, int d)                /* generate a rectangular face */
49 > {
50 >        printf("\n%s polygon %s.%c%c%c%c\n", cmtype, cname,
51 >                        let[a], let[b], let[c], let[d]);
52 >        printf("0\n0\n12\n");
53 >        if (reverse) {
54 >                vertex(d);
55 >                vertex(c);
56 >                vertex(b);
57 >                vertex(a);
58 >        } else {
59 >                vertex(a);
60 >                vertex(b);
61 >                vertex(c);
62 >                vertex(d);
63 >        }
64 > }
65 >
66 >
67 > static void
68 > corner(int a, int b, int c)                     /* generate a triangular face */
69 > {
70 >        printf("\n%s polygon %s.%c%c%c\n", cmtype, cname,
71 >                        let[a], let[b], let[c]);
72 >        printf("0\n0\n9\n");
73 >        if (reverse) {
74 >                vertex(c);
75 >                vertex(b);
76 >                vertex(a);
77 >        } else {
78 >                vertex(a);
79 >                vertex(b);
80 >                vertex(c);
81 >        }
82 > }
83 >
84 >
85 > static void
86 > cylinder(int v0, int v1)                /* generate a cylinder */
87 > {
88 >        printf("\n%s cylinder %s.%c%c\n", cmtype, cname, v0+'0', v1+'0');
89 >        printf("0\n0\n7\n");
90 >        vertex(v0);
91 >        vertex(v1);
92 >        printf("\t%18.12g\n", bevel);
93 > }
94 >
95 >
96 > static void
97 > sphere(int v0)                  /* generate a sphere */
98 > {
99 >        printf("\n%s sphere %s.%c\n", cmtype, cname, v0+'0');
100 >        printf("0\n0\n4\n");
101 >        vertex(v0);
102 >        printf("\t%18.12g\n", bevel);
103 > }
104 >
105 >
106 > int
107 > main(int argc, char **argv)
108 > {
109          int  i;
110          
111          if (argc < 6)
# Line 49 | Line 122 | char  **argv;
122                          goto userr;
123                  switch (argv[i][1]) {
124                  case 'r':
125 <                        round = 1;
125 >                        rounde = 1;
126                          /* fall through */
127                  case 'b':
128                          bevel = atof(argv[++i]);
# Line 62 | Line 135 | char  **argv;
135                  }
136          }
137  
138 <        printhead(argc, argv);
138 >        fputs("# ", stdout);
139 >        printargs(argc, argv, stdout);
140  
141          if (bevel > 0.0) {
142                                          /* minor faces */
# Line 73 | Line 147 | char  **argv;
147                  side(065, 061, 063, 067);
148                  side(036, 034, 035, 037);
149          }
150 <        if (bevel > 0.0 && !round) {
150 >        if (bevel > 0.0 && !rounde) {
151                                          /* bevel faces */
152                  side(031, 051, 050, 030);
153                  side(060, 062, 032, 030);
# Line 97 | Line 171 | char  **argv;
171                  corner(053, 063, 033);
172                  corner(037, 067, 057);
173          }
174 <        if (bevel > 0.0 && round) {
175 <                                        /* round edges */
174 >        if (bevel > 0.0 && rounde) {
175 >                                        /* rounde edges */
176                  cylinder(070, 071);
177                  cylinder(070, 074);
178                  cylinder(070, 072);
# Line 111 | Line 185 | char  **argv;
185                  cylinder(076, 072);
186                  cylinder(076, 074);
187                  cylinder(076, 077);
188 <                                        /* round corners */
188 >                                        /* rounde corners */
189                  sphere(070);
190                  sphere(071);
191                  sphere(072);
# Line 130 | Line 204 | char  **argv;
204                  side(5, 1, 3, 7);
205                  side(6, 4, 5, 7);
206          }
207 <        exit(0);
207 >        return(0);
208   userr:
209          fprintf(stderr, "Usage: %s ", argv[0]);
210          fprintf(stderr, "material name xsize ysize zsize ");
211 <        fprintf(stderr, "[-i] [-b bevel | -r round]\n");
212 <        exit(1);
211 >        fprintf(stderr, "[-i] [-b bevel | -r rounde]\n");
212 >        return(1);
213   }
214  
141
142 side(a, b, c, d)                /* generate a rectangular face */
143 int  a, b, c, d;
144 {
145        printf("\n%s polygon %s.%c%c%c%c\n", cmtype, cname,
146                        let[a], let[b], let[c], let[d]);
147        printf("0\n0\n12\n");
148        if (reverse) {
149                vertex(d);
150                vertex(c);
151                vertex(b);
152                vertex(a);
153        } else {
154                vertex(a);
155                vertex(b);
156                vertex(c);
157                vertex(d);
158        }
159 }
160
161
162 corner(a, b, c)                 /* generate a triangular face */
163 int  a, b, c;
164 {
165        printf("\n%s polygon %s.%c%c%c\n", cmtype, cname,
166                        let[a], let[b], let[c]);
167        printf("0\n0\n9\n");
168        if (reverse) {
169                vertex(c);
170                vertex(b);
171                vertex(a);
172        } else {
173                vertex(a);
174                vertex(b);
175                vertex(c);
176        }
177 }
178
179
180 cylinder(v0, v1)                /* generate a cylinder */
181 int  v0, v1;
182 {
183        printf("\n%s cylinder %s.%c%c\n", cmtype, cname, v0+'0', v1+'0');
184        printf("0\n0\n7\n");
185        vertex(v0);
186        vertex(v1);
187        printf("\t%18.12g\n", bevel);
188 }
189
190
191 sphere(v0)                      /* generate a sphere */
192 int  v0;
193 {
194        printf("\n%s sphere %s.%c\n", cmtype, cname, v0+'0');
195        printf("0\n0\n4\n");
196        vertex(v0);
197        printf("\t%18.12g\n", bevel);
198 }
199
200
201 vertex(v)
202 register int  v;
203 {
204        register int  i;
205
206        for (i = 0; i < 3; i++) {
207                if (v & 010)
208                        printf("\t%18.12g", v & 01 ? size[i]-bevel : bevel);
209                else
210                        printf("\t%18.12g", v & 01 ? size[i] : 0.0);
211                v >>= 1;
212        }
213        printf("\n");
214 }
215
216
217 printhead(ac, av)               /* print command header */
218 register int  ac;
219 register char  **av;
220 {
221        putchar('#');
222        while (ac--) {
223                putchar(' ');
224                fputs(*av++, stdout);
225        }
226        putchar('\n');
227 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines