[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46879] trunk/blender/source/blender: Fix for customdata layer copying.

Andrew Hale TrumanBlending at gmail.com
Tue May 22 14:03:57 CEST 2012


Revision: 46879
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46879
Author:   trumanblending
Date:     2012-05-22 12:03:56 +0000 (Tue, 22 May 2012)
Log Message:
-----------
Fix for customdata layer copying. Issue was caused by mixing up of destination and source in copy function. Also fixed an error in Py API, check to see if layers were different should be check to see if they're the same.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_interp.c
    trunk/blender/source/blender/editors/mesh/mesh_data.c
    trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_interp.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_interp.c	2012-05-22 10:48:29 UTC (rev 46878)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_interp.c	2012-05-22 12:03:56 UTC (rev 46879)
@@ -852,24 +852,24 @@
 		BMVert *eve;
 
 		BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
-			void *ptr = CustomData_bmesh_get_n(data, eve->head.data, type, dst_n);
-			CustomData_bmesh_set_n(data, eve->head.data, type, src_n, ptr);
+			void *ptr = CustomData_bmesh_get_n(data, eve->head.data, type, src_n);
+			CustomData_bmesh_set_n(data, eve->head.data, type, dst_n, ptr);
 		}
 	}
 	else if (&bm->edata == data) {
 		BMEdge *eed;
 
 		BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) {
-			void *ptr = CustomData_bmesh_get_n(data, eed->head.data, type, dst_n);
-			CustomData_bmesh_set_n(data, eed->head.data, type, src_n, ptr);
+			void *ptr = CustomData_bmesh_get_n(data, eed->head.data, type, src_n);
+			CustomData_bmesh_set_n(data, eed->head.data, type, dst_n, ptr);
 		}
 	}
 	else if (&bm->pdata == data) {
 		BMFace *efa;
 
 		BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
-			void *ptr = CustomData_bmesh_get_n(data, efa->head.data, type, dst_n);
-			CustomData_bmesh_set_n(data, efa->head.data, type, src_n, ptr);
+			void *ptr = CustomData_bmesh_get_n(data, efa->head.data, type, src_n);
+			CustomData_bmesh_set_n(data, efa->head.data, type, dst_n, ptr);
 		}
 	}
 	else if (&bm->ldata == data) {
@@ -879,8 +879,8 @@
 
 		BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
 			BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
-				void *ptr = CustomData_bmesh_get_n(data, l->head.data, type, dst_n);
-				CustomData_bmesh_set_n(data, l->head.data, type, src_n, ptr);
+				void *ptr = CustomData_bmesh_get_n(data, l->head.data, type, src_n);
+				CustomData_bmesh_set_n(data, l->head.data, type, dst_n, ptr);
 			}
 		}
 	}

