From 7043f8b815f3da10e56668230dee1a438af7e49d Mon Sep 17 00:00:00 2001 From: Philipp Oeser Date: Tue, 5 May 2020 13:53:47 +0200 Subject: Fix T76416: Armature Deform parenting option doesn't work with Grease Pencil objects If we parent with type `PAR_ARMATURE` (where vertexgroups are already set up and named correctly according to the corresponding bones), we still need an armature modifier. This just wasnt added. In contrast to meshes [which add their armature modifier early in `ED_object_parent_set`], grease pencil used to do this (adding the armature modifier) in `ED_gpencil_add_armature_weights`. Now split ED_gpencil_add_armature_weights in two: - ED_gpencil_add_armature - ED_gpencil_add_armature_weights (which calls ED_gpencil_add_armature) - use ED_gpencil_add_armature for the PAR_ARMATURE case Maniphest Tasks: T76416 Differential Revision: https://developer.blender.org/D7625 --- source/blender/editors/gpencil/gpencil_armature.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'source/blender/editors/gpencil') diff --git a/source/blender/editors/gpencil/gpencil_armature.c b/source/blender/editors/gpencil/gpencil_armature.c index 1528c448c0b..ab8b1a9719b 100644 --- a/source/blender/editors/gpencil/gpencil_armature.c +++ b/source/blender/editors/gpencil/gpencil_armature.c @@ -481,8 +481,7 @@ static void gpencil_object_vgroup_calc_from_armature(const bContext *C, DEG_relations_tag_update(CTX_data_main(C)); } -bool ED_gpencil_add_armature_weights( - const bContext *C, ReportList *reports, Object *ob, Object *ob_arm, int mode) +bool ED_gpencil_add_armature(const bContext *C, ReportList *reports, Object *ob, Object *ob_arm) { Main *bmain = CTX_data_main(C); Scene *scene = CTX_data_scene(C); @@ -516,11 +515,24 @@ bool ED_gpencil_add_armature_weights( return false; } } + return true; +} + +bool ED_gpencil_add_armature_weights( + const bContext *C, ReportList *reports, Object *ob, Object *ob_arm, int mode) +{ + if (ob == NULL) { + return false; + } + + bool success = ED_gpencil_add_armature(C, reports, ob, ob_arm); /* add weights */ - gpencil_object_vgroup_calc_from_armature(C, ob, ob_arm, mode, DEFAULT_RATIO, DEFAULT_DECAY); + if (success) { + gpencil_object_vgroup_calc_from_armature(C, ob, ob_arm, mode, DEFAULT_RATIO, DEFAULT_DECAY); + } - return true; + return success; } /* ***************** Generate armature weights ************************** */ static bool gpencil_generate_weights_poll(bContext *C) -- cgit v1.2.3