[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