1 |
< |
/* Copyright (c) 1986 Regents of the University of California */ |
1 |
> |
/* Copyright (c) 1992 Regents of the University of California */ |
2 |
|
|
3 |
|
#ifndef lint |
4 |
|
static char SCCSid[] = "$SunId$ LBL"; |
18 |
|
|
19 |
|
#include "otypes.h" |
20 |
|
|
21 |
< |
#define OMARGIN (10*FTINY) /* margin around global cube */ |
21 |
> |
#include "paths.h" |
22 |
|
|
23 |
< |
#define MAXOBJFIL 63 /* maximum number of scene files */ |
23 |
> |
#define OMARGIN (10*FTINY) /* margin around global cube */ |
24 |
|
|
25 |
+ |
#define MAXOBJFIL 63 /* maximum number of scene files */ |
26 |
+ |
|
27 |
|
char *progname; /* argv[0] */ |
28 |
|
|
29 |
|
char *libpath; /* library search path */ |
39 |
|
char *ofname[MAXOBJFIL+1]; /* object file names */ |
40 |
|
int nfiles = 0; /* number of object files */ |
41 |
|
|
42 |
< |
double mincusize; /* minimum cube size from resolu */ |
42 |
> |
double mincusize; /* minimum cube size from resolu */ |
43 |
|
|
44 |
|
int (*addobjnotify[])() = {NULL}; /* new object notifier functions */ |
45 |
|
|
48 |
|
int argc; |
49 |
|
char **argv; |
50 |
|
{ |
51 |
< |
char *getenv(); |
50 |
< |
double atof(); |
51 |
> |
extern char *getenv(); |
52 |
|
FVECT bbmin, bbmax; |
53 |
|
char *infile = NULL; |
54 |
|
int outflags = IO_ALL; |
55 |
< |
OBJECT startobj; |
55 |
> |
OBJECT startobj; |
56 |
|
int i; |
57 |
< |
|
57 |
> |
|
58 |
|
progname = argv[0]; |
59 |
|
|
60 |
< |
if ((libpath = getenv("RAYPATH")) == NULL) |
61 |
< |
libpath = ":/usr/local/lib/ray"; |
60 |
> |
if ((libpath = getenv(ULIBVAR)) == NULL) |
61 |
> |
libpath = DEFPATH; |
62 |
|
|
63 |
|
initotypes(); |
64 |
|
|
93 |
|
break; |
94 |
|
} |
95 |
|
breakopt: |
96 |
+ |
#ifdef MSDOS |
97 |
+ |
setmode(fileno(stdout), O_BINARY); |
98 |
+ |
#endif |
99 |
|
if (infile != NULL) { /* get old octree & objects */ |
100 |
|
if (thescene.cusize > FTINY) |
101 |
|
error(USER, "only one of '-b' or '-i'"); |
198 |
|
} |
199 |
|
|
200 |
|
|
201 |
< |
#define bitop(f,i,op) (f[((i)>>3)] op (1<<((i)&7))) |
202 |
< |
#define tstbit(f,i) bitop(f,i,&) |
203 |
< |
#define setbit(f,i) bitop(f,i,|=) |
204 |
< |
#define clrbit(f,i) bitop(f,i,&=~) |
205 |
< |
#define tglbit(f,i) bitop(f,i,^=) |
201 |
> |
#define bitop(f,i,op) (f[((i)>>3)] op (1<<((i)&7))) |
202 |
> |
#define tstbit(f,i) bitop(f,i,&) |
203 |
> |
#define setbit(f,i) bitop(f,i,|=) |
204 |
> |
#define clrbit(f,i) bitop(f,i,&=~) |
205 |
> |
#define tglbit(f,i) bitop(f,i,^=) |
206 |
|
|
207 |
|
|
208 |
|
addobject(cu, obj) /* add an object to a cube */ |
209 |
|
register CUBE *cu; |
210 |
< |
OBJECT obj; |
210 |
> |
OBJECT obj; |
211 |
|
{ |
212 |
|
CUBE cukid; |
213 |
< |
OCTREE ot; |
214 |
< |
OBJECT oset[MAXSET+1]; |
215 |
< |
unsigned char inflg[MAXSET/8], volflg[MAXSET/8]; |
213 |
> |
OCTREE ot; |
214 |
> |
OBJECT oset[MAXSET+1]; |
215 |
> |
unsigned char inflg[(MAXSET+7)/8], volflg[(MAXSET+7)/8]; |
216 |
|
int in; |
217 |
|
register int i, j; |
218 |
|
|
249 |
|
if (in==O_IN || oset[0] < objlim || cukid.cusize < mincusize) { |
250 |
|
/* add to set */ |
251 |
|
if (oset[0] >= MAXSET) { |
252 |
< |
sprintf(errmsg, |
249 |
< |
"set overflow in addobject (%s)", |
252 |
> |
sprintf(errmsg, "set overflow in addobject (%s)", |
253 |
|
objptr(obj)->oname); |
254 |
|
error(INTERNAL, errmsg); |
255 |
|
} |
268 |
|
if (isvolume(objptr(oset[j])->otype)) { |
269 |
|
setbit(volflg,j-1); |
270 |
|
if ((*ofun[objptr(oset[j])->otype].funp) |
271 |
< |
(objptr(oset[j]),cu) == O_IN) |
271 |
> |
(objptr(oset[j]), cu) == O_IN) |
272 |
|
setbit(inflg,j-1); |
273 |
|
} |
274 |
|
/* assign subcubes */ |
285 |
|
addobject(&cukid, oset[j]); |
286 |
|
/* then this object */ |
287 |
|
addobject(&cukid, obj); |
288 |
< |
/* partial volumes */ |
288 |
> |
/* then partial volumes */ |
289 |
|
for (j = 1; j <= oset[0]; j++) |
290 |
|
if (tstbit(volflg,j-1) && |
291 |
|
!tstbit(inflg,j-1)) |
292 |
|
addobject(&cukid, oset[j]); |
293 |
< |
/* full volumes */ |
293 |
> |
/* full volumes last */ |
294 |
|
for (j = 1; j <= oset[0]; j++) |
295 |
|
if (tstbit(inflg,j-1)) |
296 |
|
addobject(&cukid, oset[j]); |