forked from bartvdbraak/blender
Fix T40162: Vert connect creates extra face cutting across concave NGon.
We need to support cutting degenerate ngons, see: T39418 This commit disallows cuts across faces where the same vertices can create better cuts on different faces.
This commit is contained in:
parent
46bd759964
commit
dd8a9eee3b
@ -1104,6 +1104,21 @@ void BM_face_splits_check_legal(BMFace *f, BMLoop *(*loops)[2], int len)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This simply checks that the verts don't connect faces which would have more optimal splits.
|
||||
* but _not_ check for correctness.
|
||||
*/
|
||||
void BM_face_splits_check_optimal(BMFace *f, BMLoop *(*loops)[2], int len)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
BMLoop *l_a_dummy, *l_b_dummy;
|
||||
if (f != BM_vert_pair_share_face_by_angle(loops[i][0]->v, loops[i][1]->v, &l_a_dummy, &l_b_dummy, false)) {
|
||||
loops[i][0] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Small utility functions for fast access
|
||||
|
@ -63,6 +63,7 @@ void BM_face_triangulate(BMesh *bm, BMFace *f,
|
||||
const bool use_tag) ATTR_NONNULL(1, 2);
|
||||
|
||||
void BM_face_splits_check_legal(BMFace *f, BMLoop *(*loops)[2], int len) ATTR_NONNULL();
|
||||
void BM_face_splits_check_optimal(BMFace *f, BMLoop *(*loops)[2], int len) ATTR_NONNULL();
|
||||
|
||||
void BM_face_as_array_vert_tri(BMFace *f, BMVert *r_verts[3]) ATTR_NONNULL();
|
||||
void BM_face_as_array_vert_quad(BMFace *f, BMVert *r_verts[4]) ATTR_NONNULL();
|
||||
|
@ -84,6 +84,9 @@ static int bm_face_connect_verts(BMesh *bm, BMFace *f, const bool check_degenera
|
||||
if (check_degenerate) {
|
||||
BM_face_splits_check_legal(f, loops_split, STACK_SIZE(loops_split));
|
||||
}
|
||||
else {
|
||||
BM_face_splits_check_optimal(f, loops_split, STACK_SIZE(loops_split));
|
||||
}
|
||||
|
||||
for (i = 0; i < STACK_SIZE(loops_split); i++) {
|
||||
BMVert **v_pair;
|
||||
|
Loading…
Reference in New Issue
Block a user