00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __RBD_ObjectTree_H__
00022 #define __RBD_ObjectTree_H__
00023
00024 #include "RBD_API.h"
00025
00026 #include <UT/UT_PtrArray.h>
00027 #include <UT/UT_IntArray.h>
00028 #include <GEO/GEO_PointTree.h>
00029
00030 class RBD_Object;
00031 class BV_OBBTree;
00032
00033
00034
00035
00036 class RBD_API RBD_ObjectTree
00037 {
00038 public:
00039 RBD_ObjectTree() {}
00040 virtual ~RBD_ObjectTree() {}
00041
00042 void appendObject(RBD_Object *obj, int idx);
00043 void findOverlapIdx(RBD_Object *obj, UT_IntArray &overlap);
00044 void setDirty();
00045
00046 protected:
00047 virtual void appendObjectSubclass(RBD_Object *obj, int idx) = 0;
00048 virtual void findOverlapIdxSubclass(RBD_Object *obj,
00049 UT_IntArray &overlap) = 0;
00050 virtual void setDirtySubclass() = 0;
00051 };
00052
00053
00054
00055
00056 class RBD_API RBD_ObjectTreeSphere : public RBD_ObjectTree
00057 {
00058 public:
00059 RBD_ObjectTreeSphere();
00060 virtual ~RBD_ObjectTreeSphere();
00061
00062 protected:
00063 virtual void appendObjectSubclass(RBD_Object *obj, int idx);
00064 virtual void findOverlapIdxSubclass(RBD_Object *obj,
00065 UT_IntArray &overlap);
00066 virtual void setDirtySubclass();
00067
00068 private:
00069 void rebuildTree();
00070
00071 UT_PtrArray<RBD_Object *> myObjList;
00072 UT_IntArray myInfiniteObjIdx;
00073 UT_IntArray myIndices;
00074 GEO_PointTree myPointTree;
00075 bool myDirty;
00076 };
00077
00078
00079
00080
00081 class RBD_API RBD_ObjectTreeOBB : public RBD_ObjectTree
00082 {
00083 public:
00084 RBD_ObjectTreeOBB();
00085 virtual ~RBD_ObjectTreeOBB();
00086
00087 protected:
00088 virtual void appendObjectSubclass(RBD_Object *obj, int idx);
00089 virtual void findOverlapIdxSubclass(RBD_Object *obj,
00090 UT_IntArray &overlap);
00091 virtual void setDirtySubclass();
00092
00093 private:
00094 void rebuildTree();
00095
00096 UT_PtrArray<RBD_Object *> myObjList;
00097 UT_IntArray myInfiniteObjIdx;
00098 UT_IntArray myIndices;
00099 bool myDirty;
00100 BV_OBBTree *myOBBTree;
00101 };
00102
00103
00104
00105
00106
00107 class RBD_ObjectTreeNone : public RBD_ObjectTree
00108 {
00109 public:
00110 RBD_ObjectTreeNone();
00111 virtual ~RBD_ObjectTreeNone();
00112
00113 protected:
00114 virtual void appendObjectSubclass(RBD_Object *obj, int idx);
00115 virtual void findOverlapIdxSubclass(RBD_Object *obj,
00116 UT_IntArray &overlap);
00117 virtual void setDirtySubclass();
00118
00119 private:
00120 UT_IntArray myIndices;
00121 };
00122
00123 #endif