[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