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