separate loose parts was hanging on hidden verts

This commit is contained in:
Campbell Barton 2010-06-14 16:58:31 +00:00
parent 69cb2cc37b
commit 8faa11a9e6

@ -1480,10 +1480,18 @@ static int mesh_separate_loose(Scene *scene, Base *editbase)
} }
EM_clear_flag_all(em, SELECT); EM_clear_flag_all(em, SELECT);
while(doit && em->verts.first) { while(doit) {
/* Select a random vert to start with */ /* Select a random vert to start with */
EditVert *eve= em->verts.first; EditVert *eve;
int tot;
/* check if all verts that are visible have been done */
for(eve=em->verts.first; eve; eve= eve->next)
if(!eve->h) break;
if(eve==NULL) break; /* only hidden verts left, quit early */
/* first non hidden vert */
eve->f |= SELECT; eve->f |= SELECT;
selectconnected_mesh_all(em); selectconnected_mesh_all(em);
@ -1493,8 +1501,14 @@ static int mesh_separate_loose(Scene *scene, Base *editbase)
if((eve->f & SELECT)==0) break; if((eve->f & SELECT)==0) break;
if(eve==NULL) break; if(eve==NULL) break;
tot= BLI_countlist(&em->verts);
/* and now separate */ /* and now separate */
doit= mesh_separate_selected(scene, editbase); doit= mesh_separate_selected(scene, editbase);
/* with hidden verts this can happen */
if(tot == BLI_countlist(&em->verts))
break;
} }
BKE_mesh_end_editmesh(me, em); BKE_mesh_end_editmesh(me, em);