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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines