From ef19dfbbb25aac4b76f5de4a79097e16eef7eb87 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Thu, 3 Nov 2005 15:57:31 +0000 Subject: [PATCH] Fixed two small glitches in Mesh ripping (Vkey): - loose edges got accidentally removed - when a rip results in loose vertices, they now get removed too. --- source/blender/src/editmesh_tools.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/source/blender/src/editmesh_tools.c b/source/blender/src/editmesh_tools.c index 49ffb44f85d..a9fa2c50532 100644 --- a/source/blender/src/editmesh_tools.c +++ b/source/blender/src/editmesh_tools.c @@ -5163,7 +5163,7 @@ void mesh_rip(void) { extern void faceloop_select(EditEdge *startedge, int select); EditMesh *em = G.editMesh; - EditVert *eve; + EditVert *eve, *nextve; EditEdge *eed, *seed= NULL; EditFace *efa, *sefa= NULL; float projectMat[4][4], viewMat[4][4], vec[3], dist, mindist; @@ -5204,7 +5204,7 @@ void mesh_rip(void) return; } if(sefa==NULL) { - error("No proper selection or triangles included"); + error("No proper selection or faces included"); return; } @@ -5306,7 +5306,8 @@ void mesh_rip(void) } } - /* remove loose edges */ + /* remove loose edges, that were part of a ripped face */ + for(eve = em->verts.first; eve; eve= eve->next) eve->f1= 0; for(eed = em->edges.last; eed; eed= eed->prev) eed->f1= 0; for(efa= em->faces.first; efa; efa=efa->next) { efa->e1->f1= 1; @@ -5318,11 +5319,25 @@ void mesh_rip(void) for(eed = em->edges.last; eed; eed= seed) { seed= eed->prev; if(eed->f1==0) { - if(eed->v1->f | eed->v2->f | SELECT) { + if(eed->v1->vn || eed->v2->vn || (eed->v1->f & SELECT) || (eed->v2->f & SELECT)) { remedge(eed); free_editedge(eed); + eed= NULL; } } + if(eed) { + eed->v1->f1= 1; + eed->v2->f1= 1; + } + } + + /* and remove loose selected vertices, that got duplicated accidentally */ + for(eve = em->verts.first; eve; eve= nextve) { + nextve= eve->next; + if(eve->f1==0 && (eve->vn || (eve->f & SELECT))) { + BLI_remlink(&em->verts,eve); + free_editvert(eve); + } } countall(); // apparently always needed when adding stuff, derived mesh