diff --git a/Plugin/o_internals.h b/Plugin/o_internals.h new file mode 100644 index 0000000000000000000000000000000000000000..35dc338d242f053d45c3bd61c6465ae5d15e75fc --- /dev/null +++ b/Plugin/o_internals.h @@ -0,0 +1,87 @@ +#ifndef OCTCLASSIFY +#define OCTCLASSIFY +#include <list> + + /* file of function prototypes and macro constants */ + + typedef void (*BBFunction)(void *, double*, double*); + typedef int (*InEleFunction)(void *, double *); + typedef void (*CentroidFunction)(void *, double *); + + /* structure for list of elements in an octant */ + typedef struct elem { + void * region; /* the pointer to a mesh Db region */ + double centroid[3]; /* centroid of element bounding box inside of the octant */ + double minPt[3]; /* corner of element bounding box nearest the origin */ + double maxPt[3]; /* corner of elem bound box furthest from the origin */ + struct elem *next; /* link to next item in list, NULL if end */ + } Elem; + typedef Elem *ELink; + + /* stucture for octant buckets */ + struct bucket { + double minPt[3]; /* the point with the smallest coordinates */ + double maxPt[3]; /* the point with the biggest coordinates */ + int numElements; /* number of elements contained by bucket */ + int precision; /* the level of precision of the bucket */ + ELink lhead; /* list of elements in bucket, if NULL -> no elements */ + std::list<void *> listBB; /* list of elements in bucket by Bounding Box */ + struct bucket *next; /* link to ragged digit extensions to bucket array */ + struct bucket *parent; /* link to the parent bucket */ + }; + typedef struct bucket octantBucket; + + /* octantBucket *buckets=NULL; */ + + /* structure for global information and requirment */ + struct global { + int numBuckets; /* number of octant buckets in initial grid array */ + int maxElements; /* max. number of elements allowed in an octant */ + int maxPrecision; /* current maximum octant precision for model */ + double origin[3]; /* smallest x,y, z of model's bounding box */ + double size[3]; /* size in x, y, z of model bounding box */ + void * ptrToPrevElement; + std::list<void *> listAllElements; + }; + typedef struct global globalInfo; + + + typedef struct + { + globalInfo *info; + octantBucket *root; + BBFunction function_BB; + InEleFunction function_inElement; + CentroidFunction function_centroid; + }Octree; + + void refineOctants( octantBucket *buckets, + globalInfo *globalPara); + + int addElement2Bucket (octantBucket *bucket, void * element, + double *minBB, double *maxBB, + double *ele_centroid, globalInfo *globalPara); + int subdivideOctantBucket (octantBucket *bucket, globalInfo *globalPara); + int initializeOctantBuckets (double *orig, double *size, int maxElem, + octantBucket **buckets, globalInfo **globalPara); + int checkElementInBucket (octantBucket *bucket, void * element); + octantBucket* findElementBucket(octantBucket *buckets, double *pt); + void * searchElement(octantBucket *buckets, double *pt, + globalInfo *globalPara, BBFunction BBElement, + InEleFunction xyzInElement); + int xyzInElementBB(double *xyz, void *region, BBFunction BBElement); + void insertOneBB(void *, double *, double *, octantBucket *); + void * searchAllElements(octantBucket *_buckets_head, double *_pt, globalInfo *_globalPara, + BBFunction BBElement, InEleFunction xyzInElement, std::list<void *> *_elements); + +#endif + + + + + + + + + +