diff options
author | Daniel Genrich <daniel.genrich@gmx.net> | 2008-02-05 17:11:48 +0300 |
---|---|---|
committer | Daniel Genrich <daniel.genrich@gmx.net> | 2008-02-05 17:11:48 +0300 |
commit | 7a70e5c0c0eacda814ffc32035a649a88b5326d0 (patch) | |
tree | a0de6960cc50e901299bb754c294433ca4f526ad | |
parent | 790d4927bdbdacbdd89ffa28ebd99a8678dfac7e (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.h | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/collision.c | 5 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_cloth_types.h | 528 | ||||
-rw-r--r-- | source/blender/src/buttons_editing.c | 2 | ||||
-rw-r--r-- | source/blender/src/buttons_object.c | 37 |
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"); |