[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23689] trunk/blender/source/blender/ editors/object: 'Add Group' back in the add object menu

Campbell Barton ideasman42 at gmail.com
Wed Oct 7 16:40:28 CEST 2009


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);





More information about the Bf-blender-cvs mailing list