Modified: trunk/blender/source/blender/editors/mesh/mesh_data.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_data.c	2012-05-22 10:48:29 UTC (rev 46878)
+++ trunk/blender/source/blender/editors/mesh/mesh_data.c	2012-05-22 12:03:56 UTC (rev 46879)
@@ -309,44 +309,44 @@
 int ED_mesh_uv_texture_add(bContext *C, Mesh *me, const char *name, int active_set)
 {
 	BMEditMesh *em;
-	int layernum;
+	int layernum_dst;
 
 	short is_init = FALSE;
 
 	if (me->edit_btmesh) {
 		em = me->edit_btmesh;
 
-		layernum = CustomData_number_of_layers(&em->bm->pdata, CD_MTEXPOLY);
-		if (layernum >= MAX_MTFACE)
+		layernum_dst = CustomData_number_of_layers(&em->bm->pdata, CD_MTEXPOLY);
+		if (layernum_dst >= MAX_MTFACE)
 			return -1;
 
 		/* CD_MTEXPOLY */
 		BM_data_layer_add_named(em->bm, &em->bm->pdata, CD_MTEXPOLY, name);
 		/* copy data from active UV */
-		if (layernum) {
-			const int layernum_dst = CustomData_get_active_layer(&em->bm->pdata, CD_MTEXPOLY);
-			BM_data_layer_copy(em->bm, &em->bm->pdata, CD_MTEXPOLY, layernum, layernum_dst);
+		if (layernum_dst) {
+			const int layernum_src = CustomData_get_active_layer(&em->bm->pdata, CD_MTEXPOLY);
+			BM_data_layer_copy(em->bm, &em->bm->pdata, CD_MTEXPOLY, layernum_src, layernum_dst);
 		}
-		if (active_set || layernum == 0) {
-			CustomData_set_layer_active(&em->bm->pdata, CD_MTEXPOLY, layernum);
+		if (active_set || layernum_dst == 0) {
+			CustomData_set_layer_active(&em->bm->pdata, CD_MTEXPOLY, layernum_dst);
 		}
 
 		/* CD_MLOOPUV */
 		BM_data_layer_add_named(em->bm, &em->bm->ldata, CD_MLOOPUV, name);
 		/* copy data from active UV */
-		if (layernum) {
-			const int layernum_dst = CustomData_get_active_layer(&em->bm->ldata, CD_MLOOPUV);
-			BM_data_layer_copy(em->bm, &em->bm->ldata, CD_MLOOPUV, layernum, layernum_dst);
+		if (layernum_dst) {
+			const int layernum_src = CustomData_get_active_layer(&em->bm->ldata, CD_MLOOPUV);
+			BM_data_layer_copy(em->bm, &em->bm->ldata, CD_MLOOPUV, layernum_src, layernum_dst);
 
 			is_init = TRUE;
 		}
-		if (active_set || layernum == 0) {
-			CustomData_set_layer_active(&em->bm->ldata, CD_MLOOPUV, layernum);
+		if (active_set || layernum_dst == 0) {
+			CustomData_set_layer_active(&em->bm->ldata, CD_MLOOPUV, layernum_dst);
 		}
 	}
 	else {
-		layernum = CustomData_number_of_layers(&me->pdata, CD_MTEXPOLY);
-		if (layernum >= MAX_MTFACE)
+		layernum_dst = CustomData_number_of_layers(&me->pdata, CD_MTEXPOLY);
+		if (layernum_dst >= MAX_MTFACE)
 			return -1;
 
 		if (me->mtpoly) {
@@ -361,11 +361,11 @@
 			CustomData_add_layer_named(&me->fdata, CD_MTFACE, CD_DEFAULT, NULL, me->totface, name);
 		}
 		
-		if (active_set || layernum == 0) {
-			CustomData_set_layer_active(&me->pdata, CD_MTEXPOLY, layernum);
-			CustomData_set_layer_active(&me->ldata, CD_MLOOPUV, layernum);
+		if (active_set || layernum_dst == 0) {
+			CustomData_set_layer_active(&me->pdata, CD_MTEXPOLY, layernum_dst);
+			CustomData_set_layer_active(&me->ldata, CD_MLOOPUV, layernum_dst);
 
-			CustomData_set_layer_active(&me->fdata, CD_MTFACE, layernum);
+			CustomData_set_layer_active(&me->fdata, CD_MTFACE, layernum_dst);
 		}
 
 		mesh_update_customdata_pointers(me, TRUE);
@@ -373,13 +373,13 @@
 
 	/* don't overwrite our copied coords */
 	if (is_init == FALSE) {
-		ED_mesh_uv_loop_reset_ex(C, me, layernum);
+		ED_mesh_uv_loop_reset_ex(C, me, layernum_dst);
 	}
 
 	DAG_id_tag_update(&me->id, 0);
 	WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
 
-	return layernum;
+	return layernum_dst;
 }
 
 int ED_mesh_uv_texture_remove(bContext *C, Object *ob, Mesh *me)

Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c	2012-05-22 10:48:29 UTC (rev 46878)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_types_customdata.c	2012-05-22 12:03:56 UTC (rev 46879)
@@ -271,13 +271,16 @@
 	}
 
 	else if ((self->htype != value->htype) ||
-	         (self->type  != value->type) ||
-	         (self->index != value->index))
+	         (self->type  != value->type))
 	{
 		PyErr_SetString(PyExc_ValueError,
 		                "layer.copy_from(other): layer type mismatch");
 	}
 
+	else if (self->index == value->index) {
+		Py_RETURN_NONE;
+	}
+
 	data = bpy_bm_customdata_get(self->bm, self->htype);
 
 	if ((bpy_bmlayeritem_get(self) == NULL) ||




More information about the Bf-blender-cvs mailing list