[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19699] branches/blender2.5/blender/source /blender/editors/animation: 2. 5 - Separated Keying Sets code out into its own file
Joshua Leung
aligorith at gmail.com
Mon Apr 13 04:40:58 CEST 2009
Revision: 19699
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19699
Author: aligorith
Date: 2009-04-13 04:40:56 +0200 (Mon, 13 Apr 2009)
Log Message:
-----------
2.5 - Separated Keying Sets code out into its own file
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/editors/animation/keyframing.c
Added Paths:
-----------
branches/blender2.5/blender/source/blender/editors/animation/anim_intern.h
branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
Added: branches/blender2.5/blender/source/blender/editors/animation/anim_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_intern.h (rev 0)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_intern.h 2009-04-13 02:40:56 UTC (rev 19699)
@@ -0,0 +1,40 @@
+/* Testing code for 2.5 animation system
+ * Copyright 2009, Joshua Leung
+ */
+
+#ifndef ANIM_INTERN_H
+#define ANIM_INTERN_H
+
+/* ----------- Common Keyframe Destination Sources ------------ */
+/* (used as part of KeyingSets/Keyframing interface as separation from context) */
+
+/* temporary struct to gather data combos to keyframe */
+typedef struct bCommonKeySrc {
+ struct bCommonKeySrc *next, *prev;
+
+ /* general data/destination-source settings */
+ ID *id; /* id-block this comes from */
+
+ /* specific cases */
+ bPoseChannel *pchan;
+ bConstraint *con;
+} bCommonKeySrc;
+
+/* KeyingSets/Keyframing Interface ------------- */
+
+/* list of builtin KeyingSets (defined in keyingsets.c) */
+extern ListBase builtin_keyingsets;
+
+/* mode for modify_keyframes */
+enum {
+ MODIFYKEY_MODE_INSERT = 0,
+ MODIFYKEY_MODE_DELETE,
+} eModifyKey_Modes;
+
+short keyingset_context_ok_poll(bContext *C, KeyingSet *ks);
+
+short modifykey_get_context_data (bContext *C, ListBase *dsources, KeyingSet *ks);
+
+int modify_keyframes(bContext *C, ListBase *dsources, KeyingSet *ks, short mode, float cfra);
+
+#endif // ANIM_INTERN_H
Modified: branches/blender2.5/blender/source/blender/editors/animation/keyframing.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/keyframing.c 2009-04-13 00:49:22 UTC (rev 19698)
+++ branches/blender2.5/blender/source/blender/editors/animation/keyframing.c 2009-04-13 02:40:56 UTC (rev 19699)
@@ -50,23 +50,8 @@
#include "RNA_define.h"
#include "RNA_types.h"
-/* ************************************************** */
-/* LOCAL TYPES AND DEFINES */
+#include "anim_intern.h"
-/* ----------- Common KeyData Sources ------------ */
-
-/* temporary struct to gather data combos to keyframe */
-typedef struct bCommonKeySrc {
- struct bCommonKeySrc *next, *prev;
-
- /* general data/destination-source settings */
- ID *id; /* id-block this comes from */
-
- /* specific cases */
- bPoseChannel *pchan;
- bConstraint *con;
-} bCommonKeySrc;
-
/* ******************************************* */
/* Animation Data Validation */
@@ -867,879 +852,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", "Named Group", ""},
- {KSP_GROUP_NONE, "NONE", "None", ""},
- {KSP_GROUP_KSNAME, "KEYINGSET", "Keying Set Name", ""},
- {0, NULL, 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)
- * NOTE: mode must not be longer than 64 chars
- */
-char *ANIM_build_keyingsets_menu (ListBase *list, short for_edit)
-{
- DynStr *pupds= BLI_dynstr_new();
- KeyingSet *ks;
- char buf[64];
- char *str;
- int i;
-
- /* add title first */
- BLI_dynstr_append(pupds, "Keying Sets%t|");
-
- /* add dummy entries for none-active */
- if (for_edit) {
- BLI_dynstr_append(pupds, "Add New%x-1|");
- BLI_dynstr_append(pupds, " %x0|");
- }
- else
- BLI_dynstr_append(pupds, "<No Keying Set Active>%x0|");
-
- /* loop through keyingsets, adding them */
- for (ks=list->first, i=1; ks; ks=ks->next, i++) {
- if (for_edit == 0)
- BLI_dynstr_append(pupds, "KS: ");
-
- BLI_dynstr_append(pupds, ks->name);
- BLI_snprintf( buf, 64, "%%x%d%s", i, ((ks->next)?"|":"") );
- BLI_dynstr_append(pupds, buf);
- }
-
- /* convert to normal MEM_malloc'd string */
- str= BLI_dynstr_get_cstring(pupds);
- BLI_dynstr_free(pupds);
-
- return str;
-}
-
-
-/* ******************************************* */
-/* KEYING SETS - BUILTIN */
-
-#if 0 // XXX old keyingsets code based on adrcodes... to be restored in due course
-
-/* --------- KeyingSet Adrcode Getters ------------ */
-
-/* initialise a channel-getter storage */
-static void ks_adrcodegetter_init (bKS_AdrcodeGetter *kag, bKeyingSet *ks, bCommonKeySrc *cks)
-{
- /* error checking */
- if (kag == NULL)
- return;
-
- if (ELEM(NULL, ks, cks)) {
- /* set invalid settings that won't cause harm */
- kag->ks= NULL;
- kag->cks= NULL;
- kag->index= -2;
- kag->tot= 0;
- }
- else {
- /* store settings */
- kag->ks= ks;
- kag->cks= cks;
-
- /* - index is -1, as that allows iterators to return first element
- * - tot is chan_num by default, but may get overriden if -1 is encountered (for extension-type getters)
- */
- kag->index= -1;
- kag->tot= ks->chan_num;
- }
-}
-
-/* 'default' channel-getter that will be used when iterating through keyingset's channels
- * - iteration will stop when adrcode <= 0 is encountered, so we use that as escape
- */
-static short ks_getnextadrcode_default (bKS_AdrcodeGetter *kag)
-{
- bKeyingSet *ks= (kag)? kag->ks : NULL;
-
- /* error checking */
- if (ELEM(NULL, kag, ks)) return 0;
- if (kag->tot <= 0) return 0;
-
- kag->index++;
- if ((kag->index < 0) || (kag->index >= kag->tot)) return 0;
-
- /* return the adrcode stored at index then */
- return ks->adrcodes[kag->index];
-}
-
-/* add map flag (for MTex channels, as certain ones need special offset) */
-static short ks_getnextadrcode_addmap (bKS_AdrcodeGetter *kag)
-{
- short adrcode= ks_getnextadrcode_default(kag);
-
- /* if there was an adrcode returned, assume that kag stuff is set ok */
- if (adrcode) {
- bCommonKeySrc *cks= kag->cks;
- bKeyingSet *ks= kag->ks;
-
- if (ELEM3(ks->blocktype, ID_MA, ID_LA, ID_WO)) {
- switch (adrcode) {
- case MAP_OFS_X: case MAP_OFS_Y: case MAP_OFS_Z:
- case MAP_SIZE_X: case MAP_SIZE_Y: case MAP_SIZE_Z:
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list