[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13575] trunk/blender/source/blender: Cloth: 1.

Daniel Genrich daniel.genrich at gmx.net
Tue Feb 5 15:11:48 CET 2008


Revision: 13575
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13575
Author:   genscher
Date:     2008-02-05 15:11:48 +0100 (Tue, 05 Feb 2008)

Log Message:
-----------
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

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_cloth.h
    trunk/blender/source/blender/blenkernel/intern/collision.c
    trunk/blender/source/blender/makesdna/DNA_cloth_types.h
    trunk/blender/source/blender/src/buttons_editing.c
    trunk/blender/source/blender/src/buttons_object.c

Modified: trunk/blender/source/blender/blenkernel/BKE_cloth.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_cloth.h	2008-02-05 03:10:46 UTC (rev 13574)
+++ trunk/blender/source/blender/blenkernel/BKE_cloth.h	2008-02-05 14:11:48 UTC (rev 13575)
@@ -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 @@
 	float dfdv[3][3];
 	float f[3];
 	float 	stiffness;	/* stiffness factor from the vertex groups */
+	float editrestlen;
 }
 ClothSpring;
 
@@ -165,6 +169,7 @@
 /* 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 );
 

Modified: trunk/blender/source/blender/blenkernel/intern/collision.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/collision.c	2008-02-05 03:10:46 UTC (rev 13574)
+++ trunk/blender/source/blender/blenkernel/intern/collision.c	2008-02-05 14:11:48 UTC (rev 13575)
@@ -496,24 +496,25 @@
 			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);

Modified: trunk/blender/source/blender/makesdna/DNA_cloth_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_cloth_types.h	2008-02-05 03:10:46 UTC (rev 13574)
+++ trunk/blender/source/blender/makesdna/DNA_cloth_types.h	2008-02-05 14:11:48 UTC (rev 13575)
@@ -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,7 +94,7 @@
 	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 */
 }
@@ -125,531 +124,8 @@
 	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;
 
 #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.
-*

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list