[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43828] trunk/blender/source/blender: Fix #30045: mesh.uv_textures.new() not returning correct layer when a layer with

Brecht Van Lommel brechtvanlommel at pandora.be
Wed Feb 1 19:25:14 CET 2012


Revision: 43828
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43828
Author:   blendix
Date:     2012-02-01 18:25:13 +0000 (Wed, 01 Feb 2012)
Log Message:
-----------
Fix #30045: mesh.uv_textures.new() not returning correct layer when a layer with
the requested name already exists.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mesh/mesh_data.c
    trunk/blender/source/blender/makesrna/intern/rna_mesh.c

Modified: trunk/blender/source/blender/editors/mesh/mesh_data.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_data.c	2012-02-01 18:25:01 UTC (rev 43827)
+++ trunk/blender/source/blender/editors/mesh/mesh_data.c	2012-02-01 18:25:13 UTC (rev 43828)
@@ -183,7 +183,7 @@
 
 		layernum= CustomData_number_of_layers(&em->fdata, CD_MTFACE);
 		if(layernum >= MAX_MTFACE)
-			return 0;
+			return -1;
 
 		EM_add_data_layer(em, &em->fdata, CD_MTFACE, name);
 
@@ -196,7 +196,7 @@
 	else {
 		layernum= CustomData_number_of_layers(&me->fdata, CD_MTFACE);
 		if(layernum >= MAX_MTFACE)
-			return 0;
+			return -1;
 
 		if(me->mtface)
 			CustomData_add_layer_named(&me->fdata, CD_MTFACE, CD_DUPLICATE, me->mtface, me->totface, name);
@@ -212,7 +212,7 @@
 	DAG_id_tag_update(&me->id, 0);
 	WM_event_add_notifier(C, NC_GEOM|ND_DATA, me);
 
-	return 1;
+	return layernum;
 }
 
 int ED_mesh_uv_texture_remove(bContext *C, Object *ob, Mesh *me)
@@ -244,7 +244,7 @@
 
 		layernum= CustomData_number_of_layers(&em->fdata, CD_MCOL);
 		if(layernum >= MAX_MCOL)
-			return 0;
+			return -1;
 
 		EM_add_data_layer(em, &em->fdata, CD_MCOL, name);
 
@@ -257,7 +257,7 @@
 	else {
 		layernum= CustomData_number_of_layers(&me->fdata, CD_MCOL);
 		if(layernum >= MAX_MCOL)
-			return 0;
+			return -1;
 
 		if(me->mcol)
 			CustomData_add_layer_named(&me->fdata, CD_MCOL, CD_DUPLICATE, me->mcol, me->totface, name);
@@ -273,7 +273,7 @@
 	DAG_id_tag_update(&me->id, 0);
 	WM_event_add_notifier(C, NC_GEOM|ND_DATA, me);
 
-	return 1;
+	return layernum;
 }
 
 int ED_mesh_color_remove(bContext *C, Object *ob, Mesh *me)
@@ -328,7 +328,7 @@
 	Object *ob= ED_object_context(C);
 	Mesh *me= ob->data;
 
-	if(!ED_mesh_uv_texture_add(C, me, NULL, TRUE))
+	if(ED_mesh_uv_texture_add(C, me, NULL, TRUE) == -1)
 		return OPERATOR_CANCELLED;
 
 	return OPERATOR_FINISHED;
@@ -467,7 +467,7 @@
 	Object *ob= ED_object_context(C);
 	Mesh *me= ob->data;
 
-	if(!ED_mesh_color_add(C, scene, ob, me, NULL, TRUE))
+	if(ED_mesh_color_add(C, scene, ob, me, NULL, TRUE) == -1)
 		return OPERATOR_CANCELLED;
 
 	return OPERATOR_FINISHED;

Modified: trunk/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2012-02-01 18:25:01 UTC (rev 43827)
+++ trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2012-02-01 18:25:13 UTC (rev 43828)
@@ -27,6 +27,7 @@
 
 #include <stdlib.h>
 
+#include "RNA_access.h"
 #include "RNA_define.h"
 
 #include "rna_internal.h"
@@ -1132,22 +1133,25 @@
 	return me->edit_mesh ? me->edit_mesh->totfacesel : 0;
 }
 
