9282371d1836707b759a62ca38493aacc63fc7c0
[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                 };
41
42                 //! Return type id
43                 virtual int getTypeId() = 0;
44
45                 /*! Set the object name */
46                 inline void setName(string set) { mName = set; }
47                 /*! Get the object name */
48                 inline string getName( void ) { return mName; }
49
50                 /*! Sets the visibility attribute 
51                  * visibility can be determined at shader _and_ object level , hiding a shader
52                  * means comepletely decativating it */
53                 inline void setVisible(int set) { mVisible=set; }
54                 /*! Returns the visibility attribute */
55                 inline int getVisible() const { return mVisible; }
56
57                 /*! Sets the attribute list pointer */
58                 inline void setAttributeList(AttributeList *set) { mpAttrs=set; }
59                 /*! Returns the attribute list pointer */
60                 inline AttributeList *getAttributeList() { return mpAttrs; }
61
62                 /*! Get/Sets the attribute list pointer */
63                 inline void setSwsAttributeList(AttributeList *set) { mpSwsAttrs=set; }
64                 inline AttributeList *getSwsAttributeList() { return mpSwsAttrs; }
65
66                 /*! for easy GUI detection get start of axis aligned bounding box, return NULL of no BB */
67                 virtual inline ntlVec3Gfx *getBBStart() { return NULL; }
68                 virtual inline ntlVec3Gfx *getBBEnd()   { return NULL; }
69
70                 /*! Set/get the object id*/
71                 inline void setObjectId(int set) { mObjectId=set; }
72                 inline int getObjectId() const { return mObjectId; }
73
74                 /*! GUI - this function is called for selected objects to display debugging information with OpenGL */
75                 virtual void drawDebugDisplay() { /* do nothing by default */ }
76                 /*! GUI - this function is called for selected objects to display interactive information with OpenGL */
77                 virtual void drawInteractiveDisplay() { /* do nothing by default */ }
78                 /*! GUI - handle mouse movement for selection */
79                 virtual void setMousePos(int ,int , ntlVec3Gfx , ntlVec3Gfx ) { /* do nothing by default */ }
80                 /*! GUI - notify object that mouse was clicked at last pos */
81                 virtual void setMouseClick() { /* do nothing by default */ }
82
83                 /*! Returns the geo init id */
84                 inline void setGeoInitId(int set) { mGeoInitId=set; }
85                 /*! Returns the geo init id */
86                 inline int getGeoInitId() const { return mGeoInitId; }
87
88         protected:
89
90                 /*! Object visible on/off */
91                 int mVisible;
92
93                 /*! Name of this object */
94                 string mName;
95
96                 /*! global scene object id */
97                 int mObjectId;
98
99                 /*! configuration attributes */
100                 AttributeList *mpAttrs;
101                 /*! sws configuration attributes */
102                 AttributeList *mpSwsAttrs;
103
104                 /* fluid init data */
105                 /*! id of fluid init (is used in solver initialization), additional data stored only for objects */
106                 int mGeoInitId;
107
108         private:
109
110 };
111
112
113
114 #endif
115