Merge with trunk r41342
[blender-staging.git] / source / blender / makesdna / DNA_object_fluidsim.h
1 /*
2  *
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19  *
20  * The Original Code is Copyright (C) 2004-2005 by Blender Foundation
21  * All rights reserved.
22  *
23  * The Original Code is: all of this file.
24  *
25  * Contributor(s): none yet.
26  *
27  * ***** END GPL LICENSE BLOCK *****
28  */
29 #ifndef DNA_OBJECT_FLUIDSIM_H
30 #define DNA_OBJECT_FLUIDSIM_H
31
32 /** \file DNA_object_fluidsim.h
33  *  \ingroup DNA
34  */
35
36 #include "DNA_ID.h"
37
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41         
42 struct Mesh;
43 struct Ipo;
44
45 typedef struct FluidVertexVelocity {
46         float vel[3];
47 } FluidVertexVelocity;
48         
49 typedef struct FluidsimSettings {
50         struct FluidsimModifierData *fmd; /* for fast RNA access */
51         /* domain,fluid or obstacle */
52         short type;
53         /* display advanced options in fluid sim tab (on=1,off=0)*/
54         short show_advancedoptions;
55
56         /* domain object settings */
57         /* resolutions */
58         short resolutionxyz;
59         short previewresxyz;
60         /* size of the domain in real units (meters along largest resolution x,y,z extent) */
61         float realsize;
62         /* show original meshes, preview or final sim */
63         short guiDisplayMode;
64         short renderDisplayMode;
65
66         /* fluid properties */
67         float viscosityValue;
68         short viscosityMode;
69         short viscosityExponent;
70         /* gravity strength */
71         float grav[3];
72         /* anim start end time (in seconds) */
73         float animStart, animEnd;
74         /* bake start end time (in blender frames) */
75         int bakeStart, bakeEnd;
76         /* g star param (LBM compressibility) */
77         float gstar;
78         /* activate refinement? */
79         int maxRefine;
80         
81         /* fluid object type settings */
82         /* gravity strength */
83         float iniVelx,iniVely,iniVelz;
84
85         /* store pointer to original mesh (for replacing the current one) */
86         struct Mesh *orgMesh;
87         /* a mesh to display the bounding box used for simulation */
88         struct Mesh *meshBB;
89
90         /* store output path, and file prefix for baked fluid surface */
91         /* strlens; 80= FILE_MAXFILE, 160= FILE_MAXDIR */
92         char surfdataPath[240];
93
94         /* store start coords of axis aligned bounding box together with size */
95         /* values are inited during derived mesh display */
96         float bbStart[3], bbSize[3];
97
98         /* animated params */
99         struct Ipo *ipo;
100
101         /* additional flags depending on the type, lower short contains flags
102          * to check validity, higher short additional flags */
103         short typeFlags;
104         /* switch off velocity genration, volume init type for fluid/obstacles (volume=1,shell=2,both=3) */
105         char  domainNovecgen,volumeInitType;
106
107         /* boundary "stickiness" for part slip values */
108         float partSlipValue;
109
110         /* number of tracers to generate */
111         int generateTracers;
112         /* particle generation - on if >0, then determines amount (experimental...) */
113         float generateParticles;
114         /* smooth fluid surface? */
115         float surfaceSmoothing;
116         /* number of surface subdivisions*/
117         int surfaceSubdivs;
118         int flag; /* GUI flags */
119
120         /* particle display - size scaling, and alpha influence */
121         float particleInfSize, particleInfAlpha;
122         /* testing vars */
123         float farFieldSize;
124
125         /* vertex velocities of simulated fluid mesh */
126         struct FluidVertexVelocity *meshVelocities;
127         /* number of vertices in simulated fluid mesh */
128         int totvert;
129         
130         /* Fluid control settings */
131         float cpsTimeStart;
132         float cpsTimeEnd;
133         float cpsQuality;
134         
135         float attractforceStrength;
136         float attractforceRadius;
137         float velocityforceStrength;
138         float velocityforceRadius;
139
140         int lastgoodframe;
141         
142         int pad;
143
144 } FluidsimSettings;
145
146 /* ob->fluidsimSettings defines */
147 #define OB_FLUIDSIM_ENABLE                      1
148 #define OB_FLUIDSIM_DOMAIN                      2
149 #define OB_FLUIDSIM_FLUID                       4
150 #define OB_FLUIDSIM_OBSTACLE            8
151 #define OB_FLUIDSIM_INFLOW                      16
152 #define OB_FLUIDSIM_OUTFLOW                     32
153 #define OB_FLUIDSIM_PARTICLE            64
154 #define OB_FLUIDSIM_CONTROL                     128
155
156 #define OB_TYPEFLAG_START       7
157 #define OB_FSGEO_THIN           (1<<(OB_TYPEFLAG_START+1))
158 #define OB_FSBND_NOSLIP         (1<<(OB_TYPEFLAG_START+2))
159 #define OB_FSBND_PARTSLIP       (1<<(OB_TYPEFLAG_START+3))
160 #define OB_FSBND_FREESLIP       (1<<(OB_TYPEFLAG_START+4))
161 #define OB_FSINFLOW_LOCALCOORD  (1<<(OB_TYPEFLAG_START+5))
162
163 /* surface generation flag (part of enabling chapter 6 of "Free Surface Flows with Moving and Deforming Objects for LBM") */
164 #define OB_FSSG_NOOBS                   (1<<(OB_TYPEFLAG_START+6))
165
166 // guiDisplayMode particle flags
167 #define OB_FSDOM_GEOM     1
168 #define OB_FSDOM_PREVIEW  2
169 #define OB_FSDOM_FINAL    3
170 #define OB_FSPART_BUBBLE  (1<<1)
171 #define OB_FSPART_DROP    (1<<2)
172 #define OB_FSPART_NEWPART (1<<3)
173 #define OB_FSPART_FLOAT   (1<<4)
174 #define OB_FSPART_TRACER  (1<<5)
175
176 // new fluid bit flags for fss->flags
177 #define OB_FLUIDSIM_REVERSE                     (1 << 0)
178 #define OB_FLUIDSIM_ACTIVE                      (1 << 1)
179 #define OB_FLUIDSIM_OVERRIDE_TIME       (1 << 2)
180
181 #ifdef __cplusplus
182 }
183 #endif
184
185 #endif
186
187