fix for filled rip copying loop customdata (fix in BM_edge_other_loop broke it)
authorCampbell Barton <ideasman42@gmail.com>
Sat, 27 Oct 2012 01:33:33 +0000 (01:33 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sat, 27 Oct 2012 01:33:33 +0000 (01:33 +0000)
also assert when customdata can't be copied because of invalid args.

source/blender/bmesh/intern/bmesh_construct.c
source/blender/editors/mesh/editmesh_rip.c

index bc1213030465fdd538c70ecb62bea33723dacfd2..d86a26e19ac7ef2c241a62d5647fe570f0d8d891 100644 (file)
@@ -725,6 +725,7 @@ static void bm_vert_attrs_copy(BMesh *source_mesh, BMesh *target_mesh,
                                const BMVert *source_vertex, BMVert *target_vertex)
 {
        if ((source_mesh == target_mesh) && (source_vertex == target_vertex)) {
+               BLI_assert(!"BMVert: source and targer match");
                return;
        }
        copy_v3_v3(target_vertex->no, source_vertex->no);
@@ -737,6 +738,7 @@ static void bm_edge_attrs_copy(BMesh *source_mesh, BMesh *target_mesh,
                                const BMEdge *source_edge, BMEdge *target_edge)
 {
        if ((source_mesh == target_mesh) && (source_edge == target_edge)) {
+               BLI_assert(!"BMEdge: source and targer match");
                return;
        }
        CustomData_bmesh_free_block(&target_mesh->edata, &target_edge->head.data);
@@ -748,6 +750,7 @@ static void bm_loop_attrs_copy(BMesh *source_mesh, BMesh *target_mesh,
                                const BMLoop *source_loop, BMLoop *target_loop)
 {
        if ((source_mesh == target_mesh) && (source_loop == target_loop)) {
+               BLI_assert(!"BMLoop: source and targer match");
                return;
        }
        CustomData_bmesh_free_block(&target_mesh->ldata, &target_loop->head.data);
@@ -759,6 +762,7 @@ static void bm_face_attrs_copy(BMesh *source_mesh, BMesh *target_mesh,
                                const BMFace *source_face, BMFace *target_face)
 {
        if ((source_mesh == target_mesh) && (source_face == target_face)) {
+               BLI_assert(!"BMFace: source and targer match");
                return;
        }
        copy_v3_v3(target_face->no, source_face->no);
@@ -781,8 +785,10 @@ void BM_elem_attrs_copy(BMesh *source_mesh, BMesh *target_mesh, const void *sour
 
        BLI_assert(sheader->htype == theader->htype);
 
-       if (sheader->htype != theader->htype)
+       if (sheader->htype != theader->htype) {
+               BLI_assert(!"type mismatch");
                return;
+       }
 
        /* First we copy select */
        if (BM_elem_flag_test((BMElem *)sheader, BM_ELEM_SELECT)) {
index f12e5ddfadbe11fea0fd3fd7ec7b7360627b40c0..6379bdbc0cad0c79ecdd81eeeb61fc29bab8a232 100644 (file)
@@ -496,21 +496,21 @@ static void edbm_tagged_loop_pairs_do_fill_faces(BMesh *bm, UnorderedLoopPair *u
                        l_iter = BM_FACE_FIRST_LOOP(f);
 
                        if (f_verts[3]) {
-                               BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, ulp->l_pair[0]),       l_iter); l_iter = l_iter->next;
-                               BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[1]->e, ulp->l_pair[1]->next), l_iter); l_iter = l_iter->next;
-                               BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[1]->e, ulp->l_pair[1]),       l_iter); l_iter = l_iter->next;
-                               BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, ulp->l_pair[0]->next), l_iter);
+                               BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, l_iter), l_iter); l_iter = l_iter->next;
+                               BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[1]->e, l_iter), l_iter); l_iter = l_iter->next;
+                               BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[1]->e, l_iter), l_iter); l_iter = l_iter->next;
+                               BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, l_iter), l_iter);
                        }
                        else {
                                if (v_shared == f_verts[0]) {
-                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, ulp->l_pair[0]->next), l_iter); l_iter = l_iter->next;
-                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, ulp->l_pair[0]),       l_iter); l_iter = l_iter->next;
-                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[1]->e, ulp->l_pair[1]->next), l_iter);
+                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, l_iter), l_iter); l_iter = l_iter->next;
+                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, l_iter), l_iter); l_iter = l_iter->next;
+                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[1]->e, l_iter), l_iter);
                                }
                                else {
-                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, ulp->l_pair[0]->next), l_iter); l_iter = l_iter->next;
-                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, ulp->l_pair[0]),       l_iter); l_iter = l_iter->next;
-                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[1]->e, ulp->l_pair[1]),       l_iter);
+                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, l_iter), l_iter); l_iter = l_iter->next;
+                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[0]->e, l_iter), l_iter); l_iter = l_iter->next;
+                                       BM_elem_attrs_copy(bm, bm, BM_edge_other_loop(ulp->l_pair[1]->e, l_iter), l_iter);
                                }
                        }