Fix T55965: shrinkwrap modifier apply not working.

This commit is contained in:
Brecht Van Lommel 2018-07-13 18:09:51 +02:00
parent 23ca12ec47
commit cfe2c3213f
Notes: blender-bot 2023-02-14 05:34:57 +01:00
Referenced by issue #55965, Apply shrinkwrap bug
1 changed files with 12 additions and 6 deletions

View File

@ -691,23 +691,29 @@ int ED_object_modifier_apply(
if (md != ob->modifiers.first)
BKE_report(reports, RPT_INFO, "Applied modifier was not first, result may not be as expected");
/* Get evaluated modifier, so object links pointer to evaluated data,
* but still use original object it is applied to the original mesh. */
Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob);
ModifierData *md_eval = (ob_eval) ? modifiers_findByName(ob_eval, md->name) : md;
/* allow apply of a not-realtime modifier, by first re-enabling realtime. */
prev_mode = md->mode;
md->mode |= eModifierMode_Realtime;
prev_mode = md_eval->mode;
md_eval->mode |= eModifierMode_Realtime;
if (mode == MODIFIER_APPLY_SHAPE) {
if (!modifier_apply_shape(bmain, reports, depsgraph, scene, ob, md)) {
md->mode = prev_mode;
if (!modifier_apply_shape(bmain, reports, depsgraph, scene, ob, md_eval)) {
md_eval->mode = prev_mode;
return 0;
}
}
else {
if (!modifier_apply_obdata(reports, depsgraph, scene, ob, md)) {
md->mode = prev_mode;
if (!modifier_apply_obdata(reports, depsgraph, scene, ob, md_eval)) {
md_eval->mode = prev_mode;
return 0;
}
}
md_eval->mode = prev_mode;
BLI_remlink(&ob->modifiers, md);
modifier_free(md);