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