Fix #128702: Edge Slide can cause Blender to freeze
In non-manifold geometry, the original loop could fail to identify the correct slide direction because it checked for loop equality (`l_other != l_edge`), which might never be met. The condition has been revised to check for face equality (`l_other->f != l_edge->f`), ensuring the loop terminates correctly and preventing infinite iterations in problematic geometry cases.
This commit is contained in:
@@ -2456,7 +2456,7 @@ Array<TransDataEdgeSlideVert> transform_mesh_edge_slide_data_create(const TransD
|
||||
int best_dir = -1;
|
||||
const BMLoop *l_edge = l_src->next->v == v_dst ? l_src : l_src->prev;
|
||||
const BMLoop *l_other = l_edge->radial_next;
|
||||
while (l_other != l_edge) {
|
||||
do {
|
||||
if (l_other->f == curr_side_other->fdata[0].f) {
|
||||
best_dir = 0;
|
||||
break;
|
||||
@@ -2466,7 +2466,7 @@ Array<TransDataEdgeSlideVert> transform_mesh_edge_slide_data_create(const TransD
|
||||
break;
|
||||
}
|
||||
l_other = (l_other->v == this->v ? l_other->prev : l_other->next)->radial_next;
|
||||
}
|
||||
} while (l_other->f != l_edge->f);
|
||||
|
||||
if (best_dir != -1) {
|
||||
*r_do_isect_curr_dirs = true;
|
||||
|
||||
Reference in New Issue
Block a user