--- ray/src/common/octree.h 1991/11/12 16:55:30 2.1 +++ ray/src/common/octree.h 2003/03/14 21:27:46 2.7 @@ -1,13 +1,10 @@ -/* Copyright (c) 1986 Regents of the University of California */ - -/* SCCSid "$SunId$ LBL" */ - +/* RCSid $Id: octree.h,v 2.7 2003/03/14 21:27:46 greg Exp $ */ /* * octree.h - header file for routines using octrees. - * - * 7/28/85 */ +#include "copyright.h" + /* * An octree is expressed as an integer which is either * an index to eight other nodes, the empty tree, or an index @@ -31,12 +28,13 @@ #define istree(ot) ((ot) > EMPTY) #define oseti(ot) (-(ot)-2) /* object set index */ -#define octbi(ot) ((ot)>>8) /* octree block index */ -#define octti(ot) (((ot)&0377)<<3)/* octree index in block */ +#define OCTBLKSIZ 04000 /* octree block size */ +#define octbi(ot) ((ot)>>11) /* octree block index */ +#define octti(ot) (((ot)&03777)<<3)/* octree index in block */ #ifndef MAXOBLK #ifdef BIGMEM -#define MAXOBLK 8191 /* maximum octree block */ +#define MAXOBLK 32767 /* maximum octree block */ #else #define MAXOBLK 4095 /* maximum octree block */ #endif @@ -46,8 +44,6 @@ extern OCTREE *octblock[MAXOBLK]; /* octree blocks */ #define octkid(ot,br) (octblock[octbi(ot)][octti(ot)+br]) -extern OCTREE octalloc(), combine(), fullnode(); - /* * The cube structure is used to hold an octree and its cubic * boundaries. @@ -82,3 +78,33 @@ extern CUBE thescene; /* the main scene */ #define O_MISS 0 /* no intersection */ #define O_HIT 1 /* intersection */ #define O_IN 2 /* cube contained entirely */ + +#ifdef NOPROTO + +extern OCTREE octalloc(); +extern void octfree(); +extern void octdone(); +extern OCTREE combine(); +extern void culocate(); +extern void cucopy(); +extern int incube(); +extern int readoct(); +extern void readscene(); +extern void writescene(); + +#else + +extern OCTREE octalloc(void); +extern void octfree(OCTREE ot); +extern void octdone(void); +extern OCTREE combine(OCTREE ot); +extern void culocate(CUBE *cu, FVECT pt); +extern void cucopy(CUBE *cu1, CUBE *cu2); +extern int incube(CUBE *cu, FVECT pt); + +extern int readoct(char *fname, int load, CUBE *scene, char *ofn[]); + +extern void readscene(FILE *fp, int objsiz); +extern void writescene(int firstobj, int nobjs, FILE *fp); + +#endif