[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12708] trunk/blender/source/blender: Small material assigning feature:

Ton Roosendaal ton at blender.org
Wed Nov 28 19:43:09 CET 2007


Revision: 12708
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12708
Author:   ton
Date:     2007-11-28 19:43:09 +0100 (Wed, 28 Nov 2007)

Log Message:
-----------
Small material assigning feature:

in EditButtons, panel "Links and Materials", there's now a browse button
to directly assign a material to selected faces. It does:

- check if material was already in one of the 'slots' of the object
- if so, then use this as index to assign
- if not, then add a new slot, and assign the new index

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_material.h
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/include/butspace.h
    trunk/blender/source/blender/src/buttons_editing.c

Modified: trunk/blender/source/blender/blenkernel/BKE_material.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_material.h	2007-11-28 15:26:02 UTC (rev 12707)
+++ trunk/blender/source/blender/blenkernel/BKE_material.h	2007-11-28 18:43:09 UTC (rev 12708)
@@ -57,6 +57,9 @@
 void assign_material(struct Object *ob, struct Material *ma, int act);
 void new_material_to_objectdata(struct Object *ob);
 
+int find_material_index(struct Object *ob, struct Material *ma);
+
+
 void init_render_material(struct Material *, int, float *);
 void init_render_materials(int, float *);
 void end_render_material(struct Material *);

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2007-11-28 15:26:02 UTC (rev 12707)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2007-11-28 18:43:09 UTC (rev 12708)
@@ -581,6 +581,26 @@
 	test_object_materials(ob->data);
 }
 
