[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38881] trunk/blender/source/blender: fix for material slot removal (r38879)

Campbell Barton ideasman42 at gmail.com
Sun Jul 31 14:43:41 CEST 2011


Revision: 38881
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38881
Author:   campbellbarton
Date:     2011-07-31 12:43:41 +0000 (Sun, 31 Jul 2011)
Log Message:
-----------
fix for material slot removal (r38879)
- The object ID was being passed to the data_delete_material_index_id() from object_remove_material_slot(), rather then the object data. (so the material slot fix wouldnt run in that case).
- add support for fixing text object materials too.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38879

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_curve.h
    trunk/blender/source/blender/blenkernel/intern/curve.c
    trunk/blender/source/blender/blenkernel/intern/material.c
    trunk/blender/source/blender/makesrna/intern/rna_ID.c

Modified: trunk/blender/source/blender/blenkernel/BKE_curve.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_curve.h	2011-07-31 11:21:48 UTC (rev 38880)
+++ trunk/blender/source/blender/blenkernel/BKE_curve.h	2011-07-31 12:43:41 UTC (rev 38881)
@@ -115,5 +115,6 @@
 int curve_center_median(struct Curve *cu, float cent[3]);
 int curve_center_bounds(struct Curve *cu, float cent[3]);
 void curve_translate(struct Curve *cu, float offset[3], int do_keys);
+void curve_delete_material_index(struct Curve *cu, int index);
 #endif
 

Modified: trunk/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/curve.c	2011-07-31 11:21:48 UTC (rev 38880)
+++ trunk/blender/source/blender/blenkernel/intern/curve.c	2011-07-31 12:43:41 UTC (rev 38881)
@@ -3259,3 +3259,28 @@
 		}
 	}
 }
+
+void curve_delete_material_index(Curve *cu, int index)
+{
+	const int curvetype= curve_type(cu);
+
+	if(curvetype == OB_FONT) {
+		struct CharInfo *info= cu->strinfo;
+		int i;
+		for(i= cu->len-1; i >= 0; i--, info++) {
+			if (info->mat_nr && info->mat_nr>=index) {
+				info->mat_nr--;
+			}
+		}
+	}
+	else {
+		Nurb *nu;
+
+		for (nu= cu->nurb.first; nu; nu= nu->next) {
+			if(nu->mat_nr && nu->mat_nr>=index) {
+				nu->mat_nr--;
+				if (curvetype == OB_CURVE) nu->charidx--;
+			}
+		}
+	}
+}

Modified: trunk/blender/source/blender/blenkernel/intern/material.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/material.c	2011-07-31 11:21:48 UTC (rev 38880)
+++ trunk/blender/source/blender/blenkernel/intern/material.c	2011-07-31 12:43:41 UTC (rev 38881)
@@ -517,32 +517,16 @@
 
 void data_delete_material_index_id(ID *id, int index)
 {
-	Mesh *me;
-	Curve *cu;
-	Nurb *nu;
-	int curvetype;
-
 	switch(GS(id->name)) {
 	case ID_ME:
-		me=(Mesh *)id;
-		mesh_delete_material_index(me, index);
+		mesh_delete_material_index((Mesh *)id, index);
 		break;
 	case ID_CU:
-		cu= (Curve *)id;
-		nu= cu->nurb.first;
-
-		curvetype=curve_type(cu);
-		if (!ELEM(curvetype, OB_CURVE, OB_SURF))
-			return;
-		
-		while (nu) {
-			if(nu->mat_nr && nu->mat_nr>=index) {
-				nu->mat_nr--;
-				if (curvetype == OB_CURVE) nu->charidx--;
-			}
-			nu= nu->next;
-		}
+		curve_delete_material_index((Curve *)id, index);
 		break;
+	case ID_MB:
+		/* meta-elems dont have materials atm */
+		break;
 	}
 }
 
@@ -1124,8 +1108,8 @@
 	}
 
 	/* check indices from mesh */
-	if (ELEM3(ob->type, OB_MESH, OB_CURVE, OB_SURF)) {
-		data_delete_material_index_id(&ob->id, actcol-1);
+	if (ELEM4(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT)) {
+		data_delete_material_index_id((ID *)ob->data, actcol-1);
 		freedisplist(&ob->disp);
 	}
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_ID.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_ID.c	2011-07-31 11:21:48 UTC (rev 38880)
+++ trunk/blender/source/blender/makesrna/intern/rna_ID.c	2011-07-31 12:43:41 UTC (rev 38881)
@@ -35,6 +35,7 @@
 
 #include "DNA_ID.h"
 #include "DNA_vfont_types.h"
+#include "DNA_material_types.h"
 #include "DNA_object_types.h"
 
 #include "WM_types.h"
@@ -416,9 +417,9 @@
 	
 	func= RNA_def_function(srna, "pop", "material_pop_id");
 	RNA_def_function_ui_description(func, "Remove a material from the data block.");
-	parm= RNA_def_int(func, "index", 0, 0, INT_MAX, "", "Index of material to remove.", 0, INT_MAX);
+	parm= RNA_def_int(func, "index", 0, 0, MAXMAT, "", "Index of material to remove.", 0, MAXMAT);
 	RNA_def_property_flag(parm, PROP_REQUIRED);
-	RNA_def_boolean(func, "remove_material_slot", 1, "", "Remove the material slot and assign 1st material to old faces.");
+	RNA_def_boolean(func, "update_data", 0, "", "Update data by re-adjusting the material slots assigned.");
 	parm= RNA_def_pointer(func, "material", "Material", "", "Material to remove.");
 	RNA_def_function_return(func, parm);
 }




More information about the Bf-blender-cvs mailing list