[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55482] trunk/blender/source: python api: add functionality to remove uv-texture layers.

Campbell Barton ideasman42 at gmail.com
Thu Mar 21 21:54:49 CET 2013


Revision: 55482
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55482
Author:   campbellbarton
Date:     2013-03-21 20:54:48 +0000 (Thu, 21 Mar 2013)
Log Message:
-----------
python api: add functionality to remove uv-texture layers.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_mesh.h
    trunk/blender/source/blender/editors/mesh/mesh_data.c
    trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c
    trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    trunk/blender/source/blender/makesrna/intern/rna_mesh.c
    trunk/blender/source/blenderplayer/bad_level_call_stubs/stubs.c

Modified: trunk/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_mesh.h	2013-03-21 20:31:09 UTC (rev 55481)
+++ trunk/blender/source/blender/editors/include/ED_mesh.h	2013-03-21 20:54:48 UTC (rev 55482)
@@ -254,11 +254,13 @@
 void ED_mesh_material_link(struct Mesh *me, struct Material *ma);
 void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges, int calc_tessface);
 
-int ED_mesh_uv_texture_add(struct bContext *C, struct Mesh *me, const char *name, int active_set);
-int ED_mesh_uv_texture_remove(struct bContext *C, struct Object *ob, struct Mesh *me);
+int ED_mesh_uv_texture_add(struct Mesh *me, const char *name, const bool active_set);
+bool ED_mesh_uv_texture_remove_index(struct Mesh *me, const int n);
+bool ED_mesh_uv_texture_remove_active(struct Mesh *me);
+bool ED_mesh_uv_texture_remove_named(struct Mesh *me, const char *name);
 int ED_mesh_uv_loop_reset(struct bContext *C, struct Mesh *me);
 int ED_mesh_uv_loop_reset_ex(struct Mesh *me, const int layernum);
-int ED_mesh_color_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me, const char *name, int active_set);
+int ED_mesh_color_add(struct Mesh *me, const char *name, const bool active_set);
 bool ED_mesh_color_remove_index(struct Mesh *me, const int n);
 bool ED_mesh_color_remove_active(struct Mesh *me);
 bool ED_mesh_color_remove_named(struct Mesh *me, const char *name);

Modified: trunk/blender/source/blender/editors/mesh/mesh_data.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_data.c	2013-03-21 20:31:09 UTC (rev 55481)
+++ trunk/blender/source/blender/editors/mesh/mesh_data.c	2013-03-21 20:54:48 UTC (rev 55482)
@@ -340,7 +340,7 @@
 }
 
 /* note: keep in sync with ED_mesh_color_add */
-int ED_mesh_uv_texture_add(bContext *C, Mesh *me, const char *name, int active_set)
+int ED_mesh_uv_texture_add(Mesh *me, const char *name, const bool active_set)
 {
 	BMEditMesh *em;
 	int layernum_dst;
@@ -411,37 +411,68 @@
 	}
 
 	DAG_id_tag_update(&me->id, 0);
-	WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
+	WM_main_add_notifier(NC_GEOM | ND_DATA, me);
 
 	return layernum_dst;
 }
 
-int ED_mesh_uv_texture_remove(bContext *C, Object *ob, Mesh *me)
+bool ED_mesh_uv_texture_remove_index(Mesh *me, const int n)
 {
 	CustomData *pdata = GET_CD_DATA(me, pdata), *ldata = GET_CD_DATA(me, ldata);
 	CustomDataLayer *cdlp, *cdlu;
 	int index;
 
-	index = CustomData_get_active_layer_index(pdata, CD_MTEXPOLY);
+	index = CustomData_get_layer_index_n(pdata, CD_MTEXPOLY, n);
 	cdlp = (index == -1) ? NULL : &pdata->layers[index];
 
-	index = CustomData_get_active_layer_index(ldata, CD_MLOOPUV);
+	index = CustomData_get_layer_index_n(ldata, CD_MLOOPUV, n);
 	cdlu = (index == -1) ? NULL : &ldata->layers[index];
-	
+
 	if (!cdlp || !cdlu)
-		return 0;
+		return false;
 
-	delete_customdata_layer(ob->data, cdlp);
-	delete_customdata_layer(ob->data, cdlu);
-	
+	delete_customdata_layer(me, cdlp);
+	delete_customdata_layer(me, cdlu);
+
 	DAG_id_tag_update(&me->id, 0);
-	WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
+	WM_main_add_notifier(NC_GEOM | ND_DATA, me);
 
-	return 1;
+	return true;
 }