-static CustomDataLayer *rna_Mesh_vertex_color_new(struct Mesh *me, struct bContext *C, const char *name)
+static PointerRNA rna_Mesh_vertex_color_new(struct Mesh *me, struct bContext *C, const char *name)
 {
+	PointerRNA ptr;
 	CustomData *fdata;
 	CustomDataLayer *cdl= NULL;
-	int index;
+	int index= ED_mesh_color_add(C, NULL, NULL, me, name, FALSE);
 
-	if(ED_mesh_color_add(C, NULL, NULL, me, name, FALSE)) {
+	if(index != -1) {
 		fdata= rna_mesh_fdata(me);
-		index= CustomData_get_named_layer_index(fdata, CD_MCOL, name);
-		cdl= (index == -1)? NULL: &fdata->layers[index];
+		cdl= &fdata->layers[CustomData_get_layer_index_n(fdata, CD_MCOL, index)];
 	}
-	return cdl;
+
+	RNA_pointer_create(&me->id, &RNA_MeshColorLayer, cdl, &ptr);
+	return ptr;
 }
 
-static CustomDataLayer *rna_Mesh_int_property_new(struct Mesh *me, struct bContext *C, const char *name)
+static PointerRNA rna_Mesh_int_property_new(struct Mesh *me, struct bContext *C, const char *name)
 {
+	PointerRNA ptr;
 	CustomDataLayer *cdl = NULL;
 	int index;
 
@@ -1156,11 +1160,13 @@
 
 	cdl = (index == -1) ? NULL : &(me->fdata.layers[index]);
 
-	return cdl;
+	RNA_pointer_create(&me->id, &RNA_MeshIntPropertyLayer, cdl, &ptr);
+	return ptr;
 }
 
-static CustomDataLayer *rna_Mesh_float_property_new(struct Mesh *me, struct bContext *C, const char *name)
+static PointerRNA rna_Mesh_float_property_new(struct Mesh *me, struct bContext *C, const char *name)
 {
+	PointerRNA ptr;
 	CustomDataLayer *cdl = NULL;
 	int index;
 
@@ -1169,11 +1175,13 @@
 
 	cdl = (index == -1) ? NULL : &(me->fdata.layers[index]);
 
-	return cdl;
+	RNA_pointer_create(&me->id, &RNA_MeshFloatPropertyLayer, cdl, &ptr);
+	return ptr;
 }
 
-static CustomDataLayer *rna_Mesh_string_property_new(struct Mesh *me, struct bContext *C, const char *name)
+static PointerRNA rna_Mesh_string_property_new(struct Mesh *me, struct bContext *C, const char *name)
 {
+	PointerRNA ptr;
 	CustomDataLayer *cdl = NULL;
 	int index;
 
@@ -1182,21 +1190,24 @@
 
 	cdl = (index == -1) ? NULL : &(me->fdata.layers[index]);
 
-	return cdl;
+	RNA_pointer_create(&me->id, &RNA_MeshStringPropertyLayer, cdl, &ptr);
+	return ptr;
 }
 
-static CustomDataLayer *rna_Mesh_uv_texture_new(struct Mesh *me, struct bContext *C, const char *name)
+static PointerRNA rna_Mesh_uv_texture_new(struct Mesh *me, struct bContext *C, const char *name)
 {
+	PointerRNA ptr;
 	CustomData *fdata;
 	CustomDataLayer *cdl= NULL;
-	int index;
+	int index= ED_mesh_uv_texture_add(C, me, name, FALSE);
 
-	if(ED_mesh_uv_texture_add(C, me, name, FALSE)) {
+	if(index != -1) {
 		fdata= rna_mesh_fdata(me);
-		index= CustomData_get_named_layer_index(fdata, CD_MTFACE, name);
-		cdl= (index == -1)? NULL: &fdata->layers[index];
+		cdl= &fdata->layers[CustomData_get_layer_index_n(fdata, CD_MTFACE, index)];
 	}
-	return cdl;
+
+	RNA_pointer_create(&me->id, &RNA_MeshTextureFaceLayer, cdl, &ptr);
+	return ptr;
 }
 
 #else
@@ -1783,6 +1794,7 @@
 	RNA_def_function_ui_description(func, "Add a vertex color layer to Mesh");
 	RNA_def_string(func, "name", "Col", 0, "", "Vertex color name");
 	parm= RNA_def_pointer(func, "layer", "MeshColorLayer", "", "The newly created layer");
+	RNA_def_property_flag(parm, PROP_RNAPTR);
 	RNA_def_function_return(func, parm);
 	
 /*
@@ -1823,6 +1835,7 @@
 	RNA_def_function_ui_description(func, "Add a integer property layer to Mesh");
 	RNA_def_string(func, "name", "Int Prop", 0, "",  "Int property name");
 	parm= RNA_def_pointer(func, "layer", "MeshIntPropertyLayer", "", "The newly created layer");
+	RNA_def_property_flag(parm, PROP_RNAPTR);
 	RNA_def_function_return(func, parm);
 }
 
@@ -1844,6 +1857,7 @@
 	RNA_def_function_ui_description(func, "Add a float property layer to Mesh");
 	RNA_def_string(func, "name", "Float Prop", 0, "", "Float property name");
 	parm= RNA_def_pointer(func, "layer", "MeshFloatPropertyLayer", "", "The newly created layer");
+	RNA_def_property_flag(parm, PROP_RNAPTR);
 	RNA_def_function_return(func, parm);
 }
 
@@ -1865,6 +1879,7 @@
 	RNA_def_function_ui_description(func, "Add a string property layer to Mesh");
 	RNA_def_string(func, "name", "String Prop", 0, "", "String property name");
 	parm= RNA_def_pointer(func, "layer", "MeshStringPropertyLayer", "", "The newly created layer");
+	RNA_def_property_flag(parm, PROP_RNAPTR);
 	RNA_def_function_return(func, parm);
 }
 
@@ -1887,6 +1902,7 @@
 	RNA_def_function_ui_description(func, "Add a UV texture layer to Mesh");
 	RNA_def_string(func, "name", "UVMap", 0, "", "UV map name");
 	parm= RNA_def_pointer(func, "layer", "MeshTextureFaceLayer", "", "The newly created layer");
+	RNA_def_property_flag(parm, PROP_RNAPTR);
 	RNA_def_function_return(func, parm);
 
 /*




More information about the Bf-blender-cvs mailing list