Revision: 23689 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23689 Author: campbellbarton Date: 2009-10-07 16:40:27 +0200 (Wed, 07 Oct 2009)
Log Message: ----------- 'Add Group' back in the add object menu Modified Paths: -------------- trunk/blender/source/blender/editors/object/object_add.c trunk/blender/source/blender/editors/object/object_intern.h trunk/blender/source/blender/editors/object/object_ops.c Modified: trunk/blender/source/blender/editors/object/object_add.c =================================================================== --- trunk/blender/source/blender/editors/object/object_add.c 2009-10-07 13:22:56 UTC (rev 23688) +++ trunk/blender/source/blender/editors/object/object_add.c 2009-10-07 14:40:27 UTC (rev 23689) @@ -26,6 +26,7 @@ */ #include <stdlib.h> +#include <string.h> #include "MEM_guardedalloc.h" @@ -704,6 +705,8 @@ uiItemMenuEnumO(layout, "Lamp", ICON_OUTLINER_OB_LAMP, "OBJECT_OT_lamp_add", "type"); uiItemS(layout); uiItemMenuEnumO(layout, "Force Field", ICON_OUTLINER_OB_EMPTY, "OBJECT_OT_effector_add", "type"); + uiItemS(layout); + uiItemMenuEnumO(layout, "Group Instance", ICON_OUTLINER_OB_EMPTY, "OBJECT_OT_group_instance_add", "type"); uiPupMenuEnd(C, pup); @@ -728,6 +731,81 @@ ot->flag= 0; } +/* add dupligroup */ +static EnumPropertyItem *add_dupligroup_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + EnumPropertyItem *item= NULL, item_tmp; + int totitem= 0; + int i= 0; + Group *group; + + if(C==NULL) + return NULL; + + memset(&item_tmp, 0, sizeof(item_tmp)); + + for(group= CTX_data_main(C)->group.first; group; group= group->id.next) { + item_tmp.identifier= item_tmp.name= group->id.name+2; + item_tmp.value= i++; + RNA_enum_item_add(&item, &totitem, &item_tmp); + } + + if(i>0) { + *free= 1; + return item; + } + else { + return NULL; + } +} + +static int group_instance_add_exec(bContext *C, wmOperator *op) +{ + /* XXX, using an enum for library lookups is a bit dodgy */ + Group *group= BLI_findlink(&CTX_data_main(C)->group, RNA_enum_get(op->ptr, "type")); + + if(group) { + Object *ob= object_add_type(C, OB_EMPTY); + rename_id(&ob->id, group->id.name+2); + ob->dup_group= group; + ob->transflag |= OB_DUPLIGROUP; + id_us_plus(&group->id); + + + WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob); + + return OPERATOR_FINISHED; + } + + return OPERATOR_CANCELLED; +} + +/* only used as menu */ +void OBJECT_OT_group_instance_add(wmOperatorType *ot) +{ + PropertyRNA *prop; + static EnumPropertyItem prop_group_dummy_types[] = { + {0, NULL, 0, NULL, NULL} + }; + + /* identifiers */ + ot->name= "Add Group Instance"; + ot->description = "Add a dupligroup instance."; + ot->idname= "OBJECT_OT_group_instance_add"; + + /* api callbacks */ + ot->exec= group_instance_add_exec; + + ot->poll= ED_operator_scene_editable; + + /* flags */ + ot->flag= 0; + + /* properties */ + prop= RNA_def_enum(ot->srna, "type", prop_group_dummy_types, 0, "Type", ""); + RNA_def_enum_funcs(prop, add_dupligroup_itemf); +} + /**************************** Delete Object *************************/ /* remove base from a specific scene */ Modified: trunk/blender/source/blender/editors/object/object_intern.h =================================================================== --- trunk/blender/source/blender/editors/object/object_intern.h 2009-10-07 13:22:56 UTC (rev 23688) +++ trunk/blender/source/blender/editors/object/object_intern.h 2009-10-07 14:40:27 UTC (rev 23689) @@ -92,6 +92,7 @@ void OBJECT_OT_lamp_add(struct wmOperatorType *ot); void OBJECT_OT_primitive_add(struct wmOperatorType *ot); /* only used as menu */ void OBJECT_OT_effector_add(struct wmOperatorType *ot); +void OBJECT_OT_group_instance_add(struct wmOperatorType *ot); void OBJECT_OT_duplicates_make_real(struct wmOperatorType *ot); void OBJECT_OT_duplicate(struct wmOperatorType *ot); Modified: trunk/blender/source/blender/editors/object/object_ops.c =================================================================== --- trunk/blender/source/blender/editors/object/object_ops.c 2009-10-07 13:22:56 UTC (rev 23688) +++ trunk/blender/source/blender/editors/object/object_ops.c 2009-10-07 14:40:27 UTC (rev 23689) @@ -118,6 +118,7 @@ WM_operatortype_append(OBJECT_OT_lamp_add); WM_operatortype_append(OBJECT_OT_add); WM_operatortype_append(OBJECT_OT_effector_add); + WM_operatortype_append(OBJECT_OT_group_instance_add); WM_operatortype_append(OBJECT_OT_primitive_add); WM_operatortype_append(OBJECT_OT_mesh_add); WM_operatortype_append(OBJECT_OT_metaball_add); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs