[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12396] branches/cloth/blender/source/ blender/blenkernel/intern: reverted part of cloth.c and modifier. c back to old code before switch to use "deform_only" modifier (not tested, needs cleanup but compiles)

Daniel Genrich daniel.genrich at gmx.net
Thu Oct 25 23:17:55 CEST 2007


Revision: 12396
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12396
Author:   genscher
Date:     2007-10-25 23:17:55 +0200 (Thu, 25 Oct 2007)

Log Message:
-----------
reverted part of cloth.c and modifier.c back to old code before switch to use "deform_only" modifier (not tested, needs cleanup but compiles) 

Modified Paths:
--------------
    branches/cloth/blender/source/blender/blenkernel/intern/cloth.c
    branches/cloth/blender/source/blender/blenkernel/intern/modifier.c

Modified: branches/cloth/blender/source/blender/blenkernel/intern/cloth.c
===================================================================
--- branches/cloth/blender/source/blender/blenkernel/intern/cloth.c	2007-10-25 20:30:18 UTC (rev 12395)
+++ branches/cloth/blender/source/blender/blenkernel/intern/cloth.c	2007-10-25 21:17:55 UTC (rev 12396)
@@ -120,13 +120,12 @@
 /* ********** cloth engine ******* */
 /* Prototypes for internal functions.
 */
-static void cloth_to_object ( Object *ob, ClothModifierData *clmd, DerivedMesh *dm );
-static void cloth_from_mesh ( Object *ob, ClothModifierData *clmd, DerivedMesh *dm );
-static int cloth_from_object ( Object *ob, ClothModifierData *clmd, DerivedMesh *dm );
+static void cloth_to_object (Object *ob,  DerivedMesh *dm, ClothModifierData *clmd);
+static void cloth_from_mesh (Object *ob, ClothModifierData *clmd, DerivedMesh *dm, float framenr);
+static int cloth_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *dm, DerivedMesh *olddm, float framenr);
+static int collobj_from_object(Object *ob, ClothModifierData *clmd, DerivedMesh *dm, DerivedMesh *olddm, float framenr);
 int cloth_build_springs ( Cloth *cloth, DerivedMesh *dm );
-static void cloth_apply_vgroup ( ClothModifierData *clmd, DerivedMesh *dm, short vgroup );
-
-
+static void cloth_apply_vgroup(ClothModifierData *clmd, DerivedMesh *dm, short vgroup);
 /******************************************************************************
 *
 * External interface called by modifier.c clothModifier functions.
@@ -136,9 +135,9 @@
 * cloth_init -  creates a new cloth simulation.
 *
 * 1. create object
-* 2. fill object with standard values or with the GUI settings if given
+* 2. fill object with standard values or with the GUI settings if given 
 */
-void cloth_init ( ClothModifierData *clmd )
+void cloth_init (ClothModifierData *clmd)
 {
 	/* Initialize our new data structure to reasonable values. */
 	clmd->sim_parms.gravity [0] = 0.0;
@@ -153,17 +152,14 @@
 	clmd->sim_parms.stepsPerFrame = 5;
 	clmd->sim_parms.sim_time = 1.0;
 	clmd->sim_parms.flags = CLOTH_SIMSETTINGS_FLAG_RESET;
-	clmd->sim_parms.solver_type = 0;
+	clmd->sim_parms.solver_type = 0; 
 	clmd->sim_parms.preroll = 0;
 	clmd->sim_parms.maxspringlen = 10;
-	clmd->sim_parms.firstframe = 1;
-	clmd->sim_parms.lastframe = 250;
 	clmd->coll_parms.self_friction = 5.0;
 	clmd->coll_parms.friction = 10.0;
 	clmd->coll_parms.loop_count = 1;
 	clmd->coll_parms.epsilon = 0.01f;
-	clmd->coll_parms.flags = 0;
-
+	
 	/* These defaults are copied from softbody.c's
 	* softbody_calc_forces() function.
 	*/
@@ -181,17 +177,17 @@
 }
 
 // unused in the moment, cloth needs quads from mesh
