From c1cc9f3376eea4664a85db82e1901f5f03e59ac0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 22 Aug 2013 17:32:41 +0000 Subject: bmesh duplicate operator: add vertmap output slot. --- source/blender/bmesh/intern/bmesh_opdefines.c | 1 + source/blender/bmesh/operators/bmo_dupe.c | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) (limited to 'source') diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c index 45f81d9d96d..d83d3b738eb 100644 --- a/source/blender/bmesh/intern/bmesh_opdefines.c +++ b/source/blender/bmesh/intern/bmesh_opdefines.c @@ -1154,6 +1154,7 @@ static BMOpDefine bmo_duplicate_def = { /* facemap maps from source faces to dupe * faces, and from dupe faces to source faces */ {"face_map.out", BMO_OP_SLOT_MAPPING, {BMO_OP_SLOT_SUBTYPE_MAP_ELEM}}, + {"vert_map.out", BMO_OP_SLOT_MAPPING, {BMO_OP_SLOT_SUBTYPE_MAP_ELEM}}, {"boundary_map.out", BMO_OP_SLOT_MAPPING, {BMO_OP_SLOT_SUBTYPE_MAP_ELEM}}, {"isovert_map.out", BMO_OP_SLOT_MAPPING, {BMO_OP_SLOT_SUBTYPE_MAP_ELEM}}, {{'\0'}}, diff --git a/source/blender/bmesh/operators/bmo_dupe.c b/source/blender/bmesh/operators/bmo_dupe.c index 0517a4d1a89..e62fe7b336b 100644 --- a/source/blender/bmesh/operators/bmo_dupe.c +++ b/source/blender/bmesh/operators/bmo_dupe.c @@ -46,13 +46,17 @@ * * Copy an existing vertex from one bmesh to another. */ -static BMVert *bmo_vert_copy(BMesh *bm_dst, BMesh *bm_src, BMVert *v_src, GHash *vhash) +static BMVert *bmo_vert_copy(BMOperator *op, + BMOpSlot *slot_vertmap_out, + BMesh *bm_dst, BMesh *bm_src, BMVert *v_src, GHash *vhash) { BMVert *v_dst; /* Create a new vertex */ v_dst = BM_vert_create(bm_dst, v_src->co, NULL, BM_CREATE_SKIP_CD); - + BMO_slot_map_elem_insert(op, slot_vertmap_out, v_src, v_dst); + BMO_slot_map_elem_insert(op, slot_vertmap_out, v_dst, v_src); + /* Insert new vertex into the vert hash */ BLI_ghash_insert(vhash, v_src, v_dst); @@ -187,8 +191,9 @@ static void bmo_mesh_copy(BMOperator *op, BMesh *bm_dst, BMesh *bm_src) GHash *vhash, *ehash; BMOpSlot *slot_boundary_map_out = BMO_slot_get(op->slots_out, "boundary_map.out"); - BMOpSlot *slot_face_map_out = BMO_slot_get(op->slots_out, "face_map.out"); BMOpSlot *slot_isovert_map_out = BMO_slot_get(op->slots_out, "isovert_map.out"); + BMOpSlot *slot_face_map_out = BMO_slot_get(op->slots_out, "face_map.out"); + BMOpSlot *slot_vert_map_out = BMO_slot_get(op->slots_out, "vert_map.out"); /* initialize pointer hashes */ vhash = BLI_ghash_ptr_new("bmesh dupeops v"); @@ -202,7 +207,7 @@ static void bmo_mesh_copy(BMOperator *op, BMesh *bm_dst, BMesh *bm_src) BMIter iter; bool isolated = true; - v2 = bmo_vert_copy(bm_dst, bm_src, v, vhash); + v2 = bmo_vert_copy(op, slot_vert_map_out, bm_dst, bm_src, v, vhash); BM_ITER_ELEM (f, &iter, v, BM_FACES_OF_VERT) { if (BMO_elem_flag_test(bm_src, f, DUPE_INPUT)) { @@ -235,11 +240,11 @@ static void bmo_mesh_copy(BMOperator *op, BMesh *bm_dst, BMesh *bm_src) { /* make sure that verts are copied */ if (!BMO_elem_flag_test(bm_src, e->v1, DUPE_DONE)) { - bmo_vert_copy(bm_dst, bm_src, e->v1, vhash); + bmo_vert_copy(op, slot_vert_map_out, bm_dst, bm_src, e->v1, vhash); BMO_elem_flag_enable(bm_src, e->v1, DUPE_DONE); } if (!BMO_elem_flag_test(bm_src, e->v2, DUPE_DONE)) { - bmo_vert_copy(bm_dst, bm_src, e->v2, vhash); + bmo_vert_copy(op, slot_vert_map_out, bm_dst, bm_src, e->v2, vhash); BMO_elem_flag_enable(bm_src, e->v2, DUPE_DONE); } /* now copy the actual edge */ @@ -254,7 +259,7 @@ static void bmo_mesh_copy(BMOperator *op, BMesh *bm_dst, BMesh *bm_src) /* vertex pass */ BM_ITER_ELEM (v, &viter, f, BM_VERTS_OF_FACE) { if (!BMO_elem_flag_test(bm_src, v, DUPE_DONE)) { - bmo_vert_copy(bm_dst, bm_src, v, vhash); + bmo_vert_copy(op, slot_vert_map_out, bm_dst, bm_src, v, vhash); BMO_elem_flag_enable(bm_src, v, DUPE_DONE); } } -- cgit v1.2.3