Fix T93321: Modified Mirror modifier behavior break some other tools like bound SurfaceDeform.

Revert "Fix T91444: Edge Loop Preview fails with two Mirror Modifiers"

This reverts commit 1a7757b0bc.

Caused issue reported in T93321, boiling down to the fact that other
operations or modifiers (like the SurfaceDeform one) rely on the order
of the vertices in the mesh to remain consistent.

Changing this in a modifier would mean those operations need to be
reset/re-created (e.g. rebound for the SurfaceDeform case), which is not
doable in `do_version` code.
This commit is contained in:
Bastien Montagne 2021-11-24 16:20:07 +01:00
parent 726bc3a46b
commit e6cd4761e7
Notes: blender-bot 2023-02-14 05:28:01 +01:00
Referenced by issue #95541, Regression: Broken vertex weight with mirror modifier
Referenced by issue #93321, Blender 3.0 splash screen scene will rendered incorrectly
Referenced by issue #91444, Edge Loop Preview fails with two Mirror Modifiers
1 changed files with 5 additions and 12 deletions

View File

@ -260,16 +260,10 @@ Mesh *BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(MirrorModifierData *mmd,
mul_m4_v3(mtx, mv->co);
if (do_vtargetmap) {
/* Compare location of the original and mirrored vertex,
* to see if they should be mapped for merging.
*
* Always merge from the copied into the original vertices so it's possible to
* generate a 1:1 mapping by scanning vertices from the beginning of the array
* as is done in #BKE_editmesh_vert_coords_when_deformed. Without this,
* the coordinates returned will sometimes point to the copied vertex locations, see: T91444.
*/
/* compare location of the original and mirrored vertex, to see if they
* should be mapped for merging */
if (UNLIKELY(len_squared_v3v3(mv_prev->co, mv->co) < tolerance_sq)) {
*vtmap_b = i;
*vtmap_a = maxVerts + i;
tot_vtargetmap++;
/* average location */
@ -277,11 +271,10 @@ Mesh *BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(MirrorModifierData *mmd,
copy_v3_v3(mv_prev->co, mv->co);
}
else {
*vtmap_b = -1;
*vtmap_a = -1;
}
/* Fill here to avoid 2x loops. */
*vtmap_a = -1;
*vtmap_b = -1; /* fill here to avoid 2x loops */
vtmap_a++;
vtmap_b++;