07bc2478837c66c2c437ea223aceb35f490c6d03
[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 comapred 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         struct  LinkNode *cache; /* UNUSED atm */
51         float   mingoal;        /* see SB */
52         float   Cdis;           /* Mechanical damping of springs.               */
53         float   Cvi;            /* Viscous/fluid damping.                       */
54         float   gravity[3];     /* Gravity/external force vector.               */
55         float   dt;             /* This is the duration of our time step, computed.     */
56         float   mass;           /* The mass of the entire cloth.                */
57         float   structural;     /* Structural spring stiffness.                 */
58         float   shear;          /* Shear spring stiffness.                      */
59         float   bending;        /* Flexion spring stiffness.                    */
60         float   max_bend;       /* max bending scaling value, min is "bending" */
61         float   max_struct;     /* max structural scaling value, min is "structural" */
62         float   max_shear;      /* max shear scaling value, UNUSED */
63         float   max_sewing;     /* max sewing force */
64         float   avg_spring_len; /* used for normalized springs */
65         float   timescale; /* parameter how fast cloth runs */
66         float   maxgoal;        /* see SB */
67         float   eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
68         float   eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
69         float   sim_time_old;
70         float   defgoal;
71         float   goalspring;
72         float   goalfrict;
73         float   velocity_smooth; /* smoothing of velocities for hair */
74         float   density_target;         /* minimum density for hair */
75         float   density_strength;       /* influence of hair density */
76         float   collider_friction; /* friction with colliders */
77         float   vel_damping; /* damp the velocity to speed up getting to the resting position */
78         float   shrink_min;  /* min amount to shrink cloth by 0.0f (no shrink) - 1.0f (shrink to nothing) */
79         float   shrink_max;  /* max amount to shrink cloth by 0.0f (no shrink) - 1.0f (shrink to nothing) */
80         
81         /* XXX various hair stuff
82          * should really be separate, this struct is a horrible mess already
83          */
84         float   bending_damping;        /* damping of bending springs */
85         float   voxel_cell_size;    /* size of voxel grid cells for continuum dynamics */
86         int             pad;
87
88         int     stepsPerFrame;  /* Number of time steps per frame.              */
89         int     flags;          /* flags, see CSIMSETT_FLAGS enum above.        */
90         int     preroll  DNA_DEPRECATED;        /* How many frames of simulation to do before we start. */
91         int     maxspringlen;   /* in percent!; if tearing enabled, a spring will get cut */
92         short   solver_type;    /* which solver should be used?         txold   */
93         short   vgroup_bend;    /* vertex group for scaling bending stiffness */
94         short   vgroup_mass;    /* optional vertexgroup name for assigning weight.*/
95         short   vgroup_struct;  /* vertex group for scaling structural stiffness */
96         short   vgroup_shrink;  /* vertex group for shrinking cloth */
97         short   shapekey_rest;  /* vertex group for scaling structural stiffness */
98         short   presets; /* used for presets on GUI */
99         short   reset;
100
101         struct EffectorWeights *effector_weights;
102 } ClothSimSettings;
103
104
105 typedef struct ClothCollSettings {
106         struct  LinkNode *collision_list; /* e.g. pointer to temp memory for collisions */
107         float   epsilon;                /* min distance for collisions.         */
108         float   self_friction;          /* Fiction/damping with self contact. */
109         float   friction;               /* Friction/damping applied on contact with other object.*/
110         float   damping;        /* Collision restitution on contact with other object.*/
111         float   selfepsilon;            /* for selfcollision */
112         float repel_force, distance_repel;
113         int     flags;                  /* collision flags defined in BKE_cloth.h */
114         short   self_loop_count;        /* How many iterations for the selfcollision loop       */
115         short   loop_count;             /* How many iterations for the collision loop.          */
116         int pad;
117         struct Group *group;    /* Only use colliders from this group of objects */
118         short   vgroup_selfcol; /* vgroup to paint which vertices are used for self collisions */
119         short pad2[3];
120 } ClothCollSettings;
121
122
123 #endif