-DerivedMesh *CDDM_convert_to_triangle ( DerivedMesh *dm )
+DerivedMesh *CDDM_convert_to_triangle(DerivedMesh *dm)
 {
 	DerivedMesh *result = NULL;
 	int i;
-	int numverts = dm->getNumVerts ( dm );
-	int numedges = dm->getNumEdges ( dm );
-	int numfaces = dm->getNumFaces ( dm );
+	int numverts = dm->getNumVerts(dm);
+	int numedges = dm->getNumEdges(dm);
+	int numfaces = dm->getNumFaces(dm);
 
-	MVert *mvert = CDDM_get_verts ( dm );
-	MEdge *medge = CDDM_get_edges ( dm );
-	MFace *mface = CDDM_get_faces ( dm );
+	MVert *mvert = CDDM_get_verts(dm);
+	MEdge *medge = CDDM_get_edges(dm);
+	MFace *mface = CDDM_get_faces(dm);
 
 	MVert *mvert2;
 	MFace *mface2;
@@ -203,36 +199,36 @@
 	float vec1[3], vec2[3], vec3[3], vec4[3], vec5[3];
 	float mag1=0, mag2=0;
 
-	for ( i = 0; i < numfaces; i++ )
+	for(i = 0; i < numfaces; i++)
 	{
-		if ( mface[i].v4 )
+		if(mface[i].v4)
 			numquads++;
 		else
-			numtris++;
+			numtris++;	
 	}
 
-	result = CDDM_from_template ( dm, numverts, 0, numtris + 2*numquads );
+	result = CDDM_from_template(dm, numverts, 0, numtris + 2*numquads);
 
-	if ( !result )
+	if(!result)
 		return NULL;
 
 	// do verts
-	mvert2 = CDDM_get_verts ( result );
-	for ( a=0; a<numverts; a++ )
+	mvert2 = CDDM_get_verts(result);
+	for(a=0; a<numverts; a++) 
 	{
 		MVert *inMV;
 		MVert *mv = &mvert2[a];
 
 		inMV = &mvert[a];
 
-		DM_copy_vert_data ( dm, result, a, a, 1 );
+		DM_copy_vert_data(dm, result, a, a, 1);
 		*mv = *inMV;
 	}
 
 
 	// do faces
-	mface2 = CDDM_get_faces ( result );
-	for ( a=0, i=0; a<numfaces; a++ )
+	mface2 = CDDM_get_faces(result);
+	for(a=0, i=0; a<numfaces; a++) 
 	{
 		MFace *mf = &mface2[i];
 		MFace *inMF;
@@ -244,7 +240,7 @@
 		*mf = *inMF;
 		*/
 
-		if ( mface[a].v4 && random==1 )
+		if(mface[a].v4 && random==1)
 		{
 			mf->v1 = mface[a].v2;
 			mf->v2 = mface[a].v3;
@@ -260,9 +256,9 @@
 		mf->v4 = 0;
 		mf->flag |= ME_SMOOTH;
 
-		test_index_face ( mf, NULL, 0, 3 );
+		test_index_face(mf, NULL, 0, 3);
 
-		if ( mface[a].v4 )
+		if(mface[a].v4)
 		{
 			MFace *mf2;
 
@@ -275,7 +271,7 @@
 			*mf2 = *inMF;
 			*/
 
-			if ( random==1 )
+			if(random==1)
 			{
 				mf2->v1 = mface[a].v1;
 				mf2->v2 = mface[a].v2;
@@ -290,31 +286,32 @@
 			mf2->v4 = 0;
 			mf2->flag |= ME_SMOOTH;
 
-			test_index_face ( mf2, NULL, 0, 3 );
+			test_index_face(mf2, NULL, 0, 3);
 		}
 
 		i++;
 	}
 
-	CDDM_calc_edges ( result );
-	CDDM_calc_normals ( result );
+	CDDM_calc_edges(result);
+	CDDM_calc_normals(result);
 
 	return result;
 
 }
 
 
-DerivedMesh *CDDM_create_tearing ( ClothModifierData *clmd, DerivedMesh *dm )
+DerivedMesh *CDDM_create_tearing(ClothModifierData *clmd, DerivedMesh *dm)
 {
+	/*
 	DerivedMesh *result = NULL;
 	unsigned int i = 0, a = 0, j=0;
-	int numverts = dm->getNumVerts ( dm );
-	int numedges = dm->getNumEdges ( dm );
-	int numfaces = dm->getNumFaces ( dm );
+	int numverts = dm->getNumVerts(dm);
+	int numedges = dm->getNumEdges(dm);
+	int numfaces = dm->getNumFaces(dm);
 
-	MVert *mvert = CDDM_get_verts ( dm );
-	MEdge *medge = CDDM_get_edges ( dm );
-	MFace *mface = CDDM_get_faces ( dm );
+	MVert *mvert = CDDM_get_verts(dm);
+	MEdge *medge = CDDM_get_edges(dm);
+	MFace *mface = CDDM_get_faces(dm);
 
 	MVert *mvert2;
 	MFace *mface2;
@@ -324,79 +321,80 @@
 	Cloth *cloth = clmd->clothObject;
 	ClothSpring *springs = cloth->springs;
 	unsigned int numsprings = cloth->numsprings;
-
+	
 	// create spring tearing hash
 	edgehash = BLI_edgehash_new();
-
-	for ( i = 0; i < numsprings; i++ )
+	
+	for(i = 0; i < numsprings; i++)
 	{
-		if ( ( springs[i].flags & CLOTH_SPRING_FLAG_DEACTIVATE )
-		        && ( !BLI_edgehash_haskey ( edgehash, springs[i].ij, springs[i].kl ) ) )
+		if((springs[i].flags & CSPRING_FLAG_DEACTIVATE)
+		&&(!BLI_edgehash_haskey(edgehash, springs[i].ij, springs[i].kl)))
 		{
-			BLI_edgehash_insert ( edgehash, springs[i].ij, springs[i].kl, NULL );
-			BLI_edgehash_insert ( edgehash, springs[i].kl, springs[i].ij, NULL );
+			BLI_edgehash_insert(edgehash, springs[i].ij, springs[i].kl, NULL);
+			BLI_edgehash_insert(edgehash, springs[i].kl, springs[i].ij, NULL);
 			j++;
 		}
 	}
-
+	
 	// printf("found %d tears\n", j);
+	
+	result = CDDM_from_template(dm, numverts, 0, numfaces);
 
-	result = CDDM_from_template ( dm, numverts, 0, numfaces );
-
-	if ( !result )
+	if(!result)
 		return NULL;
 
 	// do verts
-	mvert2 = CDDM_get_verts ( result );
-	for ( a=0; a<numverts; a++ )
+	mvert2 = CDDM_get_verts(result);
+	for(a=0; a<numverts; a++) 
 	{
 		MVert *inMV;
 		MVert *mv = &mvert2[a];
 
 		inMV = &mvert[a];
 
-		DM_copy_vert_data ( dm, result, a, a, 1 );
+		DM_copy_vert_data(dm, result, a, a, 1);
 		*mv = *inMV;
 	}
 
 
 	// do faces
-	mface2 = CDDM_get_faces ( result );
-	for ( a=0, i=0; a<numfaces; a++ )
+	mface2 = CDDM_get_faces(result);
+	for(a=0, i=0; a<numfaces; a++) 
 	{
 		MFace *mf = &mface2[i];
 		MFace *inMF;
 		inMF = &mface[a];
 
-		/*
-		DM_copy_face_data(dm, result, a, i, 1);
+		
+		// DM_copy_face_data(dm, result, a, i, 1);
 
-		*mf = *inMF;
-		*/
-
-		if ( ( !BLI_edgehash_haskey ( edgehash, mface[a].v1, mface[a].v2 ) )
-		        && ( !BLI_edgehash_haskey ( edgehash, mface[a].v2, mface[a].v3 ) )
-		        && ( !BLI_edgehash_haskey ( edgehash, mface[a].v3, mface[a].v4 ) )
-		        && ( !BLI_edgehash_haskey ( edgehash, mface[a].v4, mface[a].v1 ) ) )
+		// *mf = *inMF;
+		
+		
+		if((!BLI_edgehash_haskey(edgehash, mface[a].v1, mface[a].v2))
+		&&(!BLI_edgehash_haskey(edgehash, mface[a].v2, mface[a].v3))
+		&&(!BLI_edgehash_haskey(edgehash, mface[a].v3, mface[a].v4))
+		&&(!BLI_edgehash_haskey(edgehash, mface[a].v4, mface[a].v1)))
 		{
 			mf->v1 = mface[a].v1;
 			mf->v2 = mface[a].v2;
 			mf->v3 = mface[a].v3;
 			mf->v4 = mface[a].v4;
-
-			test_index_face ( mf, NULL, 0, 4 );
-
+	
+			test_index_face(mf, NULL, 0, 4);
+	
 			i++;
 		}
 	}
 
-	CDDM_lower_num_faces ( result, i );
-	CDDM_calc_edges ( result );
-	CDDM_calc_normals ( result );
+	CDDM_lower_num_faces(result, i);
+	CDDM_calc_edges(result);
+	CDDM_calc_normals(result);
+	
+	BLI_edgehash_free(edgehash, NULL);
 
-	BLI_edgehash_free ( edgehash, NULL );
-
 	return result;
+	*/
 }
 
 
@@ -600,79 +598,54 @@
 
 /**
 * cloth_deform_verts - simulates one step, framenr is in frames.
-*
+* 
 **/
-DerivedMesh *clothModifier_do(ClothModifierData *clmd,
-					 Object *ob, DerivedMesh *dm)
+DerivedMesh *clothModifier_do(ClothModifierData *clmd,Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc)
 {
 	unsigned int i;
-	DerivedMesh *result = NULL;
+	unsigned int numverts = -1;
+	unsigned int numedges = -1;
+	unsigned int numfaces = -1;
+	MVert *mvert = NULL;
+	MEdge *medge = NULL;
+	MFace *mface = NULL;
+	DerivedMesh *result = NULL, *result2 = NULL;
 	Cloth *cloth = clmd->clothObject;
-	unsigned int framenr = ( float ) G.scene->r.cfra;
-	float current_time = bsystem_time ( ob, ( float ) G.scene->r.cfra, 0.0 );
-	ListBase *effectors = NULL;
-	ClothVertex *verts = NULL;
+	unsigned int framenr = (float)G.scene->r.cfra;
+	float current_time = bsystem_time(ob, (float)G.scene->r.cfra, 0.0);
+	ListBase	*effectors = NULL;
+	ClothVertex *newframe= NULL;
 	Frame *frame = NULL;
 	LinkNode *search = NULL;
-	float deltaTime = current_time - clmd->sim_parms.sim_time;
-	MVert *mverts = NULL;
-	
+	float deltaTime = current_time - clmd->sim_parms.sim_time;	
+
+	clmd->sim_parms.dt = 1.0f / (clmd->sim_parms.stepsPerFrame * G.scene->r.frs_sec);
+
 	result = CDDM_copy(dm);
-	
-	// only be active during a specific period:
-	// that's "first frame" and "last frame" on GUI
-	if ( clmd->clothObject )
-	{
-		if ( clmd->sim_parms.cache )
-		{
-			if ( current_time < clmd->sim_parms.firstframe )
-			{
-				int frametime = cloth_cache_first_frame ( clmd );
-				if ( cloth_cache_search_frame ( clmd, frametime ) )
-				{
-					cloth_cache_get_frame ( clmd, frametime );
-					cloth_to_object ( ob, clmd, result );
-				}
-				return;
-			}

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list