[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45016] trunk/blender/source/blender/ blenkernel: Make collision function more general so it can be used by other modifiers, too.

Daniel Genrich daniel.genrich at gmx.net
Tue Mar 20 05:15:42 CET 2012


Revision: 45016
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45016
Author:   genscher
Date:     2012-03-20 04:15:41 +0000 (Tue, 20 Mar 2012)
Log Message:
-----------
Make collision function more general so it can be used by other modifiers, too. [This is preparation work for animated smoke collision]

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_collision.h
    trunk/blender/source/blender/blenkernel/intern/collision.c

Modified: trunk/blender/source/blender/blenkernel/BKE_collision.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_collision.h	2012-03-20 04:09:43 UTC (rev 45015)
+++ trunk/blender/source/blender/blenkernel/BKE_collision.h	2012-03-20 04:15:41 UTC (rev 45016)
@@ -142,7 +142,7 @@
 /////////////////////////////////////////////////
 // used in effect.c
 /////////////////////////////////////////////////
-struct Object **get_collisionobjects(struct Scene *scene, struct Object *self, struct Group *group, unsigned int *numcollobj);
+struct Object **get_collisionobjects(struct Scene *scene, struct Object *self, struct Group *group, unsigned int *numcollobj, unsigned int modifier_type);
 
 typedef struct ColliderCache {
 	struct ColliderCache *next, *prev;

Modified: trunk/blender/source/blender/blenkernel/intern/collision.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/collision.c	2012-03-20 04:09:43 UTC (rev 45015)
+++ trunk/blender/source/blender/blenkernel/intern/collision.c	2012-03-20 04:15:41 UTC (rev 45016)
@@ -2131,7 +2131,7 @@
 }
 #endif
 
-static void add_collision_object(Object ***objs, unsigned int *numobj, unsigned int *maxobj, Object *ob, Object *self, int level)
+static void add_collision_object(Object ***objs, unsigned int *numobj, unsigned int *maxobj, Object *ob, Object *self, int level, unsigned int modifier_type)
 {
 	CollisionModifierData *cmd= NULL;
 
@@ -2139,8 +2139,8 @@
 		return;
 
 	/* only get objects with collision modifier */
-	if(ob->pd && ob->pd->deflect)
-		cmd= (CollisionModifierData *)modifiers_findByType(ob, eModifierType_Collision);
+	if(((modifier_type == eModifierType_Collision) && ob->pd && ob->pd->deflect) || (modifier_type != eModifierType_Collision))
+		cmd= (CollisionModifierData *)modifiers_findByType(ob, modifier_type);
 	
 	if(cmd) {	
 		/* extend array */
@@ -2160,13 +2160,13 @@
 
 		/* add objects */
 		for(go= group->gobject.first; go; go= go->next)
-			add_collision_object(objs, numobj, maxobj, go->ob, self, level+1);
+			add_collision_object(objs, numobj, maxobj, go->ob, self, level+1, modifier_type);
 	}	
 }
 
 // return all collision objects in scene
 // collision object will exclude self 
-Object **get_collisionobjects(Scene *scene, Object *self, Group *group, unsigned int *numcollobj)
+Object **get_collisionobjects(Scene *scene, Object *self, Group *group, unsigned int *numcollobj, unsigned int modifier_type)
 {
 	Base *base;
 	Object **objs;
@@ -2179,14 +2179,14 @@
 	if(group) {
 		/* use specified group */
 		for(go= group->gobject.first; go; go= go->next)
-			add_collision_object(&objs, &numobj, &maxobj, go->ob, self, 0);
+			add_collision_object(&objs, &numobj, &maxobj, go->ob, self, 0, modifier_type);
 	}
 	else {
 		Scene *sce_iter;
 		/* add objects in same layer in scene */
 		for(SETLOOPER(scene, sce_iter, base)) {
 			if(base->lay & self->lay)
-				add_collision_object(&objs, &numobj, &maxobj, base->object, self, 0);
+				add_collision_object(&objs, &numobj, &maxobj, base->object, self, 0, modifier_type);
 
 		}
 	}
@@ -2385,7 +2385,7 @@
 	bvhtree_update_from_cloth ( clmd, 1 ); // 0 means STATIC, 1 means MOVING (see later in this function)
 	bvhselftree_update_from_cloth ( clmd, 0 ); // 0 means STATIC, 1 means MOVING (see later in this function)
 	
-	collobjs = get_collisionobjects(clmd->scene, ob, clmd->coll_parms->group, &numcollobj);
+	collobjs = get_collisionobjects(clmd->scene, ob, clmd->coll_parms->group, &numcollobj, eModifierType_Collision);
 	
 	if(!collobjs)
 		return 0;




More information about the Bf-blender-cvs mailing list