[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