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