Code comments add to collision interface
authorDaniel Genrich <daniel.genrich@gmx.net>
Sun, 21 Oct 2007 17:20:31 +0000 (17:20 +0000)
committerDaniel Genrich <daniel.genrich@gmx.net>
Sun, 21 Oct 2007 17:20:31 +0000 (17:20 +0000)
source/blender/blenkernel/BKE_collisions.h
source/blender/blenkernel/intern/cloth.c
source/blender/src/buttons_object.c

index 7c9ced262a8b31101dd708ba367728baea4d80ff..0536a72d74b334fcbe7cc7e016e050e06f3b895c 100644 (file)
@@ -88,10 +88,15 @@ CollisionPair;
 // forward declarations
 /////////////////////////////////////////////////
 
-void bvh_free ( BVH *bvh );
+// builds bounding volume hierarchy
 BVH *bvh_build (DerivedMesh *dm, MVert *x, MVert *xold, unsigned int numverts, float epsilon);
+// frees the same
+void bvh_free ( BVH *bvh );
 
+// checks two bounding volume hierarchies for potential collisions and returns some list with those
 int bvh_traverse(Tree *tree1, Tree *tree2, LinkNode *collision_list);
+
+// update bounding volumes, needs updated positions in bvh->x
 void bvh_update(DerivedMesh *dm, BVH * bvh, int moving);
 
 LinkNode *BLI_linklist_append_fast ( LinkNode **listp, void *ptr );
