diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2012-06-11 13:41:08 +0400 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2012-06-11 13:41:08 +0400 |
commit | a18b303a7656c446b41d7b75d7d512e0f8a87040 (patch) | |
tree | e36ad3a051c647ba7d1a1b969e23044e9c710fcc /source/blender | |
parent | abfe63d8aacbc07363ab71ad530a7cfbd49b15ac (diff) |
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.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_marking.c | 2 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_operators.c | 2 | ||||
-rw-r--r-- | source/blender/modifiers/intern/MOD_array.c | 10 |
3 files changed, 11 insertions, 3 deletions
diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c index 1720ee4f55a..59817043eed 100644 --- a/source/blender/bmesh/intern/bmesh_marking.c +++ b/source/blender/bmesh/intern/bmesh_marking.c @@ -458,7 +458,7 @@ static int bm_mesh_flag_count(BMesh *bm, const char htype, const char hflag, 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)) { diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c index 82ad5c1805b..65288522b3b 100644 --- a/source/blender/bmesh/intern/bmesh_operators.c +++ b/source/blender/bmesh/intern/bmesh_operators.c @@ -698,7 +698,7 @@ static void bmo_slot_buffer_from_hflag(BMesh *bm, BMOperator *op, const char *sl 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); diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c index 39e08c1cb5d..41057234d9b 100644 --- a/source/blender/modifiers/intern/MOD_array.c +++ b/source/blender/modifiers/intern/MOD_array.c @@ -220,9 +220,12 @@ static void bm_merge_dm_transform(BMesh *bm, DerivedMesh *dm, float mat[4][4], 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 @@ static void bm_merge_dm_transform(BMesh *bm, DerivedMesh *dm, float mat[4][4], /* 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); } |