[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23693] trunk/blender: copy icon in the material buttons list view so you can copy the current set of materials to other selected objects , (like Ctrl+L, Materials in 2.4x)

Campbell Barton ideasman42 at gmail.com
Wed Oct 7 18:32:55 CEST 2009


Revision: 23693
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23693
Author:   campbellbarton
Date:     2009-10-07 18:32:55 +0200 (Wed, 07 Oct 2009)

Log Message:
-----------
copy icon in the material buttons list view so you can copy the current set of materials to other selected objects, (like Ctrl+L, Materials in 2.4x)

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/buttons_material.py
    trunk/blender/source/blender/blenkernel/BKE_material.h
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/editors/render/render_intern.h
    trunk/blender/source/blender/editors/render/render_ops.c
    trunk/blender/source/blender/editors/render/render_shading.c

Modified: trunk/blender/release/scripts/ui/buttons_material.py
===================================================================
--- trunk/blender/release/scripts/ui/buttons_material.py	2009-10-07 16:10:06 UTC (rev 23692)
+++ trunk/blender/release/scripts/ui/buttons_material.py	2009-10-07 16:32:55 UTC (rev 23693)
@@ -59,6 +59,7 @@
 			col = row.column(align=True)
 			col.itemO("object.material_slot_add", icon='ICON_ZOOMIN', text="")
 			col.itemO("object.material_slot_remove", icon='ICON_ZOOMOUT', text="")
+			col.itemO("object.material_slot_copy", icon='ICON_COPYDOWN', text="")
 
 			if ob.mode == 'EDIT':
 				row = layout.row(align=True)

Modified: trunk/blender/source/blender/blenkernel/BKE_material.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_material.h	2009-10-07 16:10:06 UTC (rev 23692)
+++ trunk/blender/source/blender/blenkernel/BKE_material.h	2009-10-07 16:32:55 UTC (rev 23693)
@@ -58,6 +58,7 @@
 struct Material *give_current_material(struct Object *ob, int act);
 struct ID *material_from(struct Object *ob, int act);
 void assign_material(struct Object *ob, struct Material *ma, int act);
+void assign_matarar(struct Object *ob, struct Material ***matar, int totcol);
 
 int find_material_index(struct Object *ob, struct Material *ma);
 

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2009-10-07 16:10:06 UTC (rev 23692)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2009-10-07 16:32:55 UTC (rev 23693)
@@ -625,6 +625,25 @@
 	test_object_materials(ob->data);
 }
 
+/* XXX - this calls many more update calls per object then are needed, could be optimized */
+void assign_matarar(struct Object *ob, struct Material ***matar, int totcol)
+{
+	int i, actcol_orig= ob->actcol;
+
+	while(ob->totcol)
+		object_remove_material_slot(ob);
+
+	/* now we have the right number of slots */
+	for(i=0; i<totcol; i++)
+		assign_material(ob, (*matar)[i], i+1);
+
+	if(actcol_orig > ob->totcol)
+		actcol_orig= ob->totcol;
+
+	ob->actcol= actcol_orig;
+}
+
+
 int find_material_index(Object *ob, Material *ma)
 {
 	Material ***matarar;

Modified: trunk/blender/source/blender/editors/render/render_intern.h
===================================================================
--- trunk/blender/source/blender/editors/render/render_intern.h	2009-10-07 16:10:06 UTC (rev 23692)
+++ trunk/blender/source/blender/editors/render/render_intern.h	2009-10-07 16:32:55 UTC (rev 23693)
@@ -37,6 +37,7 @@
 void OBJECT_OT_material_slot_assign(struct wmOperatorType *ot);
 void OBJECT_OT_material_slot_select(struct wmOperatorType *ot);
 void OBJECT_OT_material_slot_deselect(struct wmOperatorType *ot);
+void OBJECT_OT_material_slot_copy(struct wmOperatorType *ot);
 
 void MATERIAL_OT_new(struct wmOperatorType *ot);
 void TEXTURE_OT_new(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/render/render_ops.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_ops.c	2009-10-07 16:10:06 UTC (rev 23692)
+++ trunk/blender/source/blender/editors/render/render_ops.c	2009-10-07 16:32:55 UTC (rev 23693)
@@ -43,6 +43,7 @@
 	WM_operatortype_append(OBJECT_OT_material_slot_assign);
 	WM_operatortype_append(OBJECT_OT_material_slot_select);
 	WM_operatortype_append(OBJECT_OT_material_slot_deselect);
+	WM_operatortype_append(OBJECT_OT_material_slot_copy);
 
 	WM_operatortype_append(MATERIAL_OT_new);
 	WM_operatortype_append(TEXTURE_OT_new);

Modified: trunk/blender/source/blender/editors/render/render_shading.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_shading.c	2009-10-07 16:10:06 UTC (rev 23692)
+++ trunk/blender/source/blender/editors/render/render_shading.c	2009-10-07 16:32:55 UTC (rev 23693)
@@ -431,6 +431,44 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 }
 
+
+static int material_slot_copy_exec(bContext *C, wmOperator *op)
+{
+	Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
+	Material ***matar;
+
+	if(!ob || !(matar= give_matarar(ob)))
+		return OPERATOR_CANCELLED;
+
+	CTX_DATA_BEGIN(C, Object*, ob_iter, selected_editable_objects) {
+		if(ob != ob_iter && give_matarar(ob_iter)) {
+			assign_matarar(ob_iter, matar, ob->totcol);
+			if(ob_iter->totcol==ob->totcol) {
+				ob_iter->actcol= ob->actcol;
+				WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob_iter);
+			}
+		}
+	}
+	CTX_DATA_END;
+
+	return OPERATOR_FINISHED;
+}
+
+
+void OBJECT_OT_material_slot_copy(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Copy Material to Others";
+	ot->idname= "OBJECT_OT_material_slot_copy";
+	ot->description="Copies materials to other selected objects.";
+
+	/* api callbacks */
+	ot->exec= material_slot_copy_exec;
+
+	/* flags */
+	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
 /********************** new material operator *********************/
 
 static int new_material_exec(bContext *C, wmOperator *op)





More information about the Bf-blender-cvs mailing list