ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/gen/genbox.c
Revision: 2.7
Committed: Sun Nov 16 10:29:38 2003 UTC (20 years, 5 months ago) by schorsch
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R2, rad4R2P2, rad5R0, rad5R1, rad3R7P2, rad3R7P1, rad4R2, rad4R1, rad4R0, rad3R6, rad3R6P1, rad3R8, rad3R9, rad4R2P1
Changes since 2.6: +4 -1 lines
Log Message:
Continued ANSIfication and reduced other compile warnings.

File Contents

# User Rev Content
1 greg 1.1 #ifndef lint
2 schorsch 2.7 static const char RCSid[] = "$Id: genbox.c,v 2.6 2003/06/08 12:03:09 schorsch Exp $";
3 greg 1.1 #endif
4     /*
5     * genbox.c - generate a parallelepiped.
6     *
7     * 1/8/86
8     */
9    
10     #include <stdio.h>
11    
12 greg 2.5 #include <stdlib.h>
13    
14 greg 2.3 #include <math.h>
15    
16 greg 1.1
17     char let[]="0123456789._ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
18    
19     char *cmtype; /* ppd material type */
20    
21     char *cname; /* ppd name */
22    
23     double size[3]; /* ppd size */
24    
25     double bevel = 0.0; /* bevel amount */
26    
27 greg 2.5 int rounde = 0; /* boolean true for rounde edges */
28 greg 1.1
29     int reverse = 0; /* boolean true for reversed normals */
30    
31    
32 schorsch 2.6
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 schorsch 2.7 static void
103 schorsch 2.6 sphere(v0) /* generate a sphere */
104     int v0;
105     {
106     printf("\n%s sphere %s.%c\n", cmtype, cname, v0+'0');
107     printf("0\n0\n4\n");
108     vertex(v0);
109     printf("\t%18.12g\n", bevel);
110     }
111    
112    
113 schorsch 2.7 static void
114 schorsch 2.6 printhead(ac, av) /* print command header */
115     register int ac;
116     register char **av;
117     {
118     putchar('#');
119     while (ac--) {
120     putchar(' ');
121     fputs(*av++, stdout);
122     }
123     putchar('\n');
124     }
125    
126    
127 schorsch 2.7 int
128 greg 1.1 main(argc, argv)
129     int argc;
130     char **argv;
131     {
132     int i;
133    
134     if (argc < 6)
135     goto userr;
136    
137     cmtype = argv[1];
138     cname = argv[2];
139     size[0] = atof(argv[3]);
140     size[1] = atof(argv[4]);
141     size[2] = atof(argv[5]);
142    
143     for (i = 6; i < argc; i++) {
144     if (argv[i][0] != '-')
145     goto userr;
146     switch (argv[i][1]) {
147     case 'r':
148 greg 2.5 rounde = 1;
149 greg 1.1 /* fall through */
150     case 'b':
151     bevel = atof(argv[++i]);
152     break;
153     case 'i':
154     reverse = 1;
155     break;
156     default:
157     goto userr;
158     }
159     }
160    
161     printhead(argc, argv);
162    
163     if (bevel > 0.0) {
164     /* minor faces */
165     side(051, 055, 054, 050);
166     side(064, 066, 062, 060);
167     side(032, 033, 031, 030);
168     side(053, 052, 056, 057);
169     side(065, 061, 063, 067);
170     side(036, 034, 035, 037);
171     }
172 greg 2.5 if (bevel > 0.0 && !rounde) {
173 greg 1.1 /* bevel faces */
174     side(031, 051, 050, 030);
175     side(060, 062, 032, 030);
176     side(050, 054, 064, 060);
177     side(034, 036, 066, 064);
178     side(037, 057, 056, 036);
179     side(052, 062, 066, 056);
180     side(052, 053, 033, 032);
181     side(057, 067, 063, 053);
182     side(061, 031, 033, 063);
183     side(065, 067, 037, 035);
184     side(055, 051, 061, 065);
185     side(034, 054, 055, 035);
186     /* bevel corners */
187     corner(030, 050, 060);
188     corner(051, 031, 061);
189     corner(032, 062, 052);
190     corner(064, 054, 034);
191     corner(036, 056, 066);
192     corner(065, 035, 055);
193     corner(053, 063, 033);
194     corner(037, 067, 057);
195     }
196 greg 2.5 if (bevel > 0.0 && rounde) {
197     /* rounde edges */
198 greg 1.1 cylinder(070, 071);
199     cylinder(070, 074);
200     cylinder(070, 072);
201     cylinder(073, 071);
202     cylinder(073, 072);
203     cylinder(073, 077);
204     cylinder(075, 071);
205     cylinder(075, 074);
206     cylinder(075, 077);
207     cylinder(076, 072);
208     cylinder(076, 074);
209     cylinder(076, 077);
210 greg 2.5 /* rounde corners */
211 greg 1.1 sphere(070);
212     sphere(071);
213     sphere(072);
214     sphere(073);
215     sphere(074);
216     sphere(075);
217     sphere(076);
218     sphere(077);
219     }
220     if (bevel == 0.0 ) {
221     /* only need major faces */
222     side(1, 5, 4, 0);
223     side(4, 6, 2, 0);
224     side(2, 3, 1, 0);
225     side(3, 2, 6, 7);
226     side(5, 1, 3, 7);
227     side(6, 4, 5, 7);
228     }
229     exit(0);
230     userr:
231     fprintf(stderr, "Usage: %s ", argv[0]);
232     fprintf(stderr, "material name xsize ysize zsize ");
233 greg 2.5 fprintf(stderr, "[-i] [-b bevel | -r rounde]\n");
234 greg 1.1 exit(1);
235     }
236