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