[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13294] trunk/blender/source/blender: find_group would only return the first group, this let to the assumption that an object was only in 1 group, made it easy to loop through all groups an object is in.

Campbell Barton ideasman42 at gmail.com
Sat Jan 19 16:13:42 CET 2008


Revision: 13294
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13294
Author:   campbellbarton
Date:     2008-01-19 16:13:42 +0100 (Sat, 19 Jan 2008)

Log Message:
-----------
 find_group would only return the first group, this let to the assumption that an object was only in 1 group, made it easy to loop through all groups an object is in.

group = NULL;
while( (group = find_group(base->object, group)) ) {
	...
}

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_group.h
    trunk/blender/source/blender/blenkernel/intern/depsgraph.c
    trunk/blender/source/blender/blenkernel/intern/effect.c
    trunk/blender/source/blender/blenkernel/intern/group.c
    trunk/blender/source/blender/python/api2_2x/Group.c
    trunk/blender/source/blender/src/buttons_object.c
    trunk/blender/source/blender/src/editgroup.c

Modified: trunk/blender/source/blender/blenkernel/BKE_group.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_group.h	2008-01-19 11:17:12 UTC (rev 13293)
+++ trunk/blender/source/blender/blenkernel/BKE_group.h	2008-01-19 15:13:42 UTC (rev 13294)
@@ -45,7 +45,7 @@
 struct Group *add_group(char *name);
 void		add_to_group(struct Group *group, struct Object *ob);
 void		rem_from_group(struct Group *group, struct Object *ob);
-struct Group *find_group(struct Object *ob);
+struct Group *find_group(struct Object *ob, struct Group *group);
 int			object_in_group(struct Object *ob, struct Group *group);
 
 void		group_tag_recalc(struct Group *group);

Modified: trunk/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2008-01-19 11:17:12 UTC (rev 13293)
+++ trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2008-01-19 15:13:42 UTC (rev 13294)
@@ -2064,8 +2064,8 @@
 	
 	/* object not in scene? then handle group exception. needs to be dagged once too */
 	if(node==NULL) {
-		Group *group= find_group(ob);
-		if(group) {
+		Group *group= NULL;
+		while( (group = find_group(ob, group)) ) {
 			GroupObject *go;
 			/* primitive; tag all... this call helps building groups for particles */
 			for(go= group->gobject.first; go; go= go->next)

Modified: trunk/blender/source/blender/blenkernel/intern/effect.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/effect.c	2008-01-19 11:17:12 UTC (rev 13293)
+++ trunk/blender/source/blender/blenkernel/intern/effect.c	2008-01-19 15:13:42 UTC (rev 13294)
@@ -1552,7 +1552,7 @@
 	
 	/* object can be linked in group... stupid exception */
 	if(NULL==object_in_scene(ob, G.scene))
-		group= find_group(ob);
+		group= find_group(ob, NULL); /* TODO - dont just use the first group! - Campbell */
 	
 	mcache= mc= MEM_mallocN( (end-start+1)*sizeof(pMatrixCache), "ob matrix cache");
 	

Modified: trunk/blender/source/blender/blenkernel/intern/group.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/group.c	2008-01-19 11:17:12 UTC (rev 13293)
+++ trunk/blender/source/blender/blenkernel/intern/group.c	2008-01-19 15:13:42 UTC (rev 13294)
@@ -164,9 +164,12 @@
 	return 0;
 }
 
-Group *find_group(Object *ob)
+Group *find_group(Object *ob, Group *group)
 {
-	Group *group= G.main->group.first;
+	if (group)
+		group= group->id.next;
+	else
+		group= G.main->group.first;
 	
 	while(group) {
 		if(object_in_group(ob, group))

Modified: trunk/blender/source/blender/python/api2_2x/Group.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Group.c	2008-01-19 11:17:12 UTC (rev 13293)
+++ trunk/blender/source/blender/python/api2_2x/Group.c	2008-01-19 15:13:42 UTC (rev 13294)
@@ -697,7 +697,7 @@
 	
 	rem_from_group(self->bpygroup->group, blen_ob);
 	
-	if(find_group(blen_ob)==NULL) {
+	if(find_group(blen_ob, NULL)==NULL) {
 		blen_ob->flag &= ~OB_FROMGROUP;
 		
 		base= object_in_scene(blen_ob, G.scene);

Modified: trunk/blender/source/blender/src/buttons_object.c
===================================================================
--- trunk/blender/source/blender/src/buttons_object.c	2008-01-19 11:17:12 UTC (rev 13293)
+++ trunk/blender/source/blender/src/buttons_object.c	2008-01-19 15:13:42 UTC (rev 13294)
@@ -2350,7 +2350,7 @@
 	Object *ob= OBACT;
 	
 	rem_from_group(gr_v, ob);
-	if(find_group(ob)==NULL) {
+	if(find_group(ob, NULL)==NULL) {
 		ob->flag &= ~OB_FROMGROUP;
 		BASACT->flag &= ~OB_FROMGROUP;
 	}

Modified: trunk/blender/source/blender/src/editgroup.c
===================================================================
--- trunk/blender/source/blender/src/editgroup.c	2008-01-19 11:17:12 UTC (rev 13293)
+++ trunk/blender/source/blender/src/editgroup.c	2008-01-19 15:13:42 UTC (rev 13294)
@@ -119,8 +119,8 @@
 	
 	for(base=FIRSTBASE; base; base= base->next) {
 		if TESTBASE(base) {
-
-			while( (group = find_group(base->object)) ) {
+			group = NULL;
+			while( (group = find_group(base->object, group)) ) {
 				rem_from_group(group, base->object);
 			}
 			base->object->flag &= ~OB_FROMGROUP;





More information about the Bf-blender-cvs mailing list