+int find_material_index(Object *ob, Material *ma)
+{
+	Material ***matarar;
+	short a, *totcolp;
+	
+	if(ma==NULL) return 0;
+	
+	totcolp= give_totcolp(ob);
+	matarar= give_matarar(ob);
+	
+	if(totcolp==NULL || matarar==NULL) return 0;
+	
+	for(a=0; a<*totcolp; a++)
+		if((*matarar)[a]==ma)
+		   break;
+	if(a<*totcolp)
+		return a+1;
+	return 0;	   
+}
+
 void new_material_to_objectdata(Object *ob)
 {
 	Material *ma;

Modified: trunk/blender/source/blender/include/butspace.h
===================================================================
--- trunk/blender/source/blender/include/butspace.h	2007-11-28 15:26:02 UTC (rev 12707)
+++ trunk/blender/source/blender/include/butspace.h	2007-11-28 18:43:09 UTC (rev 12708)
@@ -370,6 +370,7 @@
 #define B_DOCENTER		2015
 #define B_DOCENTERNEW		2016
 #define B_DOCENTERCURSOR	2017
+#define B_MATASS_BROWSE	2018
 
 	/* 20 values! */
 #define B_OBLAY			2019
@@ -381,6 +382,7 @@
 #define B_PREVKEY		2045
 #define B_NEXTKEY		2046
 #define B_LOCKKEY		2047
+#define B_MATCOL2		2048
 
 #define B_MESHBUTS		2090
 

Modified: trunk/blender/source/blender/src/buttons_editing.c
===================================================================
--- trunk/blender/source/blender/src/buttons_editing.c	2007-11-28 15:26:02 UTC (rev 12707)
+++ trunk/blender/source/blender/src/buttons_editing.c	2007-11-28 18:43:09 UTC (rev 12708)
@@ -141,6 +141,7 @@
 #include "BKE_DerivedMesh.h"
 #include "BKE_effect.h"
 #include "BKE_font.h"
+#include "BKE_icons.h"
 #include "BKE_image.h"
 #include "BKE_ipo.h"
 #include "BKE_lattice.h"
@@ -388,6 +389,7 @@
 	EditFace *efa;
 	Base *base;
 	Object *ob= OBACT;
+	Material *ma;
 	Nurb *nu;
 	Curve *cu;
 	BezTriple *bezt;
@@ -400,8 +402,7 @@
 	case B_MATWICH:
 		if(G.obedit && G.obedit->actcol>0) {
 			if(G.obedit->type == OB_MESH) {
-				efa= em->faces.first;
-				while(efa) {
+				for(efa= em->faces.first; efa; efa= efa->next) {
 					if(efa->f & SELECT) {
 						if(index== -1) index= efa->mat_nr;
 						else if(index!=efa->mat_nr) {
@@ -476,6 +477,30 @@
 			BIF_undo_push("Assign material index");
 		}
 		break;
+	case B_MATASS_BROWSE:
+		/* if slot available, make that index active, and assign */
+		/* else, make new slot, and assign */
+		ma= BLI_findlink(&G.main->mat, G.buts->menunr-1);
+		if(ma) {
+			ob->actcol= find_material_index(ob, ma);
+			if(ob->actcol==0) {
+				assign_material(ob, ma, ob->totcol);
+				ob->actcol= ob->totcol;
+			}
+		}
+		else {
+			do_common_editbuts(B_MATNEW);
+		}
+		do_common_editbuts(B_MATASS);
+		break;
+		
+	case B_MATCOL2:
+		ma= give_current_material(ob, ob->actcol);
+		BKE_icon_changed(BKE_icon_getid((ID *)ma));
+		allqueue(REDRAWVIEW3D, 0);
+		allqueue(REDRAWBUTSEDIT, 0);
+		break;
+		
 	case B_MATSEL:
 	case B_MATDESEL:
 		if(G.obedit) {
@@ -4904,23 +4929,30 @@
 	if(ob->totcol) min= 1.0; else min= 0.0;
 	ma= give_current_material(ob, ob->actcol);
 
-	if(ma) uiDefBut(block, LABEL, 0, ma->id.name+2, 318,153, 103, 20, 0, 0, 0, 0, 0, "");
+	if(G.obedit) {
+		char *str= NULL;
+		IDnames_to_pupstring(&str, NULL, "ADD NEW %x 32767", &G.main->mat, NULL, NULL);
+		uiDefButS(block, MENU, B_MATASS_BROWSE, str, 292,150,20,20, &G.buts->menunr, 0, 0, 0, 0, "Browses existing choices and assign");
+		MEM_freeN(str);
+	}
+	
+	if(ma) uiDefBut(block, LABEL, 0, ma->id.name+2, 318,150, 103, 20, 0, 0, 0, 0, 0, "");
 
 	uiBlockBeginAlign(block);
-	if(ma) uiDefButF(block, COL, B_REDR, "",			292,123,31,30, &(ma->r), 0, 0, 0, 0, "");
-	uiDefButC(block, NUM, B_ACTCOL,	str,		324,123,100,30, &ob->actcol, min, (float)(ob->totcol), 0, 0, "Displays total number of material indices and the current index");
-	uiDefBut(block, BUT,B_MATWICH,	"?",		424,123,30,30, 0, 0, 0, 0, 0, "In EditMode, sets the active material index from selected faces");
+	if(ma) uiDefButF(block, COL, B_MATCOL2, "",	292,113,31,30, &(ma->r), 0, 0, 0, 0, "");
+	uiDefButC(block, NUM, B_ACTCOL,	str,		324,113,100,30, &ob->actcol, min, (float)(ob->totcol), 0, 0, "Displays total number of material indices and the current index");
+	uiDefBut(block, BUT,B_MATWICH,	"?",		424,113,30,30, 0, 0, 0, 0, 0, "In EditMode, sets the active material index from selected faces");
 
 	uiBlockBeginAlign(block);
-	uiDefBut(block, BUT,B_MATNEW,	"New",		292,98,80,20, 0, 0, 0, 0, 0, "Adds a new Material index");
-	uiDefBut(block, BUT,B_MATDEL,	"Delete",	374,98,80,20, 0, 0, 0, 0, 0, "Deletes this Material index");
-	uiDefBut(block, BUT,B_MATSEL,	"Select",	292,76,80,20, 0, 0, 0, 0, 0, "In EditMode, selects faces that have the active index");
-	uiDefBut(block, BUT,B_MATDESEL,	"Deselect",	374,76,80,20, 0, 0, 0, 0, 0, "Deselects everything with current indexnumber");
-	uiDefBut(block, BUT,B_MATASS,	"Assign",	292,47,162,26, 0, 0, 0, 0, 0, "In EditMode, assigns the active index to selected faces");
+	uiDefBut(block, BUT,B_MATNEW,	"New",		292,90,80,20, 0, 0, 0, 0, 0, "Adds a new Material index");
+	uiDefBut(block, BUT,B_MATDEL,	"Delete",	372,90,80,20, 0, 0, 0, 0, 0, "Deletes this Material index");
+	uiDefBut(block, BUT,B_MATSEL,	"Select",	292,70,80,20, 0, 0, 0, 0, 0, "In EditMode, selects faces that have the active index");
+	uiDefBut(block, BUT,B_MATDESEL,	"Deselect",	372,70,80,20, 0, 0, 0, 0, 0, "Deselects everything with current indexnumber");
+	uiDefBut(block, BUT,B_MATASS,	"Assign",	292,50,160,20, 0, 0, 0, 0, 0, "In EditMode, assigns the active index to selected faces");
 
 	uiBlockBeginAlign(block);
-	uiDefBut(block, BUT,B_SETSMOOTH,"Set Smooth",	291,15,80,20, 0, 0, 0, 0, 0, "In EditMode, sets 'smooth' rendering of selected faces");
-	uiDefBut(block, BUT,B_SETSOLID,	"Set Solid",	373,15,80,20, 0, 0, 0, 0, 0, "In EditMode, sets 'solid' rendering of selected faces");
+	uiDefBut(block, BUT,B_SETSMOOTH,"Set Smooth",	292,15,80,20, 0, 0, 0, 0, 0, "In EditMode, sets 'smooth' rendering of selected faces");
+	uiDefBut(block, BUT,B_SETSOLID,	"Set Solid",	372,15,80,20, 0, 0, 0, 0, 0, "In EditMode, sets 'solid' rendering of selected faces");
 
 	uiBlockEndAlign(block);
 





More information about the Bf-blender-cvs mailing list