Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Genrich <daniel.genrich@gmx.net>2008-02-05 17:11:48 +0300
committerDaniel Genrich <daniel.genrich@gmx.net>2008-02-05 17:11:48 +0300
commit7a70e5c0c0eacda814ffc32035a649a88b5326d0 (patch)
treea0de6960cc50e901299bb754c294433ca4f526ad
parent790d4927bdbdacbdd89ffa28ebd99a8678dfac7e (diff)
Cloth: 1. Fix for deflection being enabled thourgh softbody interface, 2. Fix for wrong calculated friction, 3. Fix for some header which was accitently blown up by my editor
-rw-r--r--source/blender/blenkernel/BKE_cloth.h5
-rw-r--r--source/blender/blenkernel/intern/collision.c5
-rw-r--r--source/blender/makesdna/DNA_cloth_types.h528
-rw-r--r--source/blender/src/buttons_editing.c2
-rw-r--r--source/blender/src/buttons_object.c37
5 files changed, 44 insertions, 533 deletions
diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h
index 430a8fd50a6..bf0ecd21397 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -35,10 +35,13 @@
#define BKE_CLOTH_H
#include "float.h"
+#include "BLI_editVert.h"
#include "BLI_linklist.h"
+
#include "BKE_collision.h"
#include "BKE_customdata.h"
#include "BKE_DerivedMesh.h"
+
#include "DNA_cloth_types.h"
#include "DNA_customdata_types.h"
#include "DNA_meshdata_types.h"
@@ -101,6 +104,7 @@ typedef struct ClothSpring
float dfdv[3][3];
float f[3];
float stiffness; /* stiffness factor from the vertex groups */
+ float editrestlen;
}
ClothSpring;
@@ -165,6 +169,7 @@ typedef enum
/* Bits to or into the ClothVertex.flags. */
#define CLOTH_VERT_FLAG_PINNED 1
#define CLOTH_VERT_FLAG_COLLISION 2
+#define CLOTH_VERT_FLAG_PINNED_EM 3
typedef void ( *CM_COLLISION_RESPONSE ) ( ClothModifierData *clmd, CollisionModifierData *collmd, CollisionTree *tree1, CollisionTree *tree2 );
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index 7304ae09ef8..788f5adc922 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -496,24 +496,25 @@ int cloth_collision_response_static(ClothModifierData *clmd, CollisionModifierDa
float vrel_t_pre[3];
float vrel_t[3], temp[3];
+ // calculate tangential velocity
VECCOPY(temp, collpair->normal);
VecMulf(temp, magrelVel);
VECSUB(vrel_t_pre, relativeVelocity, temp);
VECCOPY(vrel_t, vrel_t_pre);
- VecMulf(vrel_t, MAX2(1.0 - (clmd->coll_parms->friction * magrelVel / sqrt(INPR(vrel_t_pre,vrel_t_pre))), 0));
+ VecMulf(vrel_t, MAX2(1.0 - (clmd->coll_parms->friction * magrelVel / sqrt(INPR(vrel_t_pre,vrel_t_pre))), 0.0));
VECSUB(tangential, vrel_t_pre, vrel_t);
VecMulf(tangential, 0.5);
- // i_tangential = tangential
magtangent = INPR(tangential, tangential);
// Apply friction impulse.
if (magtangent > ALMOST_ZERO)
{
impulse = magtangent / ( 1.0 + w1*w1 + w2*w2 + w3*w3);
+ magtangent = sqrt(magtangent);
VECADDMUL(cloth1->verts[collpair->ap1].impulse, tangential, w1 * impulse/magtangent);
VECADDMUL(cloth1->verts[collpair->ap2].impulse, tangential, w2 * impulse/magtangent);
VECADDMUL(cloth1->verts[collpair->ap3].impulse, tangential, w3 * impulse/magtangent);
diff --git a/source/blender/makesdna/DNA_cloth_types.h b/source/blender/makesdna/DNA_cloth_types.h
index b7e5478259c..2b18142258c 100644
--- a/source/blender/makesdna/DNA_cloth_types.h
+++ b/source/blender/makesdna/DNA_cloth_types.h
@@ -32,7 +32,6 @@
#ifndef DNA_CLOTH_TYPES_H
#define DNA_CLOTH_TYPES_H
-#include "DNA_listBase.h"
/**
* This struct contains all the global data required to run a simulation.
@@ -95,531 +94,7 @@ typedef struct CollisionSettings
float friction; /* Friction/damping applied on contact with other object.*/
short collision_type; /* which collision system is used. */
short loop_count; /* How many iterations for the collision loop. */
- struct LinkNode *collision_list; /* e.g. pointer to temp memory for collisions */
- int flags; /* collision flags defined in BKE_cloth.h */
- float avg_spring_len; /* for selfcollision */
-}
-CollisionSettings;
-
-
-/**
-* This structure describes a cloth object against which the
-* simulation can run.
-*
-* The m and n members of this structure represent the assumed
-* rectangular ordered grid for which the original paper is written.
-* At some point they need to disappear and we need to determine out
-* own connectivity of the mesh based on the actual edges in the mesh.
-*
-**/
-typedef struct Cloth
-{
- struct ClothVertex *verts; /* The vertices that represent this cloth. */
- struct LinkNode *springs; /* The springs connecting the mesh. */
- unsigned int numverts; /* The number of verts == m * n. */
- unsigned int numsprings; /* The count of springs. */
- unsigned int numfaces;
- unsigned char old_solver_type; /* unused, only 1 solver here */
- unsigned char pad2;
- short pad3;
- struct BVH *tree; /* collision tree for this cloth object */
- struct MFace *mfaces;
- struct Implicit_Data *implicit; /* our implicit solver connects to this pointer */
-}
-Cloth;
-
-#endif
-/**
-* $Id: DNA_cloth_types.h,v 1.1 2007/08/01 02:28:34 daniel Exp $
-*
-* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version. The Blender
-* Foundation also sells licenses for use in proprietary software under
-* the Blender License. See http://www.blender.org/BL/ for information
-* about this.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*
-* The Original Code is Copyright (C) 2006 by NaN Holding BV.
-* All rights reserved.
-*
-* The Original Code is: all of this file.
-*
-* Contributor(s): Daniel (Genscher)
-*
-* ***** END GPL/BL DUAL LICENSE BLOCK *****
-*/
-#ifndef DNA_CLOTH_TYPES_H
-#define DNA_CLOTH_TYPES_H
-
-#include "DNA_listBase.h"
-
-/**
-* This struct contains all the global data required to run a simulation.
-* At the time of this writing, this structure contains data appropriate
-* to run a simulation as described in Deformation Constraints in a
-* Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
-*
-* I've tried to keep similar, if not exact names for the variables as
-* are presented in the paper. Where I've changed the concept slightly,
-* as in stepsPerFrame comapred to the time step in the paper, I've used
-* variables with different names to minimize confusion.
-**/
-typedef struct SimulationSettings
-{
- short vgroup_mass; /* optional vertexgroup name for assigning weight.*/
- short vgroup_struct; /* vertex group for scaling structural stiffness */
- float mingoal; /* see SB */
- int preroll; /* How many frames of simulation to do before we start. */
- float Cdis; /* Mechanical damping of springs. */
- float Cvi; /* Viscous/fluid damping. */
- int stepsPerFrame; /* Number of time steps per frame. */
- float gravity [3]; /* Gravity/external force vector. */
- float ufluid [3]; /* Velocity vector of the fluid. */
- float dt; /* This is the duration of our time step, computed. */
- float mass; /* The mass of the entire cloth. */
- float structural; /* Structural spring stiffness. */
- float shear; /* Shear spring stiffness. */
- float bending; /* Flexion spring stiffness. */
- float sim_time;
- int flags; /* flags, see CSIMSETT_FLAGS enum above. */
- short solver_type; /* which solver should be used? txold */
- short vgroup_bend; /* vertex group for scaling bending stiffness */
- float maxgoal; /* see SB */
- float eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
- float eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
- float sim_time_old;
- struct LinkNode *cache; /* UNUSED atm */
- float defgoal;
- int goalfrict;
- float goalspring;
- int maxspringlen; /* in percent!; if tearing enabled, a spring will get cut */
- int lastframe; /* frame on which simulation stops */
- int firstframe; /* frame on which simulation starts */
- int lastcachedframe;
- int editedframe; /* which frame is in buffer */
- int autoprotect; /* starting from this frame, cache gets protected */
- float max_bend; /* max bending scaling value, min is "bending" */
- float max_struct; /* max structural scaling value, min is "structural" */
- float max_shear; /* max shear scaling value, UNUSED */
- int firstcachedframe;
- int pad;
-}
-SimulationSettings;
-
-
-typedef struct CollisionSettings
-{
- float epsilon; /* The radius of a particle in the cloth. */
- float self_friction; /* Fiction/damping with self contact. */
- float friction; /* Friction/damping applied on contact with other object.*/
- short collision_type; /* which collision system is used. */
- short loop_count; /* How many iterations for the collision loop. */
- struct LinkNode *collision_list; /* e.g. pointer to temp memory for collisions */
- int flags; /* collision flags defined in BKE_cloth.h */
- float avg_spring_len; /* for selfcollision */
-}
-CollisionSettings;
-
-
-/**
-* This structure describes a cloth object against which the
-* simulation can run.
-*
-* The m and n members of this structure represent the assumed
-* rectangular ordered grid for which the original paper is written.
-* At some point they need to disappear and we need to determine out
-* own connectivity of the mesh based on the actual edges in the mesh.
-*
-**/
-typedef struct Cloth
-{
- struct ClothVertex *verts; /* The vertices that represent this cloth. */
- struct LinkNode *springs; /* The springs connecting the mesh. */
- unsigned int numverts; /* The number of verts == m * n. */
- unsigned int numsprings; /* The count of springs. */
- unsigned int numfaces;
- unsigned char old_solver_type; /* unused, only 1 solver here */
- unsigned char pad2;
- short pad3;
- struct BVH *tree; /* collision tree for this cloth object */
- struct MFace *mfaces;
- struct Implicit_Data *implicit; /* our implicit solver connects to this pointer */
-}
-Cloth;
-
-#endif
-/**
-* $Id: DNA_cloth_types.h,v 1.1 2007/08/01 02:28:34 daniel Exp $
-*
-* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version. The Blender
-* Foundation also sells licenses for use in proprietary software under
-* the Blender License. See http://www.blender.org/BL/ for information
-* about this.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*
-* The Original Code is Copyright (C) 2006 by NaN Holding BV.
-* All rights reserved.
-*
-* The Original Code is: all of this file.
-*
-* Contributor(s): Daniel (Genscher)
-*
-* ***** END GPL/BL DUAL LICENSE BLOCK *****
-*/
-#ifndef DNA_CLOTH_TYPES_H
-#define DNA_CLOTH_TYPES_H
-
-#include "DNA_listBase.h"
-
-/**
-* This struct contains all the global data required to run a simulation.
-* At the time of this writing, this structure contains data appropriate
-* to run a simulation as described in Deformation Constraints in a
-* Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
-*
-* I've tried to keep similar, if not exact names for the variables as
-* are presented in the paper. Where I've changed the concept slightly,
-* as in stepsPerFrame comapred to the time step in the paper, I've used
-* variables with different names to minimize confusion.
-**/
-typedef struct SimulationSettings
-{
- short vgroup_mass; /* optional vertexgroup name for assigning weight.*/
- short vgroup_struct; /* vertex group for scaling structural stiffness */
- float mingoal; /* see SB */
- int preroll; /* How many frames of simulation to do before we start. */
- float Cdis; /* Mechanical damping of springs. */
- float Cvi; /* Viscous/fluid damping. */
- int stepsPerFrame; /* Number of time steps per frame. */
- float gravity [3]; /* Gravity/external force vector. */
- float ufluid [3]; /* Velocity vector of the fluid. */
- float dt; /* This is the duration of our time step, computed. */
- float mass; /* The mass of the entire cloth. */
- float structural; /* Structural spring stiffness. */
- float shear; /* Shear spring stiffness. */
- float bending; /* Flexion spring stiffness. */
- float sim_time;
- int flags; /* flags, see CSIMSETT_FLAGS enum above. */
- short solver_type; /* which solver should be used? txold */
- short vgroup_bend; /* vertex group for scaling bending stiffness */
- float maxgoal; /* see SB */
- float eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
- float eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
- float sim_time_old;
- struct LinkNode *cache; /* UNUSED atm */
- float defgoal;
- int goalfrict;
- float goalspring;
- int maxspringlen; /* in percent!; if tearing enabled, a spring will get cut */
- int lastframe; /* frame on which simulation stops */
- int firstframe; /* frame on which simulation starts */
- int lastcachedframe;
- int editedframe; /* which frame is in buffer */
- int autoprotect; /* starting from this frame, cache gets protected */
- float max_bend; /* max bending scaling value, min is "bending" */
- float max_struct; /* max structural scaling value, min is "structural" */
- float max_shear; /* max shear scaling value, UNUSED */
- int firstcachedframe;
- int pad;
-}
-SimulationSettings;
-
-
-typedef struct CollisionSettings
-{
- float epsilon; /* The radius of a particle in the cloth. */
- float self_friction; /* Fiction/damping with self contact. */
- float friction; /* Friction/damping applied on contact with other object.*/
- short collision_type; /* which collision system is used. */
- short loop_count; /* How many iterations for the collision loop. */
- struct LinkNode *collision_list; /* e.g. pointer to temp memory for collisions */
- int flags; /* collision flags defined in BKE_cloth.h */
- float avg_spring_len; /* for selfcollision */
-}
-CollisionSettings;
-
-
-/**
-* This structure describes a cloth object against which the
-* simulation can run.
-*
-* The m and n members of this structure represent the assumed
-* rectangular ordered grid for which the original paper is written.
-* At some point they need to disappear and we need to determine out
-* own connectivity of the mesh based on the actual edges in the mesh.
-*
-**/
-typedef struct Cloth
-{
- struct ClothVertex *verts; /* The vertices that represent this cloth. */
- struct LinkNode *springs; /* The springs connecting the mesh. */
- unsigned int numverts; /* The number of verts == m * n. */
- unsigned int numsprings; /* The count of springs. */
- unsigned int numfaces;
- unsigned char old_solver_type; /* unused, only 1 solver here */
- unsigned char pad2;
- short pad3;
- struct BVH *tree; /* collision tree for this cloth object */
- struct MFace *mfaces;
- struct Implicit_Data *implicit; /* our implicit solver connects to this pointer */
-}
-Cloth;
-
-#endif
-/**
-* $Id: DNA_cloth_types.h,v 1.1 2007/08/01 02:28:34 daniel Exp $
-*
-* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version. The Blender
-* Foundation also sells licenses for use in proprietary software under
-* the Blender License. See http://www.blender.org/BL/ for information
-* about this.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*
-* The Original Code is Copyright (C) 2006 by NaN Holding BV.
-* All rights reserved.
-*
-* The Original Code is: all of this file.
-*
-* Contributor(s): Daniel (Genscher)
-*
-* ***** END GPL/BL DUAL LICENSE BLOCK *****
-*/
-#ifndef DNA_CLOTH_TYPES_H
-#define DNA_CLOTH_TYPES_H
-
-#include "DNA_listBase.h"
-
-/**
-* This struct contains all the global data required to run a simulation.
-* At the time of this writing, this structure contains data appropriate
-* to run a simulation as described in Deformation Constraints in a
-* Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
-*
-* I've tried to keep similar, if not exact names for the variables as
-* are presented in the paper. Where I've changed the concept slightly,
-* as in stepsPerFrame comapred to the time step in the paper, I've used
-* variables with different names to minimize confusion.
-**/
-typedef struct SimulationSettings
-{
- short vgroup_mass; /* optional vertexgroup name for assigning weight.*/
- short vgroup_struct; /* vertex group for scaling structural stiffness */
- float mingoal; /* see SB */
- int preroll; /* How many frames of simulation to do before we start. */
- float Cdis; /* Mechanical damping of springs. */
- float Cvi; /* Viscous/fluid damping. */
- int stepsPerFrame; /* Number of time steps per frame. */
- float gravity [3]; /* Gravity/external force vector. */
- float ufluid [3]; /* Velocity vector of the fluid. */
- float dt; /* This is the duration of our time step, computed. */
- float mass; /* The mass of the entire cloth. */
- float structural; /* Structural spring stiffness. */
- float shear; /* Shear spring stiffness. */
- float bending; /* Flexion spring stiffness. */
- float sim_time;
- int flags; /* flags, see CSIMSETT_FLAGS enum above. */
- short solver_type; /* which solver should be used? txold */
- short vgroup_bend; /* vertex group for scaling bending stiffness */
- float maxgoal; /* see SB */
- float eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
- float eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
- float sim_time_old;
- struct LinkNode *cache; /* UNUSED atm */
- float defgoal;
- int goalfrict;
- float goalspring;
- int maxspringlen; /* in percent!; if tearing enabled, a spring will get cut */
- int lastframe; /* frame on which simulation stops */
- int firstframe; /* frame on which simulation starts */
- int lastcachedframe;
- int editedframe; /* which frame is in buffer */
- int autoprotect; /* starting from this frame, cache gets protected */
- float max_bend; /* max bending scaling value, min is "bending" */
- float max_struct; /* max structural scaling value, min is "structural" */
- float max_shear; /* max shear scaling value, UNUSED */
- int firstcachedframe;
- int pad;
-}
-SimulationSettings;
-
-
-typedef struct CollisionSettings
-{
- float epsilon; /* The radius of a particle in the cloth. */
- float self_friction; /* Fiction/damping with self contact. */
- float friction; /* Friction/damping applied on contact with other object.*/
- short collision_type; /* which collision system is used. */
- short loop_count; /* How many iterations for the collision loop. */
- struct LinkNode *collision_list; /* e.g. pointer to temp memory for collisions */
- int flags; /* collision flags defined in BKE_cloth.h */
- float avg_spring_len; /* for selfcollision */
-}
-CollisionSettings;
-
-
-/**
-* This structure describes a cloth object against which the
-* simulation can run.
-*
-* The m and n members of this structure represent the assumed
-* rectangular ordered grid for which the original paper is written.
-* At some point they need to disappear and we need to determine out
-* own connectivity of the mesh based on the actual edges in the mesh.
-*
-**/
-typedef struct Cloth
-{
- struct ClothVertex *verts; /* The vertices that represent this cloth. */
- struct LinkNode *springs; /* The springs connecting the mesh. */
- unsigned int numverts; /* The number of verts == m * n. */
- unsigned int numsprings; /* The count of springs. */
- unsigned int numfaces;
- unsigned char old_solver_type; /* unused, only 1 solver here */
- unsigned char pad2;
- short pad3;
- struct BVH *tree; /* collision tree for this cloth object */
- struct MFace *mfaces;
- struct Implicit_Data *implicit; /* our implicit solver connects to this pointer */
-}
-Cloth;
-
-#endif
-/**
-* $Id: DNA_cloth_types.h,v 1.1 2007/08/01 02:28:34 daniel Exp $
-*
-* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version. The Blender
-* Foundation also sells licenses for use in proprietary software under
-* the Blender License. See http://www.blender.org/BL/ for information
-* about this.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software Foundation,
-* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*
-* The Original Code is Copyright (C) 2006 by NaN Holding BV.
-* All rights reserved.
-*
-* The Original Code is: all of this file.
-*
-* Contributor(s): Daniel (Genscher)
-*
-* ***** END GPL/BL DUAL LICENSE BLOCK *****
-*/
-#ifndef DNA_CLOTH_TYPES_H
-#define DNA_CLOTH_TYPES_H
-
-#include "DNA_listBase.h"
-
-/**
-* This struct contains all the global data required to run a simulation.
-* At the time of this writing, this structure contains data appropriate
-* to run a simulation as described in Deformation Constraints in a
-* Mass-Spring Model to Describe Rigid Cloth Behavior by Xavier Provot.
-*
-* I've tried to keep similar, if not exact names for the variables as
-* are presented in the paper. Where I've changed the concept slightly,
-* as in stepsPerFrame comapred to the time step in the paper, I've used
-* variables with different names to minimize confusion.
-**/
-typedef struct SimulationSettings
-{
- short vgroup_mass; /* optional vertexgroup name for assigning weight.*/
- short vgroup_struct; /* vertex group for scaling structural stiffness */
- float mingoal; /* see SB */
- int preroll; /* How many frames of simulation to do before we start. */
- float Cdis; /* Mechanical damping of springs. */
- float Cvi; /* Viscous/fluid damping. */
- int stepsPerFrame; /* Number of time steps per frame. */
- float gravity [3]; /* Gravity/external force vector. */
- float ufluid [3]; /* Velocity vector of the fluid. */
- float dt; /* This is the duration of our time step, computed. */
- float mass; /* The mass of the entire cloth. */
- float structural; /* Structural spring stiffness. */
- float shear; /* Shear spring stiffness. */
- float bending; /* Flexion spring stiffness. */
- float sim_time;
- int flags; /* flags, see CSIMSETT_FLAGS enum above. */
- short solver_type; /* which solver should be used? txold */
- short vgroup_bend; /* vertex group for scaling bending stiffness */
- float maxgoal; /* see SB */
- float eff_force_scale;/* Scaling of effector forces (see softbody_calc_forces).*/
- float eff_wind_scale; /* Scaling of effector wind (see softbody_calc_forces). */
- float sim_time_old;
- struct LinkNode *cache; /* UNUSED atm */
- float defgoal;
- int goalfrict;
- float goalspring;
- int maxspringlen; /* in percent!; if tearing enabled, a spring will get cut */
- int lastframe; /* frame on which simulation stops */
- int firstframe; /* frame on which simulation starts */
- int lastcachedframe;
- int editedframe; /* which frame is in buffer */
- int autoprotect; /* starting from this frame, cache gets protected */
- float max_bend; /* max bending scaling value, min is "bending" */
- float max_struct; /* max structural scaling value, min is "structural" */
- float max_shear; /* max shear scaling value, UNUSED */
- int firstcachedframe;
- int pad;
-}
-SimulationSettings;
-
-
-typedef struct CollisionSettings
-{
- float epsilon; /* The radius of a particle in the cloth. */
- float self_friction; /* Fiction/damping with self contact. */
- float friction; /* Friction/damping applied on contact with other object.*/
- short collision_type; /* which collision system is used. */
- short loop_count; /* How many iterations for the collision loop. */
- struct LinkNode *collision_list; /* e.g. pointer to temp memory for collisions */
+ struct LinkNode *collision_list; /* e.g. pointer to temp memory for collisions */
int flags; /* collision flags defined in BKE_cloth.h */
float avg_spring_len; /* for selfcollision */
}
@@ -649,6 +124,7 @@ typedef struct Cloth
struct BVH *tree; /* collision tree for this cloth object */
struct MFace *mfaces;
struct Implicit_Data *implicit; /* our implicit solver connects to this pointer */
+ struct Implicit_Data *implicitEM; /* our implicit solver connects to this pointer */
}
Cloth;
diff --git a/source/blender/src/buttons_editing.c b/source/blender/src/buttons_editing.c
index 23463f9bb8d..303936d9493 100644
--- a/source/blender/src/buttons_editing.c
+++ b/source/blender/src/buttons_editing.c
@@ -2154,6 +2154,8 @@ static void draw_modifier(uiBlock *block, Object *ob, ModifierData *md, int *xco
}
} else if (md->type==eModifierType_Softbody) {
uiDefBut(block, LABEL, 1, "See Softbody panel.", lx, (cy-=19), buttonWidth,19, NULL, 0.0, 0.0, 0, 0, "");
+ } else if (md->type==eModifierType_Cloth) {
+ uiDefBut(block, LABEL, 1, "See Cloth panel.", lx, (cy-=19), buttonWidth,19, NULL, 0.0, 0.0, 0, 0, "");
} else if (md->type==eModifierType_Boolean) {
BooleanModifierData *bmd = (BooleanModifierData*) md;
uiDefButI(block, MENU, B_MODIFIER_RECALC, "Operation%t|Intersect%x0|Union%x1|Difference%x2", lx,(cy-=19),buttonWidth,19, &bmd->operation, 0.0, 1.0, 0, 0, "Boolean operation to perform");
diff --git a/source/blender/src/buttons_object.c b/source/blender/src/buttons_object.c
index be81f0139f3..2f2c21ae143 100644
--- a/source/blender/src/buttons_object.c
+++ b/source/blender/src/buttons_object.c
@@ -3570,6 +3570,7 @@ static void object_softbodies_collision(Object *ob)
{
SoftBody *sb=ob->soft;
uiBlock *block;
+ uiBut *but = NULL;
static int val;
short *softflag=&ob->softflag, psys_cur=0;
int ob_has_hair=psys_ob_has_hair(ob);
@@ -3621,7 +3622,8 @@ static void object_softbodies_collision(Object *ob)
/* OTHER OBJECTS COLLISION STUFF */
if (ob->type==OB_MESH){
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, 1, B_REDR, "Deflection",10,50,150,20, &ob->pd->deflect, 0, 0, 0, 0, "Makes this object visible to softbody objects");
+ but = uiDefButBitS(block, TOG, 1, B_REDR, "Deflection",10,50,150,20, &ob->pd->deflect, 0, 0, 0, 0, "Makes this object visible to softbody objects");
+ uiButSetFunc(but, object_collision__enabletoggle, ob, NULL);
if(ob->pd->deflect) {
uiDefButF(block, NUM, B_FIELD_CHANGE, "Damping:", 160,50,150,20, &ob->pd->pdef_sbdamp, 0.0, 1.0, 10, 0, "Amount of damping during soft body collision");
uiDefButBitS(block, TOG,OB_SB_COLLFINAL , B_DIFF, "Ev.M.Stack",10,30,150,20, &ob->softflag, 0, 0, 0, 0, "Pick collision object from modifier stack");
@@ -3659,7 +3661,8 @@ static void object_softbodies_collision(Object *ob)
}
/* OTHER OBJECTS COLLISION STUFF */
if (ob->type==OB_MESH){
- uiDefButBitS(block, TOG, 1, B_REDR, "Deflection",10,50,150,20, &ob->pd->deflect, 0, 0, 0, 0, "Makes this object visible to other softbody objects");
+ but = uiDefButBitS(block, TOG, 1, B_REDR, "Deflection",10,50,150,20, &ob->pd->deflect, 0, 0, 0, 0, "Makes this object visible to other softbody objects");
+ uiButSetFunc(but, object_collision__enabletoggle, ob, NULL);
if(ob->pd->deflect) {
uiDefButF(block, NUM, B_DIFF, "Damping:", 160,50,150,20, &ob->pd->pdef_sbdamp, 0.0, 1.0, 10, 0, "Amount of damping during soft body collision");
uiDefButBitS(block, TOG,OB_SB_COLLFINAL , B_DIFF, "Ev.M.Stack",10,30,150,20, softflag, 0, 0, 0, 0, "Pick collision object from modifier stack");
@@ -5152,7 +5155,7 @@ static void object_panel_cloth(Object *ob)
uiBlockBeginAlign(block);
uiDefButF(block, NUM, B_CLOTH_RENEW, "StructStiff:", 10,170,150,20, &clmd->sim_parms->structural, 1.0, 10000.0, 100, 0, "Overall stiffness of structure");
uiDefButF(block, NUM, B_CLOTH_RENEW, "BendStiff:", 160,170,150,20, &clmd->sim_parms->bending, 0.0, 10000.0, 1000, 0, "Wrinkle coefficient (higher = less smaller but more big wrinkles)");
- uiDefButI(block, NUM, B_CLOTH_RENEW, "Quality:", 10,150,150,20, &clmd->sim_parms->stepsPerFrame, 4.0, 100.0, 5, 0, "Quality of the simulation (higher=better=slower)");
+ uiDefButI(block, NUM, B_CLOTH_RENEW, "Quality:", 10,150,150,20, &clmd->sim_parms->stepsPerFrame, 4.0, 80.0, 5, 0, "Quality of the simulation (higher=better=slower)");
uiDefButF(block, NUM, B_CLOTH_RENEW, "Spring Damp:", 160,150,150,20, &clmd->sim_parms->Cdis, 0.0, 10.0, 10, 0, "Spring damping");
uiDefButF(block, NUM, B_DIFF, "Air Damp:", 10,130,150,20, &clmd->sim_parms->Cvi, 0.0, 10.0, 10, 0, "Air has normaly some thickness which slows falling things down");
@@ -5238,9 +5241,32 @@ static void object_panel_cloth(Object *ob)
uiBlockEndAlign(block);
}
+static void object_cloth__protecttoggle(void *ob_v, void *arg2)
+{
+ Object *ob = ob_v;
+ int cageIndex, stack_index;
+ ClothModifierData *clmd = (ClothModifierData *)modifiers_findByType(ob, eModifierType_Cloth);
+
+ // automatically enable modifier in editmode when we havee a protected cache
+ if(clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_CCACHE_PROTECT)
+ {
+ cageIndex = modifiers_getCageIndex(ob_v, NULL );
+ stack_index = modifiers_indexInObject(ob_v, (ModifierData *)clmd);
+ if( stack_index >= cageIndex )
+ ((ModifierData *)clmd)->mode ^= eModifierMode_OnCage;
+ }
+ else
+ {
+ ((ModifierData *)clmd)->mode ^= eModifierMode_OnCage;
+ }
+
+}
+
+
static void object_panel_cloth_II(Object *ob)
{
uiBlock *block;
+ uiBut *but = NULL;
ClothModifierData *clmd = NULL;
block= uiNewBlock(&curarea->uiblocks, "object_cloth_II", UI_EMBOSS, UI_HELV, curarea->win);
@@ -5261,6 +5287,7 @@ static void object_panel_cloth_II(Object *ob)
uiDefBut(block, LABEL, 0, "",10,140,300,20, NULL, 0.0, 0, 0, 0, "");
uiClearButLock();
+ if(clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_EDITMODE) uiSetButLock(1, "Please leave editmode.");
if (!G.relbase_valid)
{
uiDefBut(block, LABEL, 0, "Cache deactivated until file is saved.", 10,120,300,20, NULL, 0.0, 0, 0, 0, "");
@@ -5268,8 +5295,8 @@ static void object_panel_cloth_II(Object *ob)
}
else
{
- uiDefButBitI(block, TOG, CLOTH_SIMSETTINGS_FLAG_CCACHE_PROTECT, REDRAWVIEW3D, "Protect Cache & Enable Cache Editing", 10,120,300,20, &clmd->sim_parms->flags, 0, 0, 0, 0, "Protect cache from automatic freeing when scene changed. This also enabled the cache beeing edited in editmode.");
-
+ but = uiDefButBitI(block, TOG, CLOTH_SIMSETTINGS_FLAG_CCACHE_PROTECT, REDRAWVIEW3D, "Protect Cache & Enable Cache Editing", 10,120,300,20, &clmd->sim_parms->flags, 0, 0, 0, 0, "Protect cache from automatic freeing when scene changed. This also enabled the cache beeing edited in editmode.");
+ uiButSetFunc(but, object_cloth__protecttoggle, ob, NULL);
uiDefBut(block, LABEL, 0, "Clear cache:", 10,100,90,20, NULL, 0.0, 0, 0, 0, "");
uiDefBut(block, BUT, B_CLOTH_CLEARCACHEALL, "All", 100, 100,100,20, NULL, 0.0, 0.0, 10, 0, "Free ALL cloth cache without preroll");
uiDefBut(block, BUT, B_CLOTH_CLEARCACHEFRAME, "From next frame", 200, 100,110,20, NULL, 0.0, 0.0, 10, 0, "Free cloth cache starting from next frame");