[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26743] trunk/blender/source/blender/ blenkernel/intern/DerivedMesh.c: [#21067] Weight painting doesn' t work with mirror modifier enabled.

Campbell Barton ideasman42 at gmail.com
Tue Feb 9 19:06:57 CET 2010


Revision: 26743
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26743
Author:   campbellbarton
Date:     2010-02-09 19:06:57 +0100 (Tue, 09 Feb 2010)

Log Message:
-----------
[#21067] Weight painting doesn't work with mirror modifier enabled.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2010-02-09 17:50:56 UTC (rev 26742)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2010-02-09 18:06:57 UTC (rev 26743)
@@ -1771,6 +1771,22 @@
 
 				if((dataMask & CD_MASK_WEIGHT_MCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT))
 					add_weight_mcol_dm(ob, dm);
+
+				/* constructive modifiers need to have an origindex
+				 * otherwise they wont have anywhere to copy the data from */
+				if(needMapping) {
+					int *index, i;
+					DM_add_vert_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
+					DM_add_edge_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
+					DM_add_face_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
+
+					index = DM_get_vert_data_layer(dm, CD_ORIGINDEX);
+					for(i=0; i<dm->numVertData; i++) *index++= i;
+					index = DM_get_edge_data_layer(dm, CD_ORIGINDEX);
+					for(i=0; i<dm->numEdgeData; i++) *index++= i;
+					index = DM_get_face_data_layer(dm, CD_ORIGINDEX);
+					for(i=0; i<dm->numFaceData; i++) *index++= i;
+				}
 			}
 
 			/* create an orco derivedmesh in parallel */
@@ -2111,7 +2127,7 @@
 	/* weight paint and face select need original indicies because of selection buffer drawing */
 	int needMapping = (ob==obact) && (editing || (ob->mode & OB_MODE_WEIGHT_PAINT) || paint_facesel_test(ob));
 	float min[3], max[3];
-	
+	printf("needMapping, %d\n", needMapping);
 	clear_mesh_caches(ob);
 
 	mesh_calc_modifiers(scene, ob, NULL, &ob->derivedDeform,





More information about the Bf-blender-cvs mailing list