index d83c7bcb7f0c49c076e2b7879dd3a13efa26d0ca..dce36f543eeddb5ecbfafaf680e9249b8eb99114 100644 (file)
@@ -621,8 +621,7 @@ void clothModifier_do ( ClothModifierData *clmd, Object *ob, DerivedMesh *dm,
        Frame *frame = NULL;
        LinkNode *search = NULL;
        float deltaTime = current_time - clmd->sim_parms.sim_time;
-
-
+       
        // only be active during a specific period:
        // that's "first frame" and "last frame" on GUI
        if ( ! ( clmd->sim_parms.flags & CLOTH_SIMSETTINGS_FLAG_COLLOBJ ) )
@@ -671,59 +670,7 @@ void clothModifier_do ( ClothModifierData *clmd, Object *ob, DerivedMesh *dm,
        clmd->sim_parms.dt = 1.0f / clmd->sim_parms.stepsPerFrame;
 
        clmd->sim_parms.sim_time = current_time;
-
-       // check if cloth object was some collision object before and needs freeing now
-       if ( ! ( clmd->sim_parms.flags & CLOTH_SIMSETTINGS_FLAG_COLLOBJ ) && ( clmd->clothObject != NULL ) && ( clmd->clothObject->old_solver_type == 255 ) )
-       {
-               // temporary set CSIMSETT_FLAG_COLLOBJ flag for proper freeing
-               clmd->sim_parms.flags |= CLOTH_SIMSETTINGS_FLAG_COLLOBJ;
-               cloth_free_modifier ( clmd );
-               clmd->sim_parms.flags &= ~CLOTH_SIMSETTINGS_FLAG_COLLOBJ;
-       }
-
-       // This is for collisions objects: check special case CSIMSETT_FLAG_COLLOBJ
-       if ( clmd->sim_parms.flags & CLOTH_SIMSETTINGS_FLAG_COLLOBJ )
-       {
-               // save next position + time
-               if ( ( clmd->clothObject == NULL ) || ( numverts != clmd->clothObject->numverts ) )
-               {
-                       if ( !collobj_from_object ( ob, clmd, dm, vertexCos, framenr ) )
-                       {
-                               clmd->sim_parms.flags |= CLOTH_SIMSETTINGS_FLAG_COLLOBJ;
-                               cloth_free_modifier ( clmd );
-                               return;
-                       }
-
-                       if ( clmd->clothObject == NULL )
-                               return;
-
-                       cloth = clmd->clothObject;
-               }
-
-               // Save old position
-               clmd->sim_parms.sim_time_old = clmd->sim_parms.sim_time;
-               clmd->sim_parms.sim_time = current_time;
-
-               verts = cloth->verts;
-
-               for ( i = 0; i < clmd->clothObject->numverts; i++, verts++ )
-               {
-                       // Save the previous position.
-                       VECCOPY ( verts->xold, verts->x );
-                       VECCOPY ( verts->txold, verts->x );
-
-                       // Get the current position.
-                       VECCOPY ( verts->x, vertexCos[i] );
-                       Mat4MulVecfl ( ob->obmat, verts->x );
-
-                       // Compute the vertices "velocity".
-                       // (no dt correction here because of float error)
-                       VECSUB ( verts->v, verts->x, verts->xold );
-               }
-
-               return;
-       }
-
+       
        if ( deltaTime == 1.0f )
        {
                if ( ( clmd->clothObject == NULL ) || ( numverts != clmd->clothObject->numverts ) )
@@ -955,72 +902,6 @@ static void cloth_apply_vgroup ( ClothModifierData *clmd, DerivedMesh *dm, short
        }
 }
 
-// only meshes supported at the moment
-/* collision objects */
-static int collobj_from_object ( Object *ob, ClothModifierData *clmd, DerivedMesh *dm, float ( *vertexCos ) [3], unsigned int numverts )
-{
-       unsigned int i;
-       MVert *mvert = NULL;
-       ClothVertex *verts = NULL;
-       float tnull[3] = {0,0,0};
-
-       /* If we have a clothObject, free it. */
-       if ( clmd->clothObject != NULL )
-               cloth_free_modifier ( clmd );
-
-       /* Allocate a new cloth object. */
-       clmd->clothObject = MEM_callocN ( sizeof ( Cloth ), "cloth" );
-       if ( clmd->clothObject )
-       {
-               clmd->clothObject->old_solver_type = 255;
-               // clmd->clothObject->old_collision_type = 255;
-       }
-       else if ( clmd->clothObject == NULL )
-       {
-               modifier_setError ( & ( clmd->modifier ), "Out of memory on allocating clmd->clothObject." );
-               return 0;
-       }
-
-       switch ( ob->type )
-       {
-               case OB_MESH:
-
-                       // mesh input objects need DerivedMesh
-                       if ( !dm )
-                               return 0;
-
-                       cloth_from_mesh ( ob, clmd, dm );
-
-                       if ( clmd->clothObject != NULL )
-                       {
-                               if ( !dm ) return 0;
-                               if ( !dm->getNumVerts ( dm ) || !dm->getNumFaces ( dm ) ) return 0;
-
-                               mvert = dm->getVertArray ( dm );
-                               verts = clmd->clothObject->verts;
-                               numverts = clmd->clothObject->numverts = dm->getNumVerts ( dm );
-
-                               for ( i = 0; i < numverts; i++, verts++ )
-                               {
-                                       VECCOPY ( verts->x, mvert[i].co );
-                                       Mat4MulVecfl ( ob->obmat, verts->x );
-                                       verts->flags = 0;
-                                       VECCOPY ( verts->xold, verts->x );
-                                       VECCOPY ( verts->txold, verts->x );
-                                       VECCOPY ( verts->tx, verts->x );
-                                       VecMulf ( verts->v, 0.0f );
-                                       verts->impulse_count = 0;
-                                       VECCOPY ( verts->impulse, tnull );
-                               }
-                               // clmd->clothObject->tree =  bvh_build ( dm, clmd->coll_parms.epsilon );
-
-                       }
-
-                       return 1;
-               default: return 0; // TODO - we do not support changing meshes
-       }
-}
-
 // only meshes supported at the moment
 static int cloth_from_object ( Object *ob, ClothModifierData *clmd, DerivedMesh *dm, float ( *vertexCos ) [3], unsigned int numverts )
 {
index 3b232f49001a8f22236feb0a1ede2c8dca5547b2..8bca629eeac0ed645a799ef0bd12a538a9b64b5b 100644 (file)
@@ -3131,7 +3131,7 @@ static void object_panel_cloth(Object *ob)
        
        if(clmd)
        {
-               but = uiDefButBitI(block, TOG, CLOTH_SIMSETTINGS_FLAG_COLLOBJ, B_EFFECT_DEP, "Collision Object",        170,200,130,20, &clmd->sim_parms.flags, 0, 0, 0, 0, "Sets object to become a cloth collision object");
+               // but = uiDefButBitI(block, TOG, CLOTH_SIMSETTINGS_FLAG_COLLOBJ, B_EFFECT_DEP, "Collision Object",     170,200,130,20, &clmd->sim_parms.flags, 0, 0, 0, 0, "Sets object to become a cloth collision object");
 
                if (!(clmd->sim_parms.flags & CLOTH_SIMSETTINGS_FLAG_COLLOBJ))
                {