diff options
author | Campbell Barton <ideasman42@gmail.com> | 2009-11-11 19:28:53 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2009-11-11 19:28:53 +0300 |
commit | bc6190f3e370d21aff0bd9d96fd43d92382c6466 (patch) | |
tree | 94bdbadbeb908085e86fd73b447df1ec1ed05858 /source/blender/editors/object/object_group.c | |
parent | f24392805515416bdba35f531457183e67ef274c (diff) |
python api for collection add()/remove()
Added a group example
C = bpy.context
ob = C.active_object
bpy.data.groups[0].objects.add(ob)
- add_to_group and rem_from_group now take optional scene and base flags and deal with updating the object & base flags
- operators that add objects to groups were setting ob->recalc= OB_RECALC_OB; looks like its not needed.
- previously add() ignored python args, now add and remove are called like any other FunctionRNA from python.
- made the pyrna api use tp_getset's for collestions active/add()/remove()
Diffstat (limited to 'source/blender/editors/object/object_group.c')
-rw-r--r-- | source/blender/editors/object/object_group.c | 43 |
1 files changed, 8 insertions, 35 deletions
diff --git a/source/blender/editors/object/object_group.c b/source/blender/editors/object/object_group.c index ec8409e9aa1..1e5b93aa6dc 100644 --- a/source/blender/editors/object/object_group.c +++ b/source/blender/editors/object/object_group.c @@ -60,7 +60,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - Object *ob= OBACT, *obt; + Object *ob= OBACT; Group *group; int ok = 0; @@ -73,11 +73,7 @@ static int objects_add_active_exec(bContext *C, wmOperator *op) if(object_in_group(ob, group)) { /* Assign groups to selected objects */ CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { - obt= base->object; - add_to_group(group, obt); - obt->flag |= OB_FROMGROUP; - base->flag |= OB_FROMGROUP; - base->object->recalc= OB_RECALC_OB; + add_to_group(group, base->object, scene, base); ok = 1; } CTX_DATA_END; @@ -110,7 +106,7 @@ void GROUP_OT_objects_add_active(wmOperatorType *ot) static int objects_remove_active_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - Object *ob= OBACT, *obt; + Object *ob= OBACT; Group *group; int ok = 0; @@ -123,11 +119,7 @@ static int objects_remove_active_exec(bContext *C, wmOperator *op) if(object_in_group(ob, group)) { /* Assign groups to selected objects */ CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { - obt= base->object; - rem_from_group(group, obt); - obt->flag &= ~OB_FROMGROUP; - base->flag &= ~OB_FROMGROUP; - base->object->recalc= OB_RECALC_OB; + rem_from_group(group, base->object, scene, base); ok = 1; } CTX_DATA_END; @@ -165,11 +157,7 @@ static int group_objects_remove_exec(bContext *C, wmOperator *op) CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { group = NULL; while((group = find_group(base->object, group))) - rem_from_group(group, base->object); - - base->object->flag &= ~OB_FROMGROUP; - base->flag &= ~OB_FROMGROUP; - base->object->recalc= OB_RECALC_OB; + rem_from_group(group, base->object, scene, base); } CTX_DATA_END; @@ -205,10 +193,7 @@ static int group_create_exec(bContext *C, wmOperator *op) group= add_group(name); CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { - add_to_group(group, base->object); - base->object->flag |= OB_FROMGROUP; - base->flag |= OB_FROMGROUP; - base->object->recalc= OB_RECALC_OB; + add_to_group(group, base->object, scene, base); } CTX_DATA_END; @@ -259,9 +244,7 @@ static int group_add_exec(bContext *C, wmOperator *op) group= BLI_findlink(&bmain->group, value); if(group) { - add_to_group(group, ob); - ob->flag |= OB_FROMGROUP; - base->flag |= OB_FROMGROUP; + add_to_group(group, ob, scene, NULL); /* base will be used if found */ } WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); @@ -323,21 +306,11 @@ static int group_remove_exec(bContext *C, wmOperator *op) Scene *scene= CTX_data_scene(C); Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data; Group *group= CTX_data_pointer_get_type(C, "group", &RNA_Group).data; - Base *base; if(!ob || !group) return OPERATOR_CANCELLED; - base= object_in_scene(ob, scene); - if(!base) - return OPERATOR_CANCELLED; - - rem_from_group(group, ob); - - if(find_group(ob, NULL) == NULL) { - ob->flag &= ~OB_FROMGROUP; - base->flag &= ~OB_FROMGROUP; - } + rem_from_group(group, ob, scene, NULL); /* base will be used if found */ WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); |