diff --git a/release/scripts/modules/rigify.py b/release/scripts/modules/rigify.py index cc2096d142d..6f316a7ef4f 100644 --- a/release/scripts/modules/rigify.py +++ b/release/scripts/modules/rigify.py @@ -231,7 +231,9 @@ def generate_rig(context, ob): bpy.ops.object.mode_set(mode='EDIT') func(ob_new, pbone_name) bpy.ops.object.mode_set(mode='OBJECT') - + + # needed to update driver deps + context.scene.update() if __name__ == "__main__": generate_rig(bpy.context, bpy.context.object) diff --git a/source/blender/blenkernel/BKE_constraint.h b/source/blender/blenkernel/BKE_constraint.h index a8ccc84a7c3..e9110b99098 100644 --- a/source/blender/blenkernel/BKE_constraint.h +++ b/source/blender/blenkernel/BKE_constraint.h @@ -114,7 +114,7 @@ bConstraintTypeInfo *get_constraint_typeinfo(int type); void unique_constraint_name(struct bConstraint *con, struct ListBase *list); void free_constraints(struct ListBase *list); -void copy_constraints(struct ListBase *dst, struct ListBase *src); +void copy_constraints(struct ListBase *dst, const struct ListBase *src); void relink_constraints(struct ListBase *list); void free_constraint_data(struct bConstraint *con); diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 8fe80edabb9..cb6fef0bc30 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -153,7 +153,6 @@ void make_local_action(bAction *act) } } - void free_action (bAction *act) { /* sanity check */ diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 46fdec90528..0f3213cbc5d 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -3788,7 +3788,7 @@ void relink_constraints (ListBase *conlist) /* ......... */ /* duplicate all of the constraints in a constraint stack */ -void copy_constraints (ListBase *dst, ListBase *src) +void copy_constraints (ListBase *dst, const ListBase *src) { bConstraint *con, *srccon; diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h index 21b4c83bd88..bd735888f95 100644 --- a/source/blender/blenlib/BLI_listbase.h +++ b/source/blender/blenlib/BLI_listbase.h @@ -55,7 +55,7 @@ void BLI_sortlist(struct ListBase *listbase, int (*cmp)(void *, void *)); void BLI_freelist(struct ListBase *listbase); int BLI_countlist(struct ListBase *listbase); void BLI_freelinkN(struct ListBase *listbase, void *vlink); -void BLI_duplicatelist(struct ListBase *list1, struct ListBase *list2); /* copy from 2 to 1 */ +void BLI_duplicatelist(struct ListBase *list1, const struct ListBase *list2); /* create a generic list node containing link to provided data */ struct LinkData *BLI_genericNodeN(void *data); diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c index b3a4722d6d9..166f4ed029e 100644 --- a/source/blender/blenlib/intern/listbase.c +++ b/source/blender/blenlib/intern/listbase.c @@ -343,7 +343,7 @@ int BLI_findindex(ListBase *listbase, void *vlink) return -1; } -void BLI_duplicatelist(ListBase *list1, ListBase *list2) /* copy from 2 to 1 */ +void BLI_duplicatelist(ListBase *list1, const ListBase *list2) { struct Link *link1, *link2; diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c index 95f6f3802af..ac7e76abc13 100644 --- a/source/blender/editors/object/object_relations.c +++ b/source/blender/editors/object/object_relations.c @@ -616,26 +616,21 @@ static int parent_set_exec(bContext *C, wmOperator *op) // XXX currently this should only happen for meshes, curves, surfaces, and lattices - this stuff isn't available for metas yet if (ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_LATTICE)) { - switch (partype) - { - case PAR_CURVE: /* curve deform */ - { - CurveModifierData *cmd= ED_object_modifier_add(op->reports, scene, ob, eModifierType_Curve); - cmd->object= par; - } - break; - case PAR_LATTICE: /* lattice deform */ - { - LatticeModifierData *lmd= ED_object_modifier_add(op->reports, scene, ob, eModifierType_Lattice); - lmd->object= par; - } - break; - default: /* armature deform */ - { - ArmatureModifierData *amd= ED_object_modifier_add(op->reports, scene, ob, eModifierType_Armature); - amd->object= par; - } - break; + ModifierData *md; + + switch (partype) { + case PAR_CURVE: /* curve deform */ + md= ED_object_modifier_add(op->reports, scene, ob, eModifierType_Curve); + ((CurveModifierData *)md)->object= par; + break; + case PAR_LATTICE: /* lattice deform */ + md= ED_object_modifier_add(op->reports, scene, ob, eModifierType_Lattice); + ((LatticeModifierData *)md)->object= par; + break; + default: /* armature deform */ + md= ED_object_modifier_add(op->reports, scene, ob, eModifierType_Armature); + ((ArmatureModifierData *)md)->object= par; + break; } } } diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c index 6b21f886712..05fd9889e31 100644 --- a/source/blender/makesrna/intern/rna_scene_api.c +++ b/source/blender/makesrna/intern/rna_scene_api.c @@ -44,16 +44,29 @@ #include "BKE_depsgraph.h" #include "ED_object.h" +#include "ED_anim_api.h" #include "WM_api.h" -static void rna_Scene_set_frame(Scene *sce, bContext *C, int frame) +static void rna_Scene_set_frame(Scene *scene, bContext *C, int frame) { - sce->r.cfra= frame; - CLAMP(sce->r.cfra, MINAFRAME, MAXFRAME); - scene_update_for_newframe(sce, (1<<20) - 1); + scene->r.cfra= frame; + CLAMP(scene->r.cfra, MINAFRAME, MAXFRAME); + scene_update_for_newframe(scene, (1<<20) - 1); - WM_event_add_notifier(C, NC_SCENE|ND_FRAME, sce); + WM_event_add_notifier(C, NC_SCENE|ND_FRAME, scene); +} + +static void rna_Scene_update(Scene *scene, bContext *C) +{ + /* added to update driver deps, copied from do_graph_region_driver_buttons + * but can be extended with update options */ + + /* rebuild depsgraph for the new deps */ + DAG_scene_sort(scene); + + /* force an update of depsgraph */ + ED_anim_dag_flush_update(C); } static KeyingSet *rna_Scene_add_keying_set(Scene *sce, ReportList *reports, @@ -96,6 +109,10 @@ void RNA_api_scene(StructRNA *srna) parm= RNA_def_int(func, "frame", 0, MINAFRAME, MAXFRAME, "", "Frame number to set.", MINAFRAME, MAXFRAME); RNA_def_property_flag(parm, PROP_REQUIRED); + func= RNA_def_function(srna, "update", "rna_Scene_update"); + RNA_def_function_flag(func, FUNC_USE_CONTEXT); + RNA_def_function_ui_description(func, "Rebuild the scene dependancy graph."); + /* Add Keying Set */ func= RNA_def_function(srna, "add_keying_set", "rna_Scene_add_keying_set"); RNA_def_function_ui_description(func, "Add a new Keying Set to Scene.");