f911279489dc732afc3d272390ba302ad6dc5521
[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                 /*! do ani mesh CPS */
48                 void calculateCPS(string filename);
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                 /*! ani mesh cps params */
75                 ntlVec3Gfx mvCPSStart, mvCPSEnd;
76                 string mCPSFilename;
77                 gfxReal mCPSWidth, mCPSTimestep;
78
79
80         public:
81
82                 /* Access methods */
83                 /*! Access start vector */
84                 inline ntlVec3Gfx getStart( void ){ return mvStart; }
85                 inline void setStart( const ntlVec3Gfx &set ){ mvStart = set; }
86                 /*! Access end vector */
87                 inline ntlVec3Gfx getEnd( void ){ return mvEnd; }
88                 inline void setEnd( const ntlVec3Gfx &set ){ mvEnd = set; }
89
90                 /*! set data file name */
91                 inline void setFilename(string set) { mFilename = set; }
92 };
93
94 #endif
95