diff options
author | mano-wii <germano.costa@ig.com.br> | 2020-02-01 05:58:32 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2020-02-01 05:58:32 +0300 |
commit | bf8a26b7453d9b980a77452c3510afba0d35af01 (patch) | |
tree | e603ae1a11de38813ca52fc1176d1af6dcfaaf2c /source/blender/blenkernel/intern/crazyspace.c | |
parent | 26d0f7ed23ec6fe81208bfeda9282217ec7c2211 (diff) |
Fix T54292: CrazySpace transform calculation error
The function `modifiers_disable_subsurf_temporary` disables
temporarily only subsurf modifiers with the `On Cage` option enabled.
But a modifier can act on cage even with this option disabled.
Differential Revision: https://developer.blender.org/D6722
Diffstat (limited to 'source/blender/blenkernel/intern/crazyspace.c')
-rw-r--r-- | source/blender/blenkernel/intern/crazyspace.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/source/blender/blenkernel/intern/crazyspace.c b/source/blender/blenkernel/intern/crazyspace.c index 33f9b5b1012..85b58da61de 100644 --- a/source/blender/blenkernel/intern/crazyspace.c +++ b/source/blender/blenkernel/intern/crazyspace.c @@ -81,17 +81,16 @@ static void set_crazy_vertex_quat(float r_quat[4], sub_qt_qtqt(r_quat, q2, q1); } -static int modifiers_disable_subsurf_temporary(Object *ob) +static bool modifiers_disable_subsurf_temporary(struct Scene *scene, Object *ob) { - ModifierData *md; - int disabled = 0; + bool disabled = false; + int cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1); - for (md = ob->modifiers.first; md; md = md->next) { + ModifierData *md = ob->modifiers.first; + for (int i = 0; md && i <= cageIndex; i++, md = md->next) { if (md->type == eModifierType_Subsurf) { - if (md->mode & eModifierMode_OnCage) { - md->mode ^= eModifierMode_DisableTemporary; - disabled = 1; - } + md->mode ^= eModifierMode_DisableTemporary; + disabled = true; } } @@ -108,7 +107,7 @@ float (*BKE_crazyspace_get_mapped_editverts(struct Depsgraph *depsgraph, Object BMEditMesh *editmesh_eval = mesh_eval->edit_mesh; /* disable subsurf temporal, get mapped cos, and enable it */ - if (modifiers_disable_subsurf_temporary(obedit_eval)) { + if (modifiers_disable_subsurf_temporary(scene_eval, obedit_eval)) { /* need to make new derivemesh */ makeDerivedMesh(depsgraph, scene_eval, obedit_eval, editmesh_eval, &CD_MASK_BAREMESH); } @@ -122,7 +121,7 @@ float (*BKE_crazyspace_get_mapped_editverts(struct Depsgraph *depsgraph, Object mesh_get_mapped_verts_coords(mesh_eval_cage, vertexcos, nverts); /* set back the flag, no new cage needs to be built, transform does it */ - modifiers_disable_subsurf_temporary(obedit_eval); + modifiers_disable_subsurf_temporary(scene_eval, obedit_eval); return vertexcos; } |