Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2012-06-11 13:41:08 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2012-06-11 13:41:08 +0400
commita18b303a7656c446b41d7b75d7d512e0f8a87040 (patch)
treee36ad3a051c647ba7d1a1b969e23044e9c710fcc /source/blender
parentabfe63d8aacbc07363ab71ad530a7cfbd49b15ac (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.c2
-rw-r--r--source/blender/bmesh/intern/bmesh_operators.c2
-rw-r--r--source/blender/modifiers/intern/MOD_array.c10
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);
}