Feature: Sofbody bake "Local"
[blender.git] / source / blender / makesdna / DNA_object_force.h
1 /**
2  *
3  * $Id$
4  *
5  * ***** BEGIN GPL/BL DUAL 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. The Blender
11  * Foundation also sells licenses for use in proprietary software under
12  * the Blender License.  See http://www.blender.org/BL/ for information
13  * about this.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software Foundation,
22  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
23  *
24  * The Original Code is Copyright (C) 2004-2005 by Blender Foundation
25  * All rights reserved.
26  *
27  * The Original Code is: all of this file.
28  *
29  * Contributor(s): none yet.
30  *
31  * ***** END GPL/BL DUAL LICENSE BLOCK *****
32  */
33 #ifndef DNA_OBJECT_FORCE_H
34 #define DNA_OBJECT_FORCE_H
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39         
40 typedef struct PartDeflect {
41         short deflect;          /* Deflection flag - does mesh deflect particles*/
42         short forcefield;       /* Force field type, do the vertices attract / repel particles ? */
43         short flag;                     /* general settings flag */
44         short pad;
45         
46         float pdef_damp;        /* Damping factor for particle deflection       */
47         float pdef_rdamp;       /* Random element of damping for deflection     */
48         float pdef_perm;        /* Chance of particle passing through mesh      */
49
50         float f_strength;       /* The strength of the force (+ or - )       */
51         float f_power;          /* The power law - real gravitation is 2 (square)  */
52         float maxdist;          /* if indicated, use this maximum */
53         
54         float pdef_sbdamp;      /* Damping factor for softbody deflection       */
55         float pdef_sbift;       /* inner face thickness for softbody deflection */
56         float pdef_sboft;       /* outer face thickness for softbody deflection */
57 } PartDeflect;
58
59
60 typedef struct SBVertex {
61         float vec[4];
62 } SBVertex;
63
64 typedef struct SoftBody {
65         /* dynamic data */
66         int totpoint, totspring;
67         struct BodyPoint *bpoint;               /* not saved in file */
68         struct BodySpring *bspring;             /* not saved in file */
69         float ctime;                                    /* last time calculated */
70         
71         /* part of UI: */
72         
73         /* general options */
74         float nodemass;         /* softbody mass of *vertex* */
75         float grav;                     /* softbody amount of gravitaion to apply */
76         float mediafrict;       /* friction to env */
77         float rklimit;          /* error limit for ODE solver */
78         float physics_speed;/* user control over simulation speed */
79         
80         /* goal */
81         float goalspring;       /* softbody goal springs */
82         float goalfrict;        /* softbody goal springs friction */
83         float mingoal;          /* quick limits for goal */
84         float maxgoal;
85         float defgoal;          /* default goal for vertices without vgroup */
86         short vertgroup;        /* index starting at 1 */
87         short pad1;
88         
89         /* springs */
90         float inspring;         /* softbody inner springs */
91         float infrict;          /* softbody inner springs friction */
92         
93         /* baking */
94         int sfra, efra;
95         int interval;
96         short local, pad2;              /* local==1: use local coords for baking */
97         
98         SBVertex **keys;                        /* array of size totpointkey */
99         int totpointkey, totkey;        /* if totpointkey != totpoint or totkey!- (efra-sfra)/interval -> free keys */
100         
101 } SoftBody;
102
103 /* pd->forcefield:  Effector Fields types */
104 #define PFIELD_FORCE    1
105 #define PFIELD_VORTEX   2
106 #define PFIELD_MAGNET   3
107 #define PFIELD_WIND             4
108 #define PFIELD_GUIDE    5
109
110 /* pd->flag: various settings */
111 #define PFIELD_USEMAX                   1
112 #define PDEFLE_DEFORM                   2
113 #define PFIELD_GUIDE_PATH_ADD   4
114
115 /* ob->softflag */
116 #define OB_SB_ENABLE    1
117 #define OB_SB_GOAL              2
118 #define OB_SB_EDGES             4
119 #define OB_SB_QUADS             8
120 #define OB_SB_POSTDEF   16
121 #define OB_SB_REDO              32
122 #define OB_SB_BAKESET   64
123 #define OB_SB_BAKEDO    128
124 #define OB_SB_RESET             256
125
126 #ifdef __cplusplus
127 }
128 #endif
129
130 #endif
131