Elbeem: fix memory leak and add guarded allocator directives
[blender.git] / intern / elbeem / intern / ntl_geometryclass.h
1 /** \file elbeem/intern/ntl_geometryclass.h
2  *  \ingroup elbeem
3  */
4 /******************************************************************************
5  *
6  * El'Beem - Free Surface Fluid Simulation with the Lattice Boltzmann Method
7  * Copyright 2003-2006 Nils Thuerey
8  *
9  * Base class for geometry shaders and objects
10  *
11  *****************************************************************************/
12
13
14 #ifndef NTL_GEOMETRYCLASS_H
15 #define NTL_GEOMETRYCLASS_H
16
17 #include "attributes.h"
18
19 #ifdef WITH_CXX_GUARDEDALLOC
20 #  include "MEM_guardedalloc.h"
21 #endif
22
23 //! geometry class type ids
24 #define GEOCLASSTID_OBJECT   1
25 #define GEOCLASSTID_SHADER   2
26 #define GEOCLASSTID_BOX      (GEOCLASSTID_OBJECT| 4)
27 #define GEOCLASSTID_OBJMODEL (GEOCLASSTID_OBJECT| 8)
28 #define GEOCLASSTID_SPHERE   (GEOCLASSTID_OBJECT| 16)
29
30 class ntlGeometryClass 
31 {
32
33         public:
34
35                 //! Default constructor
36                 inline ntlGeometryClass() :
37                         mVisible( 1 ), mName( "[ObjNameUndef]" ),
38                         mObjectId(-1), mpAttrs( NULL ), mGeoInitId(-1) 
39                 { 
40                                 mpAttrs = new AttributeList("objAttrs"); 
41                                 mpSwsAttrs = new AttributeList("swsAttrs"); 
42                 };
43
44                 //! Default destructor
45                 virtual ~ntlGeometryClass() {
46                         delete mpAttrs; 
47                         delete mpSwsAttrs;
48                 };
49
50                 //! Return type id
51                 virtual int getTypeId() = 0;
52
53                 /*! Set the object name */
54                 inline void setName(string set) { mName = set; }
55                 /*! Get the object name */
56                 inline string getName( void ) { return mName; }
57
58                 /*! Sets the visibility attribute 
59                  * visibility can be determined at shader _and_ object level , hiding a shader
60                  * means comepletely decativating it */
61                 inline void setVisible(int set) { mVisible=set; }
62                 /*! Returns the visibility attribute */
63                 inline int getVisible() const { return mVisible; }
64
65                 /*! Sets the attribute list pointer */
66                 inline void setAttributeList(AttributeList *set) { mpAttrs=set; }
67                 /*! Returns the attribute list pointer */
68                 inline AttributeList *getAttributeList() { return mpAttrs; }
69
70                 /*! Get/Sets the attribute list pointer */
71                 inline void setSwsAttributeList(AttributeList *set) { mpSwsAttrs=set; }
72                 inline AttributeList *getSwsAttributeList() { return mpSwsAttrs; }
73
74                 /*! for easy GUI detection get start of axis aligned bounding box, return NULL of no BB */
75                 virtual inline ntlVec3Gfx *getBBStart() { return NULL; }
76                 virtual inline ntlVec3Gfx *getBBEnd()   { return NULL; }
77
78                 /*! Set/get the object id*/
79                 inline void setObjectId(int set) { mObjectId=set; }
80                 inline int getObjectId() const { return mObjectId; }
81
82                 /*! GUI - this function is called for selected objects to display debugging information with OpenGL */
83                 virtual void drawDebugDisplay() { /* do nothing by default */ }
84                 /*! GUI - this function is called for selected objects to display interactive information with OpenGL */
85                 virtual void drawInteractiveDisplay() { /* do nothing by default */ }
86                 /*! GUI - handle mouse movement for selection */
87                 virtual void setMousePos(int ,int , ntlVec3Gfx , ntlVec3Gfx ) { /* do nothing by default */ }
88                 /*! GUI - notify object that mouse was clicked at last pos */
89                 virtual void setMouseClick() { /* do nothing by default */ }
90
91                 /*! Returns the geo init id */
92                 inline void setGeoInitId(int set) { mGeoInitId=set; }
93                 /*! Returns the geo init id */
94                 inline int getGeoInitId() const { return mGeoInitId; }
95
96         protected:
97
98                 /*! Object visible on/off */
99                 int mVisible;
100
101                 /*! Name of this object */
102                 string mName;
103
104                 /*! global scene object id */
105                 int mObjectId;
106
107                 /*! configuration attributes */
108                 AttributeList *mpAttrs;
109                 /*! sws configuration attributes */
110                 AttributeList *mpSwsAttrs;
111
112                 /* fluid init data */
113                 /*! id of fluid init (is used in solver initialization), additional data stored only for objects */
114                 int mGeoInitId;
115
116         private:
117
118 private:
119 #ifdef WITH_CXX_GUARDEDALLOC
120         MEM_CXX_CLASS_ALLOC_FUNCS("ELBEEM:ntlGeometryClass")
121 #endif
122 };
123
124
125
126 #endif
127