Initial commit of cloth modifier from branch rev 13453
[blender.git] / source / blender / makesdna / DNA_cloth_types.h
1 /**
2 * $Id: DNA_cloth_types.h,v 1.1 2007/08/01 02:28:34 daniel Exp $
3 *
4 * ***** BEGIN GPL/BL DUAL 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. The Blender
10 * Foundation also sells licenses for use in proprietary software under
11 * the Blender License.  See http://www.blender.org/BL/ for information
12 * about this.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software Foundation,
21 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22 *
23 * The Original Code is Copyright (C) 2006 by NaN Holding BV.
24 * All rights reserved.
25 *
26 * The Original Code is: all of this file.
27 *
28 * Contributor(s): Daniel (Genscher)
29 *
30 * ***** END GPL/BL DUAL LICENSE BLOCK *****
31 */
32 #ifndef DNA_CLOTH_TYPES_H
33 #define DNA_CLOTH_TYPES_H
34
35 #include "DNA_listBase.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 typedef struct SimulationSettings
49 {
50         short   vgroup_mass;    /* optional vertexgroup name for assigning weight.*/
51         short   vgroup_struct;  /* vertex group for scaling structural stiffness */
52         float   mingoal;        /* see SB */
53         int     preroll;        /* How many frames of simulation to do before we start. */
54         float   Cdis;           /* Mechanical damping of springs.               */
55         float   Cvi;            /* Viscous/fluid damping.                       */
56         int     stepsPerFrame;  /* Number of time steps per frame.              */
57         float   gravity [3];    /* Gravity/external force vector.               */
58         float   ufluid [3];     /* Velocity vector of the fluid.                */
59         float   dt;             /* This is the duration of our time step, computed.     */
60         float   mass;           /* The mass of the entire cloth.                */
61         float   structural;     /* Structural spring stiffness.                 */
62         float   shear;          /* Shear spring stiffness.                      */
63         float   bending;        /* Flexion spring stiffness.                    */
64         float   sim_time;
65         int     flags;          /* flags, see CSIMSETT_FLAGS enum above.        */
66         short   solver_type;    /* which solver should be used?         txold   */
67         short   vgroup_bend;    /* vertex group for scaling bending stiffness */
68         float   maxgoal;        /* see SB */
69         float   eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
70         float   eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
71         float   sim_time_old;
72         struct  LinkNode *cache; /* UNUSED atm */
73         float   defgoal;
74         int     goalfrict;
75         float   goalspring;
76         int     maxspringlen;   /* in percent!; if tearing enabled, a spring will get cut */
77         int     lastframe;      /* frame on which simulation stops */
78         int     firstframe;     /* frame on which simulation starts */
79         int     lastcachedframe;
80         int     editedframe;    /* which frame is in buffer */
81         int     autoprotect;    /* starting from this frame, cache gets protected  */
82         float   max_bend;       /* max bending scaling value, min is "bending" */
83         float   max_struct;     /* max structural scaling value, min is "structural" */
84         float   max_shear;      /* max shear scaling value, UNUSED */
85         int     firstcachedframe;
86         int pad;
87 }
88 SimulationSettings;
89
90
91 typedef struct CollisionSettings
92 {
93         float   epsilon;                /* The radius of a particle in the cloth.               */
94         float   self_friction;          /* Fiction/damping with self contact.                   */
95         float   friction;               /* Friction/damping applied on contact with other object.*/
96         short   collision_type;         /* which collision system is used.                      */
97         short   loop_count;             /* How many iterations for the collision loop.          */
98         struct  LinkNode *collision_list;       /* e.g. pointer to temp memory for collisions */
99         int     flags;                  /* collision flags defined in BKE_cloth.h */
100         float   avg_spring_len;         /* for selfcollision */
101 }
102 CollisionSettings;
103
104
105 /**
106 * This structure describes a cloth object against which the
107 * simulation can run.
108 *
109 * The m and n members of this structure represent the assumed
110 * rectangular ordered grid for which the original paper is written.
111 * At some point they need to disappear and we need to determine out
112 * own connectivity of the mesh based on the actual edges in the mesh.
113 *
114 **/
115 typedef struct Cloth
116 {
117         struct ClothVertex      *verts;                 /* The vertices that represent this cloth. */
118         struct  LinkNode        *springs;               /* The springs connecting the mesh. */
119         unsigned int            numverts;               /* The number of verts == m * n. */
120         unsigned int            numsprings;             /* The count of springs. */
121         unsigned int            numfaces;
122         unsigned char           old_solver_type;        /* unused, only 1 solver here */
123         unsigned char           pad2;
124         short                   pad3;
125         struct BVH              *tree;                  /* collision tree for this cloth object */
126         struct MFace            *mfaces;
127         struct Implicit_Data    *implicit;              /* our implicit solver connects to this pointer */
128 }
129 Cloth;
130
131 #endif
132 /**
133 * $Id: DNA_cloth_types.h,v 1.1 2007/08/01 02:28:34 daniel Exp $
134 *
135 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
136 *
137 * This program is free software; you can redistribute it and/or
138 * modify it under the terms of the GNU General Public License
139 * as published by the Free Software Foundation; either version 2
140 * of the License, or (at your option) any later version. The Blender
141 * Foundation also sells licenses for use in proprietary software under
142 * the Blender License.  See http://www.blender.org/BL/ for information
143 * about this.
144 *
145 * This program is distributed in the hope that it will be useful,
146 * but WITHOUT ANY WARRANTY; without even the implied warranty of
147 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
148 * GNU General Public License for more details.
149 *
150 * You should have received a copy of the GNU General Public License
151 * along with this program; if not, write to the Free Software Foundation,
152 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
153 *
154 * The Original Code is Copyright (C) 2006 by NaN Holding BV.
155 * All rights reserved.
156 *
157 * The Original Code is: all of this file.
158 *
159 * Contributor(s): Daniel (Genscher)
160 *
161 * ***** END GPL/BL DUAL LICENSE BLOCK *****
162 */
163 #ifndef DNA_CLOTH_TYPES_H
164 #define DNA_CLOTH_TYPES_H
165
166 #include "DNA_listBase.h"
167
168 /**
169 * This struct contains all the global data required to run a simulation.
170 * At the time of this writing, this structure contains data appropriate
171 * to run a simulation as described in Deformation Constraints in a
172 * Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
173 *
174 * I've tried to keep similar, if not exact names for the variables as
175 * are presented in the paper.  Where I've changed the concept slightly,
176 * as in stepsPerFrame comapred to the time step in the paper, I've used
177 * variables with different names to minimize confusion.
178 **/
179 typedef struct SimulationSettings
180 {
181         short   vgroup_mass;    /* optional vertexgroup name for assigning weight.*/
182         short   vgroup_struct;  /* vertex group for scaling structural stiffness */
183         float   mingoal;        /* see SB */
184         int     preroll;        /* How many frames of simulation to do before we start. */
185         float   Cdis;           /* Mechanical damping of springs.               */
186         float   Cvi;            /* Viscous/fluid damping.                       */
187         int     stepsPerFrame;  /* Number of time steps per frame.              */
188         float   gravity [3];    /* Gravity/external force vector.               */
189         float   ufluid [3];     /* Velocity vector of the fluid.                */
190         float   dt;             /* This is the duration of our time step, computed.     */
191         float   mass;           /* The mass of the entire cloth.                */
192         float   structural;     /* Structural spring stiffness.                 */
193         float   shear;          /* Shear spring stiffness.                      */
194         float   bending;        /* Flexion spring stiffness.                    */
195         float   sim_time;
196         int     flags;          /* flags, see CSIMSETT_FLAGS enum above.        */
197         short   solver_type;    /* which solver should be used?         txold   */
198         short   vgroup_bend;    /* vertex group for scaling bending stiffness */
199         float   maxgoal;        /* see SB */
200         float   eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
201         float   eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
202         float   sim_time_old;
203         struct  LinkNode *cache; /* UNUSED atm */
204         float   defgoal;
205         int     goalfrict;
206         float   goalspring;
207         int     maxspringlen;   /* in percent!; if tearing enabled, a spring will get cut */
208         int     lastframe;      /* frame on which simulation stops */
209         int     firstframe;     /* frame on which simulation starts */
210         int     lastcachedframe;
211         int     editedframe;    /* which frame is in buffer */
212         int     autoprotect;    /* starting from this frame, cache gets protected  */
213         float   max_bend;       /* max bending scaling value, min is "bending" */
214         float   max_struct;     /* max structural scaling value, min is "structural" */
215         float   max_shear;      /* max shear scaling value, UNUSED */
216         int     firstcachedframe;
217         int pad;
218 }
219 SimulationSettings;
220
221
222 typedef struct CollisionSettings
223 {
224         float   epsilon;                /* The radius of a particle in the cloth.               */
225         float   self_friction;          /* Fiction/damping with self contact.                   */
226         float   friction;               /* Friction/damping applied on contact with other object.*/
227         short   collision_type;         /* which collision system is used.                      */
228         short   loop_count;             /* How many iterations for the collision loop.          */
229         struct  LinkNode *collision_list;       /* e.g. pointer to temp memory for collisions */
230         int     flags;                  /* collision flags defined in BKE_cloth.h */
231         float   avg_spring_len;         /* for selfcollision */
232 }
233 CollisionSettings;
234
235
236 /**
237 * This structure describes a cloth object against which the
238 * simulation can run.
239 *
240 * The m and n members of this structure represent the assumed
241 * rectangular ordered grid for which the original paper is written.
242 * At some point they need to disappear and we need to determine out
243 * own connectivity of the mesh based on the actual edges in the mesh.
244 *
245 **/
246 typedef struct Cloth
247 {
248         struct ClothVertex      *verts;                 /* The vertices that represent this cloth. */
249         struct  LinkNode        *springs;               /* The springs connecting the mesh. */
250         unsigned int            numverts;               /* The number of verts == m * n. */
251         unsigned int            numsprings;             /* The count of springs. */
252         unsigned int            numfaces;
253         unsigned char           old_solver_type;        /* unused, only 1 solver here */
254         unsigned char           pad2;
255         short                   pad3;
256         struct BVH              *tree;                  /* collision tree for this cloth object */
257         struct MFace            *mfaces;
258         struct Implicit_Data    *implicit;              /* our implicit solver connects to this pointer */
259 }
260 Cloth;
261
262 #endif
263 /**
264 * $Id: DNA_cloth_types.h,v 1.1 2007/08/01 02:28:34 daniel Exp $
265 *
266 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
267 *
268 * This program is free software; you can redistribute it and/or
269 * modify it under the terms of the GNU General Public License
270 * as published by the Free Software Foundation; either version 2
271 * of the License, or (at your option) any later version. The Blender
272 * Foundation also sells licenses for use in proprietary software under
273 * the Blender License.  See http://www.blender.org/BL/ for information
274 * about this.
275 *
276 * This program is distributed in the hope that it will be useful,
277 * but WITHOUT ANY WARRANTY; without even the implied warranty of
278 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
279 * GNU General Public License for more details.
280 *
281 * You should have received a copy of the GNU General Public License
282 * along with this program; if not, write to the Free Software Foundation,
283 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
284 *
285 * The Original Code is Copyright (C) 2006 by NaN Holding BV.
286 * All rights reserved.
287 *
288 * The Original Code is: all of this file.
289 *
290 * Contributor(s): Daniel (Genscher)
291 *
292 * ***** END GPL/BL DUAL LICENSE BLOCK *****
293 */
294 #ifndef DNA_CLOTH_TYPES_H
295 #define DNA_CLOTH_TYPES_H
296
297 #include "DNA_listBase.h"
298
299 /**
300 * This struct contains all the global data required to run a simulation.
301 * At the time of this writing, this structure contains data appropriate
302 * to run a simulation as described in Deformation Constraints in a
303 * Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
304 *
305 * I've tried to keep similar, if not exact names for the variables as
306 * are presented in the paper.  Where I've changed the concept slightly,
307 * as in stepsPerFrame comapred to the time step in the paper, I've used
308 * variables with different names to minimize confusion.
309 **/
310 typedef struct SimulationSettings
311 {
312         short   vgroup_mass;    /* optional vertexgroup name for assigning weight.*/
313         short   vgroup_struct;  /* vertex group for scaling structural stiffness */
314         float   mingoal;        /* see SB */
315         int     preroll;        /* How many frames of simulation to do before we start. */
316         float   Cdis;           /* Mechanical damping of springs.               */
317         float   Cvi;            /* Viscous/fluid damping.                       */
318         int     stepsPerFrame;  /* Number of time steps per frame.              */
319         float   gravity [3];    /* Gravity/external force vector.               */
320         float   ufluid [3];     /* Velocity vector of the fluid.                */
321         float   dt;             /* This is the duration of our time step, computed.     */
322         float   mass;           /* The mass of the entire cloth.                */
323         float   structural;     /* Structural spring stiffness.                 */
324         float   shear;          /* Shear spring stiffness.                      */
325         float   bending;        /* Flexion spring stiffness.                    */
326         float   sim_time;
327         int     flags;          /* flags, see CSIMSETT_FLAGS enum above.        */
328         short   solver_type;    /* which solver should be used?         txold   */
329         short   vgroup_bend;    /* vertex group for scaling bending stiffness */
330         float   maxgoal;        /* see SB */
331         float   eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
332         float   eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
333         float   sim_time_old;
334         struct  LinkNode *cache; /* UNUSED atm */
335         float   defgoal;
336         int     goalfrict;
337         float   goalspring;
338         int     maxspringlen;   /* in percent!; if tearing enabled, a spring will get cut */
339         int     lastframe;      /* frame on which simulation stops */
340         int     firstframe;     /* frame on which simulation starts */
341         int     lastcachedframe;
342         int     editedframe;    /* which frame is in buffer */
343         int     autoprotect;    /* starting from this frame, cache gets protected  */
344         float   max_bend;       /* max bending scaling value, min is "bending" */
345         float   max_struct;     /* max structural scaling value, min is "structural" */
346         float   max_shear;      /* max shear scaling value, UNUSED */
347         int     firstcachedframe;
348         int pad;
349 }
350 SimulationSettings;
351
352
353 typedef struct CollisionSettings
354 {
355         float   epsilon;                /* The radius of a particle in the cloth.               */
356         float   self_friction;          /* Fiction/damping with self contact.                   */
357         float   friction;               /* Friction/damping applied on contact with other object.*/
358         short   collision_type;         /* which collision system is used.                      */
359         short   loop_count;             /* How many iterations for the collision loop.          */
360         struct  LinkNode *collision_list;       /* e.g. pointer to temp memory for collisions */
361         int     flags;                  /* collision flags defined in BKE_cloth.h */
362         float   avg_spring_len;         /* for selfcollision */
363 }
364 CollisionSettings;
365
366
367 /**
368 * This structure describes a cloth object against which the
369 * simulation can run.
370 *
371 * The m and n members of this structure represent the assumed
372 * rectangular ordered grid for which the original paper is written.
373 * At some point they need to disappear and we need to determine out
374 * own connectivity of the mesh based on the actual edges in the mesh.
375 *
376 **/
377 typedef struct Cloth
378 {
379         struct ClothVertex      *verts;                 /* The vertices that represent this cloth. */
380         struct  LinkNode        *springs;               /* The springs connecting the mesh. */
381         unsigned int            numverts;               /* The number of verts == m * n. */
382         unsigned int            numsprings;             /* The count of springs. */
383         unsigned int            numfaces;
384         unsigned char           old_solver_type;        /* unused, only 1 solver here */
385         unsigned char           pad2;
386         short                   pad3;
387         struct BVH              *tree;                  /* collision tree for this cloth object */
388         struct MFace            *mfaces;
389         struct Implicit_Data    *implicit;              /* our implicit solver connects to this pointer */
390 }
391 Cloth;
392
393 #endif
394 /**
395 * $Id: DNA_cloth_types.h,v 1.1 2007/08/01 02:28:34 daniel Exp $
396 *
397 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
398 *
399 * This program is free software; you can redistribute it and/or
400 * modify it under the terms of the GNU General Public License
401 * as published by the Free Software Foundation; either version 2
402 * of the License, or (at your option) any later version. The Blender
403 * Foundation also sells licenses for use in proprietary software under
404 * the Blender License.  See http://www.blender.org/BL/ for information
405 * about this.
406 *
407 * This program is distributed in the hope that it will be useful,
408 * but WITHOUT ANY WARRANTY; without even the implied warranty of
409 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
410 * GNU General Public License for more details.
411 *
412 * You should have received a copy of the GNU General Public License
413 * along with this program; if not, write to the Free Software Foundation,
414 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
415 *
416 * The Original Code is Copyright (C) 2006 by NaN Holding BV.
417 * All rights reserved.
418 *
419 * The Original Code is: all of this file.
420 *
421 * Contributor(s): Daniel (Genscher)
422 *
423 * ***** END GPL/BL DUAL LICENSE BLOCK *****
424 */
425 #ifndef DNA_CLOTH_TYPES_H
426 #define DNA_CLOTH_TYPES_H
427
428 #include "DNA_listBase.h"
429
430 /**
431 * This struct contains all the global data required to run a simulation.
432 * At the time of this writing, this structure contains data appropriate
433 * to run a simulation as described in Deformation Constraints in a
434 * Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
435 *
436 * I've tried to keep similar, if not exact names for the variables as
437 * are presented in the paper.  Where I've changed the concept slightly,
438 * as in stepsPerFrame comapred to the time step in the paper, I've used
439 * variables with different names to minimize confusion.
440 **/
441 typedef struct SimulationSettings
442 {
443         short   vgroup_mass;    /* optional vertexgroup name for assigning weight.*/
444         short   vgroup_struct;  /* vertex group for scaling structural stiffness */
445         float   mingoal;        /* see SB */
446         int     preroll;        /* How many frames of simulation to do before we start. */
447         float   Cdis;           /* Mechanical damping of springs.               */
448         float   Cvi;            /* Viscous/fluid damping.                       */
449         int     stepsPerFrame;  /* Number of time steps per frame.              */
450         float   gravity [3];    /* Gravity/external force vector.               */
451         float   ufluid [3];     /* Velocity vector of the fluid.                */
452         float   dt;             /* This is the duration of our time step, computed.     */
453         float   mass;           /* The mass of the entire cloth.                */
454         float   structural;     /* Structural spring stiffness.                 */
455         float   shear;          /* Shear spring stiffness.                      */
456         float   bending;        /* Flexion spring stiffness.                    */
457         float   sim_time;
458         int     flags;          /* flags, see CSIMSETT_FLAGS enum above.        */
459         short   solver_type;    /* which solver should be used?         txold   */
460         short   vgroup_bend;    /* vertex group for scaling bending stiffness */
461         float   maxgoal;        /* see SB */
462         float   eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
463         float   eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
464         float   sim_time_old;
465         struct  LinkNode *cache; /* UNUSED atm */
466         float   defgoal;
467         int     goalfrict;
468         float   goalspring;
469         int     maxspringlen;   /* in percent!; if tearing enabled, a spring will get cut */
470         int     lastframe;      /* frame on which simulation stops */
471         int     firstframe;     /* frame on which simulation starts */
472         int     lastcachedframe;
473         int     editedframe;    /* which frame is in buffer */
474         int     autoprotect;    /* starting from this frame, cache gets protected  */
475         float   max_bend;       /* max bending scaling value, min is "bending" */
476         float   max_struct;     /* max structural scaling value, min is "structural" */
477         float   max_shear;      /* max shear scaling value, UNUSED */
478         int     firstcachedframe;
479         int pad;
480 }
481 SimulationSettings;
482
483
484 typedef struct CollisionSettings
485 {
486         float   epsilon;                /* The radius of a particle in the cloth.               */
487         float   self_friction;          /* Fiction/damping with self contact.                   */
488         float   friction;               /* Friction/damping applied on contact with other object.*/
489         short   collision_type;         /* which collision system is used.                      */
490         short   loop_count;             /* How many iterations for the collision loop.          */
491         struct  LinkNode *collision_list;       /* e.g. pointer to temp memory for collisions */
492         int     flags;                  /* collision flags defined in BKE_cloth.h */
493         float   avg_spring_len;         /* for selfcollision */
494 }
495 CollisionSettings;
496
497
498 /**
499 * This structure describes a cloth object against which the
500 * simulation can run.
501 *
502 * The m and n members of this structure represent the assumed
503 * rectangular ordered grid for which the original paper is written.
504 * At some point they need to disappear and we need to determine out
505 * own connectivity of the mesh based on the actual edges in the mesh.
506 *
507 **/
508 typedef struct Cloth
509 {
510         struct ClothVertex      *verts;                 /* The vertices that represent this cloth. */
511         struct  LinkNode        *springs;               /* The springs connecting the mesh. */
512         unsigned int            numverts;               /* The number of verts == m * n. */
513         unsigned int            numsprings;             /* The count of springs. */
514         unsigned int            numfaces;
515         unsigned char           old_solver_type;        /* unused, only 1 solver here */
516         unsigned char           pad2;
517         short                   pad3;
518         struct BVH              *tree;                  /* collision tree for this cloth object */
519         struct MFace            *mfaces;
520         struct Implicit_Data    *implicit;              /* our implicit solver connects to this pointer */
521 }
522 Cloth;
523
524 #endif
525 /**
526 * $Id: DNA_cloth_types.h,v 1.1 2007/08/01 02:28:34 daniel Exp $
527 *
528 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
529 *
530 * This program is free software; you can redistribute it and/or
531 * modify it under the terms of the GNU General Public License
532 * as published by the Free Software Foundation; either version 2
533 * of the License, or (at your option) any later version. The Blender
534 * Foundation also sells licenses for use in proprietary software under
535 * the Blender License.  See http://www.blender.org/BL/ for information
536 * about this.
537 *
538 * This program is distributed in the hope that it will be useful,
539 * but WITHOUT ANY WARRANTY; without even the implied warranty of
540 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
541 * GNU General Public License for more details.
542 *
543 * You should have received a copy of the GNU General Public License
544 * along with this program; if not, write to the Free Software Foundation,
545 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
546 *
547 * The Original Code is Copyright (C) 2006 by NaN Holding BV.
548 * All rights reserved.
549 *
550 * The Original Code is: all of this file.
551 *
552 * Contributor(s): Daniel (Genscher)
553 *
554 * ***** END GPL/BL DUAL LICENSE BLOCK *****
555 */
556 #ifndef DNA_CLOTH_TYPES_H
557 #define DNA_CLOTH_TYPES_H
558
559 #include "DNA_listBase.h"
560
561 /**
562 * This struct contains all the global data required to run a simulation.
563 * At the time of this writing, this structure contains data appropriate
564 * to run a simulation as described in Deformation Constraints in a
565 * Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
566 *
567 * I've tried to keep similar, if not exact names for the variables as
568 * are presented in the paper.  Where I've changed the concept slightly,
569 * as in stepsPerFrame comapred to the time step in the paper, I've used
570 * variables with different names to minimize confusion.
571 **/
572 typedef struct SimulationSettings
573 {
574         short   vgroup_mass;    /* optional vertexgroup name for assigning weight.*/
575         short   vgroup_struct;  /* vertex group for scaling structural stiffness */
576         float   mingoal;        /* see SB */
577         int     preroll;        /* How many frames of simulation to do before we start. */
578         float   Cdis;           /* Mechanical damping of springs.               */
579         float   Cvi;            /* Viscous/fluid damping.                       */
580         int     stepsPerFrame;  /* Number of time steps per frame.              */
581         float   gravity [3];    /* Gravity/external force vector.               */
582         float   ufluid [3];     /* Velocity vector of the fluid.                */
583         float   dt;             /* This is the duration of our time step, computed.     */
584         float   mass;           /* The mass of the entire cloth.                */
585         float   structural;     /* Structural spring stiffness.                 */
586         float   shear;          /* Shear spring stiffness.                      */
587         float   bending;        /* Flexion spring stiffness.                    */
588         float   sim_time;
589         int     flags;          /* flags, see CSIMSETT_FLAGS enum above.        */
590         short   solver_type;    /* which solver should be used?         txold   */
591         short   vgroup_bend;    /* vertex group for scaling bending stiffness */
592         float   maxgoal;        /* see SB */
593         float   eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
594         float   eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
595         float   sim_time_old;
596         struct  LinkNode *cache; /* UNUSED atm */
597         float   defgoal;
598         int     goalfrict;
599         float   goalspring;
600         int     maxspringlen;   /* in percent!; if tearing enabled, a spring will get cut */
601         int     lastframe;      /* frame on which simulation stops */
602         int     firstframe;     /* frame on which simulation starts */
603         int     lastcachedframe;
604         int     editedframe;    /* which frame is in buffer */
605         int     autoprotect;    /* starting from this frame, cache gets protected  */
606         float   max_bend;       /* max bending scaling value, min is "bending" */
607         float   max_struct;     /* max structural scaling value, min is "structural" */
608         float   max_shear;      /* max shear scaling value, UNUSED */
609         int     firstcachedframe;
610         int pad;
611 }
612 SimulationSettings;
613
614
615 typedef struct CollisionSettings
616 {
617         float   epsilon;                /* The radius of a particle in the cloth.               */
618         float   self_friction;          /* Fiction/damping with self contact.                   */
619         float   friction;               /* Friction/damping applied on contact with other object.*/
620         short   collision_type;         /* which collision system is used.                      */
621         short   loop_count;             /* How many iterations for the collision loop.          */
622         struct  LinkNode *collision_list;       /* e.g. pointer to temp memory for collisions */
623         int     flags;                  /* collision flags defined in BKE_cloth.h */
624         float   avg_spring_len;         /* for selfcollision */
625 }
626 CollisionSettings;
627
628
629 /**
630 * This structure describes a cloth object against which the
631 * simulation can run.
632 *
633 * The m and n members of this structure represent the assumed
634 * rectangular ordered grid for which the original paper is written.
635 * At some point they need to disappear and we need to determine out
636 * own connectivity of the mesh based on the actual edges in the mesh.
637 *
638 **/
639 typedef struct Cloth
640 {
641         struct ClothVertex      *verts;                 /* The vertices that represent this cloth. */
642         struct  LinkNode        *springs;               /* The springs connecting the mesh. */
643         unsigned int            numverts;               /* The number of verts == m * n. */
644         unsigned int            numsprings;             /* The count of springs. */
645         unsigned int            numfaces;
646         unsigned char           old_solver_type;        /* unused, only 1 solver here */
647         unsigned char           pad2;
648         short                   pad3;
649         struct BVH              *tree;                  /* collision tree for this cloth object */
650         struct MFace            *mfaces;
651         struct Implicit_Data    *implicit;              /* our implicit solver connects to this pointer */
652 }
653 Cloth;
654
655 #endif