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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to