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