ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/gen/genbox.c
Revision: 2.3
Committed: Fri Jun 4 14:29:58 1993 UTC (30 years, 10 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.2: +2 -3 lines
Log Message:
Removed unnecessary declaration of atof()

File Contents

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