Undo revision 23130 which was a merge with 2.5, a messy one because I did something...
[blender.git] / source / blender / makesdna / DNA_object_force.h
1 /**
2  *
3  * $Id$
4  *
5  * ***** BEGIN GPL LICENSE BLOCK *****
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software Foundation,
19  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20  *
21  * The Original Code is Copyright (C) 2004-2005 by Blender Foundation
22  * All rights reserved.
23  *
24  * The Original Code is: all of this file.
25  *
26  * Contributor(s): none yet.
27  *
28  * ***** END GPL LICENSE BLOCK *****
29  */
30 #ifndef DNA_OBJECT_FORCE_H
31 #define DNA_OBJECT_FORCE_H
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37 #include "DNA_listBase.h"
38         
39 typedef struct PartDeflect {
40         short deflect;          /* Deflection flag - does mesh deflect particles*/
41         short forcefield;       /* Force field type, do the vertices attract / repel particles ? */
42         short flag;                     /* general settings flag */
43         short falloff;          /* fall-off type*/
44         
45         float pdef_damp;        /* Damping factor for particle deflection       */
46         float pdef_rdamp;       /* Random element of damping for deflection     */
47         float pdef_perm;        /* Chance of particle passing through mesh      */
48         float pdef_frict;       /* Friction factor for particle deflection              */
49         float pdef_rfrict;      /* Random element of friction for deflection    */
50
51         float f_strength;       /* The strength of the force (+ or - )       */
52         float f_power;          /* The power law - real gravitation is 2 (square)  */
53         float f_dist;
54         float f_damp;           /* The dampening factor, currently only for harmonic force      */
55         float maxdist;          /* if indicated, use this maximum */
56         float mindist;          /* if indicated, use this minimum */
57         float maxrad;           /* radial versions of above */
58         float minrad;
59         float f_power_r;        /* radial fall-off power*/
60         
61         float pdef_sbdamp;      /* Damping factor for softbody deflection       */
62         float pdef_sbift;       /* inner face thickness for softbody deflection */
63         float pdef_sboft;       /* outer face thickness for softbody deflection */
64
65         /* variables for guide curve */
66         float clump_fac, clump_pow;
67         float kink_freq, kink_shape, kink_amp, free_end;
68
69         float tex_nabla;
70         short tex_mode, kink, kink_axis, rt2;
71         struct Tex *tex;        /* Texture of the texture effector */
72         struct RNG *rng; /* random noise generator for e.g. wind */
73         float f_noise; /* noise of force (currently used for wind) */
74         int seed; /* wind noise random seed */
75 } PartDeflect;
76
77 /* Point cache file data types:
78  * - used as (1<<flag) so poke jahka if you reach the limit of 15
79  * - to add new data types update:
80  *              * BKE_ptcache_data_size()
81  *              * ptcache_file_init_pointers()
82 */
83 #define BPHYS_DATA_INDEX                0
84 #define BPHYS_DATA_LOCATION             1
85 #define BPHYS_DATA_VELOCITY             2
86 #define BPHYS_DATA_ROTATION             3
87 #define BPHYS_DATA_AVELOCITY    4       /* used for particles */
88 #define BPHYS_DATA_XCONST               4       /* used for cloth */
89 #define BPHYS_DATA_SIZE                 5
90 #define BPHYS_DATA_TIMES                6
91 #define BPHYS_DATA_BOIDS                7
92
93 #define BPHYS_TOT_DATA                  8
94
95 typedef struct PTCacheMem {
96         struct PTCacheMem *next, *prev;
97         int frame, totpoint;
98         unsigned int data_types, rt;
99         int *index_array; /* quick access to stored points with index */
100
101         void *data[8]; /* BPHYS_TOT_DATA */
102         void *cur[8]; /* BPHYS_TOT_DATA */
103 } PTCacheMem;
104
105 typedef struct PointCache {
106         struct PointCache *next, *prev;
107         int flag;               /* generic flag */
108         int step;               /* frames between cached frames */
109         int simframe;   /* current frame of simulation (only if SIMULATION_VALID) */
110         int startframe; /* simulation start frame */
111         int endframe;   /* simulation end frame */
112         int editframe;  /* frame being edited (runtime only) */
113         int last_exact; /* last exact frame that's cached */
114
115         /* for external cache files */
116         int totpoint;   /* number of cached points */
117         int index, rt;  /* modifier stack index */
118         
119         char name[64];
120         char prev_name[64];
121         char info[64];
122         char path[240]; /* file path */
123         struct ListBase mem_cache;
124 } PointCache;
125
126 typedef struct SBVertex {
127         float vec[4];
128 } SBVertex;
129
130 typedef struct BulletSoftBody {
131         int flag;                               /* various boolean options */
132         float linStiff;                 /* linear stiffness 0..1 */
133         float   angStiff;               /* angular stiffness 0..1 */
134         float   volume;                 /* volume preservation 0..1 */
135
136         int     viterations;            /* Velocities solver iterations */
137         int     piterations;            /* Positions solver iterations */
138         int     diterations;            /* Drift solver iterations */
139         int     citerations;            /* Cluster solver iterations */
140
141         float   kSRHR_CL;               /* Soft vs rigid hardness [0,1] (cluster only) */
142         float   kSKHR_CL;               /* Soft vs kinetic hardness [0,1] (cluster only) */
143         float   kSSHR_CL;               /* Soft vs soft hardness [0,1] (cluster only) */
144         float   kSR_SPLT_CL;    /* Soft vs rigid impulse split [0,1] (cluster only) */
145
146         float   kSK_SPLT_CL;    /* Soft vs rigid impulse split [0,1] (cluster only) */
147         float   kSS_SPLT_CL;    /* Soft vs rigid impulse split [0,1] (cluster only) */
148         float   kVCF;                   /* Velocities correction factor (Baumgarte) */
149         float   kDP;                    /* Damping coefficient [0,1] */
150
151         float   kDG;                    /* Drag coefficient [0,+inf] */
152         float   kLF;                    /* Lift coefficient [0,+inf] */
153         float   kPR;                    /* Pressure coefficient [-inf,+inf] */
154         float   kVC;                    /* Volume conversation coefficient [0,+inf] */
155
156         float   kDF;                    /* Dynamic friction coefficient [0,1] */
157         float   kMT;                    /* Pose matching coefficient [0,1] */
158         float   kCHR;                   /* Rigid contacts hardness [0,1] */
159         float   kKHR;                   /* Kinetic contacts hardness [0,1] */
160
161         float   kSHR;                   /* Soft contacts hardness [0,1] */
162         float   kAHR;                   /* Anchors hardness [0,1] */
163         int             collisionflags; /* Vertex/Face or Signed Distance Field(SDF) or Clusters, Soft versus Soft or Rigid */
164         int             numclusteriterations;   /* number of iterations to refine collision clusters*/
165         float   welding;                /* welding limit to remove duplicate/nearby vertices, 0.0..0.01 */
166         float   margin;                 /* margin specific to softbody */
167 } BulletSoftBody;
168
169 /* BulletSoftBody.flag */
170 #define OB_BSB_SHAPE_MATCHING   2
171 #define OB_BSB_UNUSED 4
172 #define OB_BSB_BENDING_CONSTRAINTS 8
173 #define OB_BSB_AERO_VPOINT 16 /* aero model, Vertex normals are oriented toward velocity*/
174 #define OB_BSB_AERO_VTWOSIDE 32 /* aero model, Vertex normals are flipped to match velocity */
175
176 /* BulletSoftBody.collisionflags */
177 #define OB_BSB_COL_SDF_RS       2 /* SDF based rigid vs soft */
178 #define OB_BSB_COL_CL_RS        4 /* Cluster based rigid vs soft */
179 #define OB_BSB_COL_CL_SS        8 /* Cluster based soft vs soft */
180 #define OB_BSB_COL_VF_SS        16 /* Vertex/Face based soft vs soft */
181
182
183 typedef struct SoftBody {
184         struct ParticleSystem *particles;       /* particlesystem softbody */
185
186         /* dynamic data */
187         int totpoint, totspring;
188         struct BodyPoint *bpoint;               /* not saved in file */
189         struct BodySpring *bspring;             /* not saved in file */
190         char   pad;
191         char   msg_lock;
192         short  msg_value;
193         
194         /* part of UI: */
195         
196         /* general options */
197         float nodemass;         /* softbody mass of *vertex* */
198         char  namedVG_Mass[32]; /* along with it introduce mass painting
199                                                         starting to fix old bug .. nastyness that VG are indexes 
200                                                                 rather find them by name tag to find it -> jow20090613 */
201         float grav;                     /* softbody amount of gravitaion to apply */
202         float mediafrict;       /* friction to env */
203         float rklimit;          /* error limit for ODE solver */
204         float physics_speed;/* user control over simulation speed */
205         
206         /* goal */
207         float goalspring;       /* softbody goal springs */
208         float goalfrict;        /* softbody goal springs friction */
209         float mingoal;          /* quick limits for goal */
210         float maxgoal;
211         float defgoal;          /* default goal for vertices without vgroup */
212         short vertgroup;        /* index starting at 1 */
213         char  namedVG_Softgoal[32]; /* starting to fix old bug .. nastyness that VG are indexes 
214                                                                 rather find them by name tag to find it -> jow20090613 */
215   
216         short fuzzyness;      /* */
217         
218         /* springs */
219         float inspring;         /* softbody inner springs */
220         float infrict;          /* softbody inner springs friction */
221         char  namedVG_Spring_K[32]; /* along with it introduce Spring_K painting
222                                                         starting to fix old bug .. nastyness that VG are indexes 
223                                                                 rather find them by name tag to find it -> jow20090613 */
224         
225         /* baking */
226         int sfra, efra;
227         int interval;
228         short local, solverflags;               /* local==1: use local coords for baking */
229         
230         /* -- these must be kept for backwards compatibility -- */
231         SBVertex **keys;                        /* array of size totpointkey */
232         int totpointkey, totkey;        /* if totpointkey != totpoint or totkey!- (efra-sfra)/interval -> free keys */
233         /* ---------------------------------------------------- */
234         float secondspring;
235
236         /* self collision*/
237         float colball;          /* fixed collision ball size if > 0 */
238         float balldamp;         /* cooling down collision response  */
239         float ballstiff;        /* pressure the ball is loaded with  */
240         short sbc_mode;
241     short aeroedge,
242                 minloops,
243                 maxloops,
244                 choke,
245                 solver_ID,
246                 plastic,springpreload
247                 ;   
248
249         struct SBScratch *scratch;      /* scratch pad/cache on live time not saved in file */
250         float shearstiff;
251         float inpush;
252
253         struct PointCache *pointcache;
254         struct ListBase ptcaches;
255
256 } SoftBody;
257
258 /* pd->forcefield:  Effector Fields types */
259 #define PFIELD_FORCE    1
260 #define PFIELD_VORTEX   2
261 #define PFIELD_MAGNET   3
262 #define PFIELD_WIND             4
263 #define PFIELD_GUIDE    5
264 #define PFIELD_TEXTURE  6
265 #define PFIELD_HARMONIC 7
266 #define PFIELD_CHARGE   8
267 #define PFIELD_LENNARDJ 9
268 #define PFIELD_BOID             10
269
270
271 /* pd->flag: various settings */
272 #define PFIELD_USEMAX                   1
273 #define PDEFLE_DEFORM                   2
274 #define PFIELD_GUIDE_PATH_ADD   4
275 #define PFIELD_PLANAR                   8
276 #define PDEFLE_KILL_PART                16
277 #define PFIELD_POSZ                             32
278 #define PFIELD_TEX_OBJECT               64
279 #define PFIELD_TEX_2D                   128
280 #define PFIELD_USEMIN                   256
281 #define PFIELD_USEMAXR                  512
282 #define PFIELD_USEMINR                  1024
283 #define PFIELD_TEX_ROOTCO               2048
284 #define PFIELD_SURFACE                  4096
285
286 /* pd->falloff */
287 #define PFIELD_FALL_SPHERE              0
288 #define PFIELD_FALL_TUBE                1
289 #define PFIELD_FALL_CONE                2
290 //reserved for near future
291 //#define PFIELD_FALL_INSIDE            3
292
293 /* pd->tex_mode */
294 #define PFIELD_TEX_RGB  0
295 #define PFIELD_TEX_GRAD 1
296 #define PFIELD_TEX_CURL 2
297
298 /* pointcache->flag */
299 #define PTCACHE_BAKED                           1
300 #define PTCACHE_OUTDATED                        2
301 #define PTCACHE_SIMULATION_VALID        4
302 #define PTCACHE_BAKING                          8
303 #define PTCACHE_BAKE_EDIT                       16
304 #define PTCACHE_BAKE_EDIT_ACTIVE        32
305 #define PTCACHE_DISK_CACHE                      64
306 #define PTCACHE_QUICK_CACHE                     128
307 #define PTCACHE_FRAMES_SKIPPED          256
308 #define PTCACHE_EXTERNAL                        512
309 #define PTCACHE_READ_INFO                       1024
310
311 /* PTCACHE_OUTDATED + PTCACHE_FRAMES_SKIPPED */
312 #define PTCACHE_REDO_NEEDED                     258
313
314 /* ob->softflag */
315 #define OB_SB_ENABLE    1               /* deprecated, use modifier */
316 #define OB_SB_GOAL              2
317 #define OB_SB_EDGES             4
318 #define OB_SB_QUADS             8
319 #define OB_SB_POSTDEF   16
320 // #define OB_SB_REDO           32
321 // #define OB_SB_BAKESET        64
322 // #define OB_SB_BAKEDO 128
323 // #define OB_SB_RESET          256
324 #define OB_SB_SELF              512
325 #define OB_SB_FACECOLL  1024
326 #define OB_SB_EDGECOLL  2048
327 #define OB_SB_COLLFINAL 4096
328 #define OB_SB_BIG_UI    8192
329 #define OB_SB_AERO_ANGLE        16384
330
331 /* sb->solverflags */
332 #define SBSO_MONITOR    1 
333 #define SBSO_OLDERR     2 
334
335 /* sb->sbc_mode */
336 #define SBC_MODE_MANUAL         0
337 #define SBC_MODE_AVG            1
338 #define SBC_MODE_MIN            2
339 #define SBC_MODE_MAX            3
340 #define SBC_MODE_AVGMINMAX      4
341
342 #ifdef __cplusplus
343 }
344 #endif
345
346 #endif
347