+bool ED_mesh_uv_texture_remove_active(Mesh *me)
+{
+	/* texpoly/uv are assumed to be in sync */
+	CustomData *pdata = GET_CD_DATA(me, pdata);
+	const int n = CustomData_get_active_layer(pdata, CD_MTEXPOLY);
 
+	/* double check active layers align! */
+#ifdef DEBUG
+	CustomData *ldata = GET_CD_DATA(me, ldata);
+	BLI_assert(CustomData_get_active_layer(ldata, CD_MLOOPUV) == n);
+#endif
+
+	if (n != -1) {
+		return ED_mesh_uv_texture_remove_index(me, n);
+	}
+	else {
+		return false;
+	}
+}
+bool ED_mesh_uv_texture_remove_named(Mesh *me, const char *name)
+{
+	/* texpoly/uv are assumed to be in sync */
+	CustomData *pdata = GET_CD_DATA(me, pdata);
+	const int n = CustomData_get_named_layer(pdata, CD_MTEXPOLY, name);
+	if (n != -1) {
+		return ED_mesh_uv_texture_remove_index(me, n);
+	}
+	else {
+		return false;
+	}
+}
+
 /* note: keep in sync with ED_mesh_uv_texture_add */
-int ED_mesh_color_add(bContext *C, Scene *UNUSED(scene), Object *UNUSED(ob), Mesh *me, const char *name, int active_set)
+int ED_mesh_color_add(Mesh *me, const char *name, const bool active_set)
 {
 	BMEditMesh *em;
 	int layernum;
@@ -489,7 +520,7 @@
 	}
 
 	DAG_id_tag_update(&me->id, 0);
-	WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
+	WM_main_add_notifier(NC_GEOM | ND_DATA, me);
 
 	return layernum;
 }
@@ -523,7 +554,6 @@
 		return false;
 	}
 }
