diff options
-rw-r--r-- | source/blender/editors/gpencil/gpencil_armature.c | 20 | ||||
-rw-r--r-- | source/blender/editors/include/ED_gpencil.h | 6 | ||||
-rw-r--r-- | source/blender/editors/object/object_relations.c | 5 |
3 files changed, 25 insertions, 6 deletions
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) diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h index d63353d3886..1403ae1f3cc 100644 --- a/source/blender/editors/include/ED_gpencil.h +++ b/source/blender/editors/include/ED_gpencil.h @@ -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, diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 256e32c7bfc..759af18ed2b 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -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)) { |