diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/anim_sys.c | 17 | ||||
-rw-r--r-- | source/blender/editors/curve/editcurve.c | 1 | ||||
-rw-r--r-- | source/blender/editors/object/object_relations.c | 13 |
3 files changed, 14 insertions, 17 deletions
diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 22f5ac181f1..e03799ff938 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -1872,22 +1872,7 @@ void BKE_animsys_evaluate_all_animation (Main *main, float ctime) EVAL_ANIM_IDS(main->mball.first, ADT_RECALC_ANIM); /* curves */ - /* we need to perform a special hack here to ensure that the ctime - * value of the curve gets set in case there's no animation for that - * - it needs to be set before animation is evaluated just so that - * animation can successfully override... - * - it shouldn't get set when calculating drivers... - */ - for (id= main->curve.first; id; id= id->next) { - AnimData *adt= BKE_animdata_from_id(id); - Curve *cu= (Curve *)id; - - /* set ctime variable for curve */ - cu->ctime= ctime; - - /* now execute animation data on top of this as per normal */ - BKE_animsys_evaluate_animdata(id, adt, ctime, ADT_RECALC_ANIM); - } + EVAL_ANIM_IDS(main->curve.first, ADT_RECALC_ANIM); /* armatures */ EVAL_ANIM_IDS(main->armature.first, ADT_RECALC_ANIM); diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index a116cc10be7..9dfca2d61bf 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -6018,7 +6018,6 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf) cu= (Curve*)obedit->data; cu->flag |= CU_DEFORM_FILL; - cu->ctime= CFRA; if(type & CU_PRIM_PATH) cu->flag |= CU_PATH|CU_3D; } else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA); diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index d92aeb13547..b1c027a2f24 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -57,6 +57,7 @@ #include "BKE_depsgraph.h" #include "BKE_displist.h" #include "BKE_global.h" +#include "BKE_fcurve.h" #include "BKE_lattice.h" #include "BKE_library.h" #include "BKE_main.h" @@ -82,6 +83,7 @@ #include "ED_armature.h" #include "ED_curve.h" +#include "ED_keyframing.h" #include "ED_object.h" #include "ED_screen.h" #include "ED_view3d.h" @@ -546,6 +548,17 @@ static int parent_set_exec(bContext *C, wmOperator *op) } else cu->flag |= CU_FOLLOW; + /* if follow, add F-Curve for ctime (i.e. "eval_time") so that path-follow works */ + if(partype == PAR_FOLLOW) { + /* get or create F-Curve */ + bAction *act = verify_adt_action(&cu->id, 1); + FCurve *fcu = verify_fcurve(act, NULL, "eval_time", 0, 1); + + /* setup dummy 'generator' modifier here to get 1-1 correspondance still working */ + if (!fcu->bezt && !fcu->fpt && !fcu->modifiers.first) + add_fmodifier(&fcu->modifiers, FMODIFIER_TYPE_GENERATOR); + } + /* fall back on regular parenting now (for follow only) */ if(partype == PAR_FOLLOW) partype= PAR_OBJECT; |