-
 bool ED_mesh_color_remove_named(Mesh *me, const char *name)
 {
 	CustomData *ldata = GET_CD_DATA(me, ldata);
@@ -550,7 +580,7 @@
 	Object *ob = ED_object_context(C);
 	Mesh *me = ob->data;
 
-	if (ED_mesh_uv_texture_add(C, me, NULL, true) == -1)
+	if (ED_mesh_uv_texture_add(me, NULL, true) == -1)
 		return OPERATOR_CANCELLED;
 
 	return OPERATOR_FINISHED;
@@ -670,7 +700,7 @@
 	Object *ob = ED_object_context(C);
 	Mesh *me = ob->data;
 
-	if (!ED_mesh_uv_texture_remove(C, ob, me))
+	if (!ED_mesh_uv_texture_remove_active(me))
 		return OPERATOR_CANCELLED;
 
 	return OPERATOR_FINISHED;
@@ -695,11 +725,10 @@
 
 static int mesh_vertex_color_add_exec(bContext *C, wmOperator *UNUSED(op))
 {
-	Scene *scene = CTX_data_scene(C);
 	Object *ob = ED_object_context(C);
 	Mesh *me = ob->data;
 
-	if (ED_mesh_color_add(C, scene, ob, me, NULL, true) == -1)
+	if (ED_mesh_color_add(me, NULL, true) == -1)
 		return OPERATOR_CANCELLED;
 
 	return OPERATOR_FINISHED;

Modified: trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c
===================================================================
--- trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c	2013-03-21 20:31:09 UTC (rev 55481)
+++ trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c	2013-03-21 20:54:48 UTC (rev 55482)
@@ -202,7 +202,6 @@
 static int output_toggle_exec(bContext *C, wmOperator *op)
 {
 	Object *ob = ED_object_context(C);
-	Scene *scene = CTX_data_scene(C);
 	DynamicPaintSurface *surface;
 	DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)modifiers_findByType(ob, eModifierType_DynamicPaint);
 	int output = RNA_enum_get(op->ptr, "output");  /* currently only 1/0 */
@@ -223,7 +222,7 @@
 		/* Vertex Color Layer */
 		if (surface->type == MOD_DPAINT_SURFACE_T_PAINT) {
 			if (!exists)
-				ED_mesh_color_add(C, scene, ob, ob->data, name, 1);
+				ED_mesh_color_add(ob->data, name, true);
 			else 
 				ED_mesh_color_remove_named(ob->data, name);
 		}

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2013-03-21 20:31:09 UTC (rev 55481)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2013-03-21 20:54:48 UTC (rev 55482)
@@ -121,7 +121,7 @@
 		return 1;
 
 	if (em && em->bm->totface && !CustomData_has_layer(&em->bm->pdata, CD_MTEXPOLY))
-		ED_mesh_uv_texture_add(C, obedit->data, NULL, TRUE);
+		ED_mesh_uv_texture_add(obedit->data, NULL, true);
 
 	if (!ED_uvedit_test(obedit))
 		return 0;

Modified: trunk/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2013-03-21 20:31:09 UTC (rev 55481)
+++ trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2013-03-21 20:54:48 UTC (rev 55482)
@@ -1268,12 +1268,12 @@
 	return me->edit_btmesh ? me->edit_btmesh->bm->totfacesel : 0;
 }
 
-static PointerRNA rna_Mesh_vertex_color_new(struct Mesh *me, struct bContext *C, const char *name)
+static PointerRNA rna_Mesh_vertex_color_new(struct Mesh *me, const char *name)
 {
 	PointerRNA ptr;
 	CustomData *ldata;
 	CustomDataLayer *cdl = NULL;
-	int index = ED_mesh_color_add(C, NULL, NULL, me, name, FALSE);
+	int index = ED_mesh_color_add(me, name, false);
 
 	if (index != -1) {
 		ldata = rna_mesh_ldata_helper(me);
@@ -1291,8 +1291,7 @@
 	}
 }
 
-static PointerRNA rna_Mesh_tessface_vertex_color_new(struct Mesh *me, struct bContext *C, ReportList *reports,
-                                                     const char *name)
+static PointerRNA rna_Mesh_tessface_vertex_color_new(struct Mesh *me, ReportList *reports, const char *name)
 {
 	PointerRNA ptr;
 	CustomData *fdata;
@@ -1309,7 +1308,7 @@
 		return PointerRNA_NULL;
 	}
 
-	index = ED_mesh_color_add(C, NULL, NULL, me, name, FALSE);
+	index = ED_mesh_color_add(me, name, false);
 
 	if (index != -1) {
 		fdata = rna_mesh_fdata_helper(me);
@@ -1365,12 +1364,12 @@
 	return ptr;
 }
 
-static PointerRNA rna_Mesh_uv_texture_new(struct Mesh *me, struct bContext *C, const char *name)
+static PointerRNA rna_Mesh_uv_texture_new(struct Mesh *me, const char *name)
 {
 	PointerRNA ptr;
 	CustomData *pdata;
 	CustomDataLayer *cdl = NULL;
-	int index = ED_mesh_uv_texture_add(C, me, name, FALSE);
+	int index = ED_mesh_uv_texture_add(me, name, false);
 
 	if (index != -1) {
 		pdata = rna_mesh_pdata_helper(me);
@@ -1381,11 +1380,17 @@
 	return ptr;
 }
 
+static void rna_Mesh_uv_texture_layers_remove(struct Mesh *me, ReportList *reports, CustomDataLayer *layer)
+{
+	if (ED_mesh_uv_texture_remove_named(me, layer->name) == false) {
+		BKE_reportf(reports, RPT_ERROR, "texture layer '%s' not found", layer->name);
+	}
+}
+
 /* while this is supposed to be readonly,
  * keep it to support importers that only make tessfaces */
 
-static PointerRNA rna_Mesh_tessface_uv_texture_new(struct Mesh *me, struct bContext *C, ReportList *reports,
-                                                   const char *name)
+static PointerRNA rna_Mesh_tessface_uv_texture_new(struct Mesh *me, ReportList *reports, const char *name)
 {
 	PointerRNA ptr;
 	CustomData *fdata;
@@ -1402,7 +1407,7 @@
 		return PointerRNA_NULL;
 	}
 
-	index = ED_mesh_uv_texture_add(C, me, name, FALSE);
+	index = ED_mesh_uv_texture_add(me, name, false);
 
 	if (index != -1) {
 		fdata = rna_mesh_fdata_helper(me);
@@ -2373,7 +2378,7 @@
 
 	/* eventually deprecate this */
 	func = RNA_def_function(srna, "new", "rna_Mesh_tessface_vertex_color_new");
-	RNA_def_function_flag(func, FUNC_USE_CONTEXT | FUNC_USE_REPORTS);
+	RNA_def_function_flag(func, FUNC_USE_REPORTS);
 	RNA_def_function_ui_description(func, "Add a vertex color layer to Mesh");

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list