Elbeem: fix memory leak and add guarded allocator directives
[blender.git] / intern / elbeem / intern / ntl_geometrymodel.h
1 /** \file elbeem/intern/ntl_geometrymodel.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  * A model laoded from Wavefront .obj file
10  *
11  *****************************************************************************/
12 #ifndef NTL_GEOMODEL_H
13 #define NTL_GEOMODEL_H
14
15 #include "ntl_geometryobject.h"
16
17 #ifdef WITH_CXX_GUARDEDALLOC
18 #  include "MEM_guardedalloc.h"
19 #endif
20
21 /*! A simple box object generatedd by 12 triangles */
22 class ntlGeometryObjModel : public ntlGeometryObject
23 {
24         public:
25                 /* Init constructor */
26                 ntlGeometryObjModel( void );
27                 /* Init constructor */
28                 //ntlGeometryObjModel( ntlVec3Gfx start, ntlVec3Gfx end );
29                 /* Destructor */
30                 virtual ~ntlGeometryObjModel( void );
31
32                 //! Return type id
33                 virtual int getTypeId() { return GEOCLASSTID_OBJMODEL; }
34
35                 /*! Filename setting etc. */
36                 virtual void initialize(ntlRenderGlobals *glob);
37
38                 /*! is the mesh animated? */
39                 virtual bool getMeshAnimated();
40
41                 /* create triangles from obj */
42                 virtual void getTriangles(double t,  vector<ntlTriangle> *triangles, 
43                                 vector<ntlVec3Gfx> *vertices, 
44                                 vector<ntlVec3Gfx> *normals, int objectId );
45
46                 /*! load model from .bobj file, returns !=0 upon error */
47                 int loadBobjModel(string filename);
48                 /*! init model from given vertex and triangle arrays */
49                 int initModel(int numVertices, float *vertices, int numTriangles, int *triangles,
50                                 int channelSize, float *channelVertices);
51                 /*! init triangle divisions */
52                 virtual void calcTriangleDivs(vector<ntlVec3Gfx> &verts, vector<ntlTriangle> &tris, gfxReal fsTri);
53
54                 /*! calculate max extends of (ani) mesh */
55                 void getExtends(ntlVec3Gfx &start, ntlVec3Gfx &end);
56
57         private:
58
59                 /*! Start and end points of box */
60                 ntlVec3Gfx mvStart, mvEnd;
61
62                 /*! was the model loaded? */
63                 bool mLoaded;
64
65                 /*! filename of the obj file */
66                 string mFilename;
67
68                 /*! for bobj models */
69                 vector<int> mTriangles;
70                 vector<ntlVec3Gfx> mVertices;
71                 vector<ntlVec3Gfx> mNormals;
72
73                 /*! animated channels for vertices, if given will override getris by default */
74                 AnimChannel<ntlSetVec3f> mcAniVerts;
75                 AnimChannel<ntlSetVec3f> mcAniNorms;
76                 /*! map entrie of anim mesh to sim times */
77                 AnimChannel<double> mcAniTimes;
78                 /*! timing mapping & offset for config files */
79                 double mAniTimeScale, mAniTimeOffset;
80
81         public:
82
83                 /* Access methods */
84                 /*! Access start vector */
85                 inline ntlVec3Gfx getStart( void ){ return mvStart; }
86                 inline void setStart( const ntlVec3Gfx &set ){ mvStart = set; }
87                 /*! Access end vector */
88                 inline ntlVec3Gfx getEnd( void ){ return mvEnd; }
89                 inline void setEnd( const ntlVec3Gfx &set ){ mvEnd = set; }
90
91                 inline bool getLoaded( void ){ return mLoaded; }
92                 inline void setLoaded( bool set ){ mLoaded = set; }
93
94                 /*! set data file name */
95                 inline void setFilename(string set) { mFilename = set; }
96
97 private:
98 #ifdef WITH_CXX_GUARDEDALLOC
99         MEM_CXX_CLASS_ALLOC_FUNCS("ELBEEM:ntlGeometryObjModel")
100 #endif
101 };
102
103 #endif
104