own fix r34446, was incorrect, fixed properly now.
[blender.git] / source / blender / makesdna / DNA_cloth_types.h
1 /**
2 * $Id$
3 *
4 * ***** BEGIN GPL LICENSE BLOCK *****
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 *
20 * The Original Code is Copyright (C) 2006 by NaN Holding BV.
21 * All rights reserved.
22 *
23 * The Original Code is: all of this file.
24 *
25 * Contributor(s): Daniel (Genscher)
26 *
27 * ***** END GPL LICENSE BLOCK *****
28 */
29 #ifndef DNA_CLOTH_TYPES_H
30 #define DNA_CLOTH_TYPES_H
31
32 /**
33 * This struct contains all the global data required to run a simulation.
34 * At the time of this writing, this structure contains data appropriate
35 * to run a simulation as described in Deformation Constraints in a
36 * Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
37 *
38 * I've tried to keep similar, if not exact names for the variables as
39 * are presented in the paper.  Where I've changed the concept slightly,
40 * as in stepsPerFrame comapred to the time step in the paper, I've used
41 * variables with different names to minimize confusion.
42 **/
43
44 typedef struct ClothSimSettings
45 {
46         struct  LinkNode *cache; /* UNUSED atm */       
47         float   mingoal;        /* see SB */
48         float   Cdis;           /* Mechanical damping of springs.               */
49         float   Cvi;            /* Viscous/fluid damping.                       */
50         float   gravity[3];     /* Gravity/external force vector.               */
51         float   dt;             /* This is the duration of our time step, computed.     */
52         float   mass;           /* The mass of the entire cloth.                */
53         float   structural;     /* Structural spring stiffness.                 */
54         float   shear;          /* Shear spring stiffness.                      */
55         float   bending;        /* Flexion spring stiffness.                    */
56         float   max_bend;       /* max bending scaling value, min is "bending" */
57         float   max_struct;     /* max structural scaling value, min is "structural" */
58         float   max_shear;      /* max shear scaling value, UNUSED */
59         float   avg_spring_len; /* used for normalized springs */
60         float   timescale; /* parameter how fast cloth runs */
61         float   maxgoal;        /* see SB */
62         float   eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
63         float   eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
64         float   sim_time_old;
65         float   defgoal;
66         float   goalspring;
67         float   goalfrict;
68         float   velocity_smooth; /* smoothing of velocities for hair */
69         float   collider_friction; /* friction with colliders */
70
71         int     stepsPerFrame;  /* Number of time steps per frame.              */
72         int     flags;          /* flags, see CSIMSETT_FLAGS enum above.        */
73         int     preroll;        /* How many frames of simulation to do before we start. */
74         int     maxspringlen;   /* in percent!; if tearing enabled, a spring will get cut */
75         short   solver_type;    /* which solver should be used?         txold   */
76         short   vgroup_bend;    /* vertex group for scaling bending stiffness */
77         short   vgroup_mass;    /* optional vertexgroup name for assigning weight.*/
78         short   vgroup_struct;  /* vertex group for scaling structural stiffness */
79         short   shapekey_rest;  /* vertex group for scaling structural stiffness */
80         short   presets; /* used for presets on GUI */
81         short   reset;
82         short   pad[3];
83
84         struct EffectorWeights *effector_weights;
85 } ClothSimSettings;
86
87
88 typedef struct ClothCollSettings
89 {
90         struct  LinkNode *collision_list; /* e.g. pointer to temp memory for collisions */
91         float   epsilon;                /* min distance for collisions.         */
92         float   self_friction;          /* Fiction/damping with self contact.                   */
93         float   friction;               /* Friction/damping applied on contact with other object.*/
94         float   selfepsilon;            /* for selfcollision */
95         int     flags;                  /* collision flags defined in BKE_cloth.h */
96         short   self_loop_count;        /* How many iterations for the selfcollision loop       */
97         short   loop_count;             /* How many iterations for the collision loop.          */
98         struct Group *group;    /* Only use colliders from this group of objects */
99 } ClothCollSettings;
100
101
102 #endif