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
This commit is contained in:
parent
c98240139e
commit
7043f8b815
Notes:
blender-bot
2023-02-14 08:45:12 +01:00
Referenced by issue #76416, Armature Deform parenting option doesn't work with Grease Pencil objects
|
@ -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)
|
||||
|
|
|
@ -178,7 +178,11 @@ bool ED_gpencil_anim_copybuf_paste(struct bAnimContext *ac, const short copy_mod
|
|||
int ED_gpencil_session_active(void);
|
||||
int ED_undo_gpencil_step(struct bContext *C, int step, const char *name);
|
||||
|
||||
/* ------------ Grease-Pencil Armature weights ------------------ */
|
||||
/* ------------ Grease-Pencil Armature ------------------ */
|
||||
bool ED_gpencil_add_armature(const struct bContext *C,
|
||||
struct ReportList *reports,
|
||||
struct Object *ob,
|
||||
struct Object *ob_arm);
|
||||
bool ED_gpencil_add_armature_weights(const struct bContext *C,
|
||||
struct ReportList *reports,
|
||||
struct Object *ob,
|
||||
|
|
|
@ -899,7 +899,10 @@ bool ED_object_parent_set(ReportList *reports,
|
|||
invert_m4_m4(ob->parentinv, workob.obmat);
|
||||
}
|
||||
else if (pararm && (ob->type == OB_GPENCIL) && (par->type == OB_ARMATURE)) {
|
||||
if (partype == PAR_ARMATURE_NAME) {
|
||||
if (partype == PAR_ARMATURE) {
|
||||
ED_gpencil_add_armature(C, reports, ob, par);
|
||||
}
|
||||
else if (partype == PAR_ARMATURE_NAME) {
|
||||
ED_gpencil_add_armature_weights(C, reports, ob, par, GP_PAR_ARMATURE_NAME);
|
||||
}
|
||||
else if ((partype == PAR_ARMATURE_AUTO) || (partype == PAR_ARMATURE_ENVELOPE)) {
|
||||
|
|
Loading…
Reference in New Issue