[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42308] branches/bmesh/blender/source/ blender/blenkernel: Fix for [#29467] Selection of active vertex color layer doesn't work

Andrew Wiggin ender79bl at gmail.com
Thu Dec 1 10:49:33 CET 2011


Revision: 42308
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42308
Author:   ender79
Date:     2011-12-01 09:49:27 +0000 (Thu, 01 Dec 2011)
Log Message:
-----------
Fix for [#29467] Selection of active vertex color layer doesn't work

Need to push active layer indices from loops & polys to faces again after tesselations

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
    branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c

Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h	2011-12-01 07:41:45 UTC (rev 42307)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_customdata.h	2011-12-01 09:49:27 UTC (rev 42308)
@@ -333,6 +333,7 @@
 void CustomData_to_bmeshpoly(struct CustomData *fdata, struct CustomData *pdata,
                              struct CustomData *ldata, int totloop, int totpoly);
 void CustomData_from_bmeshpoly(struct CustomData *fdata, struct CustomData *pdata, struct CustomData *ldata, int total);
+void CustomData_bmesh_update_active_layers(struct CustomData *fdata, struct CustomData *pdata, struct CustomData *ldata);
 void CustomData_bmesh_init_pool(struct CustomData *data, int allocsize);
 
 /* External file storage */

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-12-01 07:41:45 UTC (rev 42307)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c	2011-12-01 09:49:27 UTC (rev 42308)
@@ -1595,6 +1595,10 @@
 	}
 
 	cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
+
+	/* Tesselation recreated faceData, and the active layer indices need to get re-propagated
+	   from loops and polys to faces */
+	CustomData_bmesh_update_active_layers(&dm->faceData, &dm->polyData, &dm->loopData);
 }
 
 static void cdDM_free_internal(CDDerivedMesh *cddm)

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c	2011-12-01 07:41:45 UTC (rev 42307)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/customdata.c	2011-12-01 09:49:27 UTC (rev 42308)
@@ -2360,7 +2360,43 @@
 	}
 }
 
+void CustomData_bmesh_update_active_layers(CustomData *fdata, CustomData *pdata, CustomData *ldata)
+{
+	int act;
 
+	if (CustomData_has_layer(pdata, CD_MTEXPOLY)) {
+		act = CustomData_get_active_layer(pdata, CD_MTEXPOLY);
+		CustomData_set_layer_active(ldata, CD_MLOOPUV, act);
+		CustomData_set_layer_active(fdata, CD_MTFACE, act);
+
+		act = CustomData_get_render_layer(pdata, CD_MTEXPOLY);
+		CustomData_set_layer_render(ldata, CD_MLOOPUV, act);
+		CustomData_set_layer_render(fdata, CD_MTFACE, act);
+
+		act = CustomData_get_clone_layer(pdata, CD_MTEXPOLY);
+		CustomData_set_layer_clone(ldata, CD_MLOOPUV, act);
+		CustomData_set_layer_clone(fdata, CD_MTFACE, act);
+
+		act = CustomData_get_stencil_layer(pdata, CD_MTEXPOLY);
+		CustomData_set_layer_stencil(ldata, CD_MLOOPUV, act);
+		CustomData_set_layer_stencil(fdata, CD_MTFACE, act);
+	}
+
+	if (CustomData_has_layer(ldata, CD_MLOOPCOL)) {
+		act = CustomData_get_active_layer(ldata, CD_MLOOPCOL);
+		CustomData_set_layer_active(fdata, CD_MCOL, act);
+
+		act = CustomData_get_render_layer(ldata, CD_MLOOPCOL);
+		CustomData_set_layer_render(fdata, CD_MCOL, act);
+
+		act = CustomData_get_clone_layer(ldata, CD_MLOOPCOL);
+		CustomData_set_layer_clone(fdata, CD_MCOL, act);
+
+		act = CustomData_get_stencil_layer(ldata, CD_MLOOPCOL);
+		CustomData_set_layer_stencil(fdata, CD_MCOL, act);
+	}
+}
+
 void CustomData_bmesh_init_pool(CustomData *data, int allocsize)
 {
 	/* Dispose old pools before calling here to avoid leaks */

Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2011-12-01 07:41:45 UTC (rev 42307)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c	2011-12-01 09:49:27 UTC (rev 42308)
@@ -340,37 +340,7 @@
 
 	mesh_ensure_tesselation_customdata(me);
 
-	if (CustomData_has_layer(&me->pdata, CD_MTEXPOLY)) {
-		act = CustomData_get_active_layer(&me->pdata, CD_MTEXPOLY);
-		CustomData_set_layer_active(&me->ldata, CD_MLOOPUV, act);
-		CustomData_set_layer_active(&me->fdata, CD_MTFACE, act);
-
-		act = CustomData_get_render_layer(&me->pdata, CD_MTEXPOLY);
-		CustomData_set_layer_render(&me->ldata, CD_MLOOPUV, act);
-		CustomData_set_layer_render(&me->fdata, CD_MTFACE, act);
-
-		act = CustomData_get_clone_layer(&me->pdata, CD_MTEXPOLY);
-		CustomData_set_layer_clone(&me->ldata, CD_MLOOPUV, act);
-		CustomData_set_layer_clone(&me->fdata, CD_MTFACE, act);
-
-		act = CustomData_get_stencil_layer(&me->pdata, CD_MTEXPOLY);
-		CustomData_set_layer_stencil(&me->ldata, CD_MLOOPUV, act);
-		CustomData_set_layer_stencil(&me->fdata, CD_MTFACE, act);
-	}
-
-	if (CustomData_has_layer(&me->ldata, CD_MLOOPCOL)) {
-		act = CustomData_get_active_layer(&me->ldata, CD_MLOOPCOL);
-		CustomData_set_layer_active(&me->fdata, CD_MCOL, act);
-
-		act = CustomData_get_render_layer(&me->ldata, CD_MLOOPCOL);
-		CustomData_set_layer_render(&me->fdata, CD_MCOL, act);
-
-		act = CustomData_get_clone_layer(&me->ldata, CD_MLOOPCOL);
-		CustomData_set_layer_clone(&me->fdata, CD_MCOL, act);
-
-		act = CustomData_get_stencil_layer(&me->ldata, CD_MLOOPCOL);
-		CustomData_set_layer_stencil(&me->fdata, CD_MCOL, act);
-	}
+	CustomData_bmesh_update_active_layers(&me->fdata, &me->pdata, &me->ldata);
 }
 
 void mesh_update_customdata_pointers(Mesh *me)




More information about the Bf-blender-cvs mailing list