fkey - automatic quad from 4 verts does so on a tetrahedron

Added a case where there are 4 verts selected but > 4 edges selected. Uses addfaces_from_edgenet in that case now. This fixes the example blend that was given.
This commit is contained in:
Johnny Matthews
2007-03-30 18:24:00 +00:00
parent 8da5f2a143
commit 6f05a8ec2a

View File

@@ -386,8 +386,11 @@ static EditFace *addface_from_edges(void)
else if(eedar[1]==NULL) eedar[1]= eed;
else if(eedar[2]==NULL) eedar[2]= eed;
else eedar[3]= eed;
}
}
if(eedar[3]) {
/* first 2 points */
v1= eedar[0]->v1;
@@ -747,30 +750,45 @@ void addedgeface_mesh(void)
if(tria==2) join_triangles();
else if(exist_face_overlaps(neweve[0], neweve[1], neweve[2], neweve[3])==0) {
/* If there are 4 Verts, But more selected edges, we need to call addfaces_from_edgenet */
EditEdge *eedcheck;
int count;
count = 0;
for(eedcheck= em->edges.first; eedcheck; eedcheck= eedcheck->next) {
if(eedcheck->f & SELECT) {
count++;
}
}
if(count++ > 4){
addfaces_from_edgenet();
return;
} else {
/* if 4 edges exist, we just create the face, convex or not */
efa= addface_from_edges();
if(efa==NULL) {
/* the order of vertices can be anything, 6 cases to check */
if( convex(neweve[0]->co, neweve[1]->co, neweve[2]->co, neweve[3]->co) ) {
efa= addfacelist(neweve[0], neweve[1], neweve[2], neweve[3], NULL, NULL);
efa= addface_from_edges();
if(efa==NULL) {
/* the order of vertices can be anything, 6 cases to check */
if( convex(neweve[0]->co, neweve[1]->co, neweve[2]->co, neweve[3]->co) ) {
efa= addfacelist(neweve[0], neweve[1], neweve[2], neweve[3], NULL, NULL);
}
else if( convex(neweve[0]->co, neweve[2]->co, neweve[3]->co, neweve[1]->co) ) {
efa= addfacelist(neweve[0], neweve[2], neweve[3], neweve[1], NULL, NULL);
}
else if( convex(neweve[0]->co, neweve[2]->co, neweve[1]->co, neweve[3]->co) ) {
efa= addfacelist(neweve[0], neweve[2], neweve[1], neweve[3], NULL, NULL);
}
else if( convex(neweve[1]->co, neweve[2]->co, neweve[3]->co, neweve[0]->co) ) {
efa= addfacelist(neweve[1], neweve[2], neweve[3], neweve[0], NULL, NULL);
}
else if( convex(neweve[1]->co, neweve[3]->co, neweve[0]->co, neweve[2]->co) ) {
efa= addfacelist(neweve[1], neweve[3], neweve[0], neweve[2], NULL, NULL);
}
else if( convex(neweve[1]->co, neweve[3]->co, neweve[2]->co, neweve[0]->co) ) {
efa= addfacelist(neweve[1], neweve[3], neweve[2], neweve[0], NULL, NULL);
}
else error("The selected vertices form a concave quad");
}
else if( convex(neweve[0]->co, neweve[2]->co, neweve[3]->co, neweve[1]->co) ) {
efa= addfacelist(neweve[0], neweve[2], neweve[3], neweve[1], NULL, NULL);
}
else if( convex(neweve[0]->co, neweve[2]->co, neweve[1]->co, neweve[3]->co) ) {
efa= addfacelist(neweve[0], neweve[2], neweve[1], neweve[3], NULL, NULL);
}
else if( convex(neweve[1]->co, neweve[2]->co, neweve[3]->co, neweve[0]->co) ) {
efa= addfacelist(neweve[1], neweve[2], neweve[3], neweve[0], NULL, NULL);
}
else if( convex(neweve[1]->co, neweve[3]->co, neweve[0]->co, neweve[2]->co) ) {
efa= addfacelist(neweve[1], neweve[3], neweve[0], neweve[2], NULL, NULL);
}
else if( convex(neweve[1]->co, neweve[3]->co, neweve[2]->co, neweve[0]->co) ) {
efa= addfacelist(neweve[1], neweve[3], neweve[2], neweve[0], NULL, NULL);
}
else error("The selected vertices form a concave quad");
}
}
else error("The selected vertices already form a face");