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.
This commit is contained in:
@@ -5163,7 +5163,7 @@ void mesh_rip(void)
|
|||||||
{
|
{
|
||||||
extern void faceloop_select(EditEdge *startedge, int select);
|
extern void faceloop_select(EditEdge *startedge, int select);
|
||||||
EditMesh *em = G.editMesh;
|
EditMesh *em = G.editMesh;
|
||||||
EditVert *eve;
|
EditVert *eve, *nextve;
|
||||||
EditEdge *eed, *seed= NULL;
|
EditEdge *eed, *seed= NULL;
|
||||||
EditFace *efa, *sefa= NULL;
|
EditFace *efa, *sefa= NULL;
|
||||||
float projectMat[4][4], viewMat[4][4], vec[3], dist, mindist;
|
float projectMat[4][4], viewMat[4][4], vec[3], dist, mindist;
|
||||||
@@ -5204,7 +5204,7 @@ void mesh_rip(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(sefa==NULL) {
|
if(sefa==NULL) {
|
||||||
error("No proper selection or triangles included");
|
error("No proper selection or faces included");
|
||||||
return;
|
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(eed = em->edges.last; eed; eed= eed->prev) eed->f1= 0;
|
||||||
for(efa= em->faces.first; efa; efa=efa->next) {
|
for(efa= em->faces.first; efa; efa=efa->next) {
|
||||||
efa->e1->f1= 1;
|
efa->e1->f1= 1;
|
||||||
@@ -5318,11 +5319,25 @@ void mesh_rip(void)
|
|||||||
for(eed = em->edges.last; eed; eed= seed) {
|
for(eed = em->edges.last; eed; eed= seed) {
|
||||||
seed= eed->prev;
|
seed= eed->prev;
|
||||||
if(eed->f1==0) {
|
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);
|
remedge(eed);
|
||||||
free_editedge(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
|
countall(); // apparently always needed when adding stuff, derived mesh
|
||||||
|
|||||||
Reference in New Issue
Block a user