[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47731] trunk/blender/source/blender: Fix incorrectly deleted elements in array modifier caps.

Nicholas Bishop nicholasbishop at gmail.com
Mon Jun 11 11:41:17 CEST 2012


Revision: 47731
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47731
Author:   nicholasbishop
Date:     2012-06-11 09:41:08 +0000 (Mon, 11 Jun 2012)
Log Message:
-----------
Fix incorrectly deleted elements in array modifier caps.

Add check for merging vertices into vertices that are themselves
marked for merge, was already done for array eleements but not end
caps.

Fixes bug [#31695] Array Modifier: End Cap fails if all vertices are merged

Also corrected some reversed assert arguments.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
    trunk/blender/source/blender/bmesh/intern/bmesh_operators.c
    trunk/blender/source/blender/modifiers/intern/MOD_array.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2012-06-11 09:24:25 UTC (rev 47730)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2012-06-11 09:41:08 UTC (rev 47731)
@@ -458,7 +458,7 @@
 	BMIter iter;
 	int tot = 0;
 
-	BLI_assert(ELEM(TRUE, FALSE, test_for_enabled));
+	BLI_assert(ELEM(test_for_enabled, TRUE, FALSE));
 
 	if (htype & BM_VERT) {
 		for (ele = BM_iter_new(&iter, bm, BM_VERTS_OF_MESH, NULL); ele; ele = BM_iter_step(&iter)) {

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_operators.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_operators.c	2012-06-11 09:24:25 UTC (rev 47730)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_operators.c	2012-06-11 09:41:08 UTC (rev 47731)
@@ -698,7 +698,7 @@
 	BMOpSlot *output = BMO_slot_get(op, slotname);
 	int totelement = 0, i = 0;
 
-	BLI_assert(ELEM(TRUE, FALSE, test_for_enabled));
+	BLI_assert(ELEM(test_for_enabled, TRUE, FALSE));
 
 	if (test_for_enabled)
 		totelement = BM_mesh_elem_hflag_count_enabled(bm, htype, hflag, TRUE);

Modified: trunk/blender/source/blender/modifiers/intern/MOD_array.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_array.c	2012-06-11 09:24:25 UTC (rev 47730)
+++ trunk/blender/source/blender/modifiers/intern/MOD_array.c	2012-06-11 09:41:08 UTC (rev 47731)
@@ -220,9 +220,12 @@
                                   const char *dupe_slot_name,
                                   BMOperator *weld_op)
 {
-	BMVert *v, *v2;
+	BMVert *v, *v2, *v3;
 	BMIter iter;
 
+	/* Add the DerivedMesh's elements to the BMesh. The pre-existing
+	   elements were already tagged, so the new elements can be
+	   identified by not having the BM_ELEM_TAG flag set. */
 	DM_to_bmesh_ex(dm, bm);
 
 	if (amd->flags & MOD_ARR_MERGE) {
@@ -252,6 +255,11 @@
 		/* add new merge targets to weld operator */
 		BMO_ITER (v, &oiter, bm, &find_op, "targetmapout", 0) {
 			v2 = BMO_iter_map_value_p(&oiter);
+			/* check in case the target vertex (v2) is already marked
+			 * for merging */
+			while ((v3 = BMO_slot_map_ptr_get(bm, weld_op, "targetmap", v2))) {
+				v2 = v3;
+			}
 			BMO_slot_map_ptr_insert(bm, weld_op, "targetmap", v, v2);
 		}
 




More information about the Bf-blender-cvs mailing list