[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22756] branches/blender2.5/blender/source /blender: 2.5 - Keying Sets API (now usable from Py-Scripts)
Joshua Leung
aligorith at gmail.com
Tue Aug 25 06:05:38 CEST 2009
Revision: 22756
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22756
Author: aligorith
Date: 2009-08-25 06:05:37 +0200 (Tue, 25 Aug 2009)
Log Message:
-----------
2.5 - Keying Sets API (now usable from Py-Scripts)
Wrapped the Keying Sets API with RNA Functions so that they can now be called from Py-Scripts. This will ultimately be useful for riggers to create Keying Sets which can get loaded up/created for animators to use after importing their rig.
I've created a demo for this, which can be found at:
http://www.pasteall.org/blend/552
Notes:
- Kazanbas, I've had to create a rna_scene_api.c here to hold some of the relevant functions. Hopefully this won't cause you too much pain when you do your next merge from 2.5 to your branch ;)
- I've noticed that there seem to be a few cases mentioned in the demo which don't totally work yet. I'll commit some fixes for those later.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c
branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h
branches/blender2.5/blender/source/blender/makesrna/RNA_enum_types.h
branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_animation.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c
Added Paths:
-----------
branches/blender2.5/blender/source/blender/makesrna/intern/rna_animation_api.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene_api.c
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c 2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c 2009-08-25 04:05:37 UTC (rev 22756)
@@ -207,12 +207,6 @@
/* *********************************** */
/* KeyingSet API */
-/* NOTES:
- * It is very likely that there will be two copies of the api - one for internal use,
- * and one 'operator' based wrapper of the internal API, which should allow for access
- * from Python/scripts so that riggers can automate the creation of KeyingSets for their rigs.
- */
-
/* Finding Tools --------------------------- */
/* Find the first path that matches the given criteria */
@@ -299,18 +293,25 @@
KS_Path *ksp;
/* sanity checks */
- if ELEM(NULL, ks, rna_path)
+ if ELEM(NULL, ks, rna_path) {
+ printf("ERROR: no Keying Set and/or RNA Path to add destination with \n");
return;
+ }
/* ID is optional for relative KeyingSets, but is necessary for absolute KeyingSets */
if (id == NULL) {
- if (ks->flag & KEYINGSET_ABSOLUTE)
+ if (ks->flag & KEYINGSET_ABSOLUTE) {
+ printf("ERROR: No ID provided for absolute destination. \n");
return;
+ }
}
/* don't add if there is already a matching KS_Path in the KeyingSet */
- if (BKE_keyingset_find_destination(ks, id, group_name, rna_path, array_index, groupmode))
+ if (BKE_keyingset_find_destination(ks, id, group_name, rna_path, array_index, groupmode)) {
+ if (G.f & G_DEBUG)
+ printf("ERROR: destination already exists in Keying Set \n");
return;
+ }
/* allocate a new KeyingSet Path */
ksp= MEM_callocN(sizeof(KS_Path), "KeyingSet Path");
@@ -1263,6 +1264,7 @@
dummy_strip.act= adt->action;
dummy_strip.remap= adt->remap;
+ /* action range is calculated taking F-Modifiers into account (which making new strips doesn't do due to the troublesome nature of that) */
calc_action_range(dummy_strip.act, &dummy_strip.actstart, &dummy_strip.actend, 1);
dummy_strip.start = dummy_strip.actstart;
dummy_strip.end = (IS_EQ(dummy_strip.actstart, dummy_strip.actend)) ? (dummy_strip.actstart + 1.0f): (dummy_strip.actend);
Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c 2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_ops.c 2009-08-25 04:05:37 UTC (rev 22756)
@@ -398,9 +398,6 @@
WM_operatortype_append(ANIM_OT_add_driver_button);
WM_operatortype_append(ANIM_OT_remove_driver_button);
-
- WM_operatortype_append(ANIM_OT_keyingset_add_new);
- WM_operatortype_append(ANIM_OT_keyingset_add_destination);
}
void ED_keymap_anim(wmWindowManager *wm)
Modified: branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c 2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c 2009-08-25 04:05:37 UTC (rev 22756)
@@ -80,137 +80,6 @@
/* ************************************************** */
/* KEYING SETS - EDITING API */
-/* Operators ------------------------------------------- */
-
-/* These operators are only provided for scripting/macro usage, not for direct
- * calling from the UI since they wrap some of the data-access API code for these
- * (defined in blenkernel) which have quite a few properties.
- */
-
-/* ----- */
-
-static int keyingset_add_destination_exec (bContext *C, wmOperator *op)
-{
- PointerRNA ptr;
- KeyingSet *ks= NULL;
- ID *id= NULL;
- char rna_path[256], group_name[64]; // xxx
- short groupmode=0, flag=0;
- int array_index=0;
-
- /* get settings from operator properties */
- ptr = RNA_pointer_get(op->ptr, "keyingset");
- if (ptr.data)
- ks= (KeyingSet *)ptr.data;
-
- ptr = RNA_pointer_get(op->ptr, "id");
- if (ptr.data)
- id= (ID *)ptr.data;
-
- groupmode= RNA_enum_get(op->ptr, "grouping_method");
- RNA_string_get(op->ptr, "group_name", group_name);
-
- RNA_string_get(op->ptr, "rna_path", rna_path);
- array_index= RNA_int_get(op->ptr, "array_index");
-
- if (RNA_boolean_get(op->ptr, "entire_array"))
- flag |= KSP_FLAG_WHOLE_ARRAY;
-
- /* if enough args are provided, call API method */
- if (ks) {
- BKE_keyingset_add_destination(ks, id, group_name, rna_path, array_index, flag, groupmode);
- return OPERATOR_FINISHED;
- }
- else {
- BKE_report(op->reports, RPT_ERROR, "Keying Set could not be added.");
- return OPERATOR_CANCELLED;
- }
-}
-
-void ANIM_OT_keyingset_add_destination (wmOperatorType *ot)
-{
- // XXX: this is also defined in rna_animation.c
- static EnumPropertyItem prop_mode_grouping_items[] = {
- {KSP_GROUP_NAMED, "NAMED", 0, "Named Group", ""},
- {KSP_GROUP_NONE, "NONE", 0, "None", ""},
- {KSP_GROUP_KSNAME, "KEYINGSET", 0, "Keying Set Name", ""},
- {0, NULL, 0, NULL, NULL}};
-
- /* identifiers */
- ot->name= "Add Keying Set Destination";
- ot->idname= "ANIM_OT_keyingset_add_destination";
-
- /* callbacks */
- ot->exec= keyingset_add_destination_exec;
- ot->poll= ED_operator_scene_editable;
-
- /* props */
- /* pointers */ // xxx - do we want to directly expose these?
- RNA_def_pointer_runtime(ot->srna, "keyingset", &RNA_KeyingSet, "Keying Set", "Keying Set to add destination to.");
- RNA_def_pointer_runtime(ot->srna, "id", &RNA_ID, "ID", "ID-block for the destination.");
- /* grouping */
- RNA_def_enum(ot->srna, "grouping_method", prop_mode_grouping_items, KSP_GROUP_NAMED, "Grouping Method", "Method used to define which Group-name to use.");
- RNA_def_string(ot->srna, "group_name", "", 64, "Group Name", "Name of Action Group to assign destination to (only if grouping mode is to use this name).");
- /* rna-path */
- RNA_def_string(ot->srna, "rna_path", "", 256, "RNA-Path", "RNA-Path to destination property."); // xxx hopefully this is long enough
- RNA_def_int(ot->srna, "array_index", 0, 0, INT_MAX, "Array Index", "If applicable, the index ", 0, INT_MAX);
- /* flags */
- RNA_def_boolean(ot->srna, "entire_array", 1, "Entire Array", "hen an 'array/vector' type is chosen (Location, Rotation, Color, etc.), entire array is to be used.");
-
-}
-
-/* ----- */
-
-static int keyingset_add_new_exec (bContext *C, wmOperator *op)
-{
- Scene *sce= CTX_data_scene(C);
- KeyingSet *ks= NULL;
- short flag=0, keyingflag=0;
- char name[64];
-
- /* get settings from operator properties */
- RNA_string_get(op->ptr, "name", name);
-
- if (RNA_boolean_get(op->ptr, "absolute"))
- flag |= KEYINGSET_ABSOLUTE;
- if (RNA_boolean_get(op->ptr, "insertkey_needed"))
- keyingflag |= INSERTKEY_NEEDED;
- if (RNA_boolean_get(op->ptr, "insertkey_visual"))
- keyingflag |= INSERTKEY_MATRIX;
-
- /* call the API func, and set the active keyingset index */
- ks= BKE_keyingset_add(&sce->keyingsets, name, flag, keyingflag);
-
- if (ks) {
- sce->active_keyingset= BLI_countlist(&sce->keyingsets);
- return OPERATOR_FINISHED;
- }
- else {
- BKE_report(op->reports, RPT_ERROR, "Keying Set could not be added.");
- return OPERATOR_CANCELLED;
- }
-}
-
-void ANIM_OT_keyingset_add_new (wmOperatorType *ot)
-{
- /* identifiers */
- ot->name= "Add Keying Set";
- ot->idname= "ANIM_OT_keyingset_add_new";
-
- /* callbacks */
- ot->exec= keyingset_add_new_exec;
- ot->poll= ED_operator_scene_editable;
-
- /* props */
- /* name */
- RNA_def_string(ot->srna, "name", "KeyingSet", 64, "Name", "Name of Keying Set");
- /* flags */
- RNA_def_boolean(ot->srna, "absolute", 1, "Absolute", "Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)");
- /* keying flags */
- RNA_def_boolean(ot->srna, "insertkey_needed", 0, "Insert Keyframes - Only Needed", "Only insert keyframes where they're needed in the relevant F-Curves.");
- RNA_def_boolean(ot->srna, "insertkey_visual", 0, "Insert Keyframes - Visual", "Insert keyframes based on 'visual transforms'.");
-}
-
/* UI API --------------------------------------------- */
/* Build menu-string of available keying-sets (allocates memory for string)
Modified: branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h 2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_keyframing.h 2009-08-25 04:05:37 UTC (rev 22756)
@@ -154,15 +154,6 @@
/* Initialise builtin KeyingSets on startup */
void init_builtin_keyingsets(void);
-/* -------- */
-
-/* KeyingSet Editing Operators:
- * These can add a new KeyingSet and/or add 'destinations' to the KeyingSets,
- * acting as a means by which they can be added outside the Outliner.
- */
-void ANIM_OT_keyingset_add_new(struct wmOperatorType *ot);
-void ANIM_OT_keyingset_add_destination(struct wmOperatorType *ot);
-
/* ************ Drivers ********************** */
/* Main Driver Management API calls:
Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_enum_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/RNA_enum_types.h 2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/makesrna/RNA_enum_types.h 2009-08-25 04:05:37 UTC (rev 22756)
@@ -41,6 +41,8 @@
extern EnumPropertyItem beztriple_handle_type_items[];
extern EnumPropertyItem beztriple_interpolation_mode_items[];
+extern EnumPropertyItem keyingset_path_grouping_items[];
+
extern EnumPropertyItem fmodifier_type_items[];
extern EnumPropertyItem nla_mode_extend_items[];
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-08-25 01:46:05 UTC (rev 22755)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-08-25 04:05:37 UTC (rev 22756)
@@ -1942,7 +1942,7 @@
{"rna_ID.c", NULL, RNA_def_ID},
{"rna_texture.c", NULL, RNA_def_texture},
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list