Merge branch 'blender2.7'
[blender.git] / source / blender / makesdna / DNA_cloth_types.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2006 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file \ingroup DNA
21  */
22
23 #ifndef __DNA_CLOTH_TYPES_H__
24 #define __DNA_CLOTH_TYPES_H__
25
26 #include "DNA_defs.h"
27
28 /**
29  * This struct contains all the global data required to run a simulation.
30  * At the time of this writing, this structure contains data appropriate
31  * to run a simulation as described in Deformation Constraints in a
32  * Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
33  *
34  * I've tried to keep similar, if not exact names for the variables as
35  * are presented in the paper.  Where I've changed the concept slightly,
36  * as in stepsPerFrame compared to the time step in the paper, I've used
37  * variables with different names to minimize confusion.
38  */
39
40 typedef struct ClothSimSettings {
41         /** UNUSED atm. */
42         struct  LinkNode *cache;
43         /** See SB. */
44         float   mingoal;
45         /** Mechanical damping of springs. */
46         float   Cdis DNA_DEPRECATED;
47         /** Viscous/fluid damping. */
48         float   Cvi;
49         /** Gravity/external force vector. */
50         float   gravity[3];
51         /** This is the duration of our time step, computed..   */
52         float   dt;
53         /** The mass of the entire cloth. */
54         float   mass;
55         /** Structural spring stiffness. */
56         float   structural DNA_DEPRECATED;
57         /** Shear spring stiffness. */
58         float   shear;
59         /** Flexion spring stiffness. */
60         float   bending;
61         /** Max bending scaling value, min is "bending". */
62         float   max_bend;
63         /** Max structural scaling value, min is "structural". */
64         float   max_struct DNA_DEPRECATED;
65         /** Max shear scaling value. */
66         float   max_shear;
67         /** Max sewing force. */
68         float   max_sewing;
69         /** Used for normalized springs. */
70         float   avg_spring_len;
71         /** Parameter how fast cloth runs. */
72         float   timescale;
73         /** Multiplies cloth speed. */
74         float   time_scale;
75         /** See SB. */
76         float   maxgoal;
77         /** Scaling of effector forces (see softbody_calc_forces)..*/
78         float   eff_force_scale;
79         /** Scaling of effector wind (see softbody_calc_forces)..       */
80         float   eff_wind_scale;
81         float   sim_time_old;
82         float   defgoal;
83         float   goalspring;
84         float   goalfrict;
85         /** Smoothing of velocities for hair. */
86         float   velocity_smooth;
87         /** Minimum density for hair. */
88         float   density_target;
89         /** Influence of hair density. */
90         float   density_strength;
91         /** Friction with colliders. */
92         float   collider_friction;
93         /** Damp the velocity to speed up getting to the resting position. */
94         float   vel_damping DNA_DEPRECATED;
95         /** Min amount to shrink cloth by 0.0f (no shrink) - 1.0f (shrink to nothing). */
96         float   shrink_min;
97         /** Max amount to shrink cloth by 0.0f (no shrink) - 1.0f (shrink to nothing). */
98         float   shrink_max;
99
100         /* XXX various hair stuff
101          * should really be separate, this struct is a horrible mess already
102          */
103         /** Damping of bending springs. */
104         float   bending_damping;
105         /** Size of voxel grid cells for continuum dynamics. */
106         float   voxel_cell_size;
107         int             pad;
108
109         /** Number of time steps per frame. */
110         int     stepsPerFrame;
111         /** Flags, see CSIMSETT_FLAGS enum above. */
112         int     flags;
113         /** How many frames of simulation to do before we start. */
114         int     preroll  DNA_DEPRECATED;
115         /** In percent!; if tearing enabled, a spring will get cut. */
116         int     maxspringlen;
117         /** Which solver should be used? txold. */
118         short   solver_type;
119         /** Vertex group for scaling bending stiffness. */
120         short   vgroup_bend;
121         /** Optional vertexgroup name for assigning weight..*/
122         short   vgroup_mass;
123         /** Vertex group for scaling structural stiffness. */
124         short   vgroup_struct;
125         /** Vertex group for shrinking cloth. */
126         short   vgroup_shrink;
127         /** Vertex group for scaling structural stiffness. */
128         short   shapekey_rest;
129         /** Used for presets on GUI. */
130         short   presets;
131         short   reset;
132
133         char pad0[4];
134         struct EffectorWeights *effector_weights;
135
136         short   bending_model;
137         /** Vertex group for scaling structural stiffness. */
138         short   vgroup_shear;
139         float   tension;
140         float   compression;
141         float   max_tension;
142         float   max_compression;
143         /** Mechanical damping of tension springs. */
144         float   tension_damp;
145         /** Mechanical damping of compression springs. */
146         float   compression_damp;
147         /** Mechanical damping of shear springs. */
148         float   shear_damp;
149 } ClothSimSettings;
150
151
152 typedef struct ClothCollSettings {
153         /** E.g. pointer to temp memory for collisions. */
154         struct  LinkNode *collision_list;
155         /** Min distance for collisions. */
156         float   epsilon;
157         /** Fiction/damping with self contact. */
158         float   self_friction;
159         /** Friction/damping applied on contact with other object. */
160         float   friction;
161         /** Collision restitution on contact with other object. */
162         float   damping;
163         /** For selfcollision. */
164         float   selfepsilon;
165         float repel_force DNA_DEPRECATED;
166         float distance_repel DNA_DEPRECATED;
167         /** Collision flags defined in BKE_cloth.h. */
168         int     flags;
169         /** How many iterations for the selfcollision loop. */
170         short   self_loop_count DNA_DEPRECATED;
171         /** How many iterations for the collision loop. */
172         short   loop_count;
173         int pad;
174         /** Only use colliders from this group of objects. */
175         struct Collection *group;
176         /** Vgroup to paint which vertices are used for self collisions. */
177         short   vgroup_selfcol;
178         short pad2[3];
179         /** Impulse clamp for object collisions. */
180         float   clamp;
181         /** Impulse clamp for self collisions. */
182         float   self_clamp;
183 } ClothCollSettings;
184
185
186 #endif