Blender V4.3
keyingsets.cc File Reference
#include <cfloat>
#include <cmath>
#include <cstddef>
#include <cstdio>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_utildefines.h"
#include "DNA_anim_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BKE_animsys.h"
#include "BKE_context.hh"
#include "BKE_main.hh"
#include "BKE_report.hh"
#include "DEG_depsgraph.hh"
#include "ANIM_keyframing.hh"
#include "ANIM_keyingsets.hh"
#include "ED_keyframing.hh"
#include "ED_screen.hh"
#include "UI_interface.hh"
#include "UI_resources.hh"
#include "WM_api.hh"
#include "WM_types.hh"
#include "RNA_access.hh"
#include "RNA_define.hh"
#include "RNA_enum_types.hh"
#include "RNA_path.hh"
#include "anim_intern.hh"

Go to the source code of this file.

Macros

#define APPLY_KEYINGFLAG_OVERRIDE(kflag)
 

Functions

static bool keyingset_poll_default_add (bContext *C)
 
static bool keyingset_poll_active_edit (bContext *C)
 
static bool keyingset_poll_activePath_edit (bContext *C)
 
static int add_default_keyingset_exec (bContext *C, wmOperator *)
 
void ANIM_OT_keying_set_add (wmOperatorType *ot)
 
static int remove_active_keyingset_exec (bContext *C, wmOperator *op)
 
void ANIM_OT_keying_set_remove (wmOperatorType *ot)
 
static int add_empty_ks_path_exec (bContext *C, wmOperator *op)
 
void ANIM_OT_keying_set_path_add (wmOperatorType *ot)
 
static int remove_active_ks_path_exec (bContext *C, wmOperator *op)
 
void ANIM_OT_keying_set_path_remove (wmOperatorType *ot)
 
static int add_keyingset_button_exec (bContext *C, wmOperator *op)
 
void ANIM_OT_keyingset_button_add (wmOperatorType *ot)
 
static int remove_keyingset_button_exec (bContext *C, wmOperator *op)
 
void ANIM_OT_keyingset_button_remove (wmOperatorType *ot)
 
static int keyingset_active_menu_invoke (bContext *C, wmOperator *op, const wmEvent *)
 
static int keyingset_active_menu_exec (bContext *C, wmOperator *op)
 
static void build_keyingset_enum (bContext *C, EnumPropertyItem **item, int *totitem, bool *r_free)
 
static const EnumPropertyItemkeyingset_set_active_enum_itemf (bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
 
void ANIM_OT_keying_set_active_set (wmOperatorType *ot)
 
KeyingSetInfoANIM_keyingset_info_find_name (const char name[])
 
KeyingSetANIM_builtin_keyingset_get_named (const char name[])
 
void ANIM_keyingset_info_register (KeyingSetInfo *keyingset_info)
 
void ANIM_keyingset_info_unregister (Main *bmain, KeyingSetInfo *keyingset_info)
 
void ANIM_keyingset_infos_exit ()
 
bool ANIM_keyingset_find_id (KeyingSet *keyingset, ID *id)
 
KeyingSetANIM_scene_get_active_keyingset (const Scene *scene)
 
int ANIM_scene_get_keyingset_index (Scene *scene, KeyingSet *keyingset)
 
KeyingSetANIM_get_keyingset_for_autokeying (const Scene *scene, const char *transformKSName)
 
static void anim_keyingset_visit_for_search_impl (const bContext *C, blender::FunctionRef< void(StringPropertySearchVisitParams)> visit_fn, const bool use_poll)
 
void ANIM_keyingset_visit_for_search (const bContext *C, PointerRNA *, PropertyRNA *, const char *, blender::FunctionRef< void(StringPropertySearchVisitParams)> visit_fn)
 
void ANIM_keyingset_visit_for_search_no_poll (const bContext *C, PointerRNA *, PropertyRNA *, const char *, blender::FunctionRef< void(StringPropertySearchVisitParams)> visit_fn)
 
const EnumPropertyItemANIM_keying_sets_enum_itemf (bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
 
KeyingSetANIM_keyingset_get_from_enum_type (Scene *scene, int type)
 
KeyingSetANIM_keyingset_get_from_idname (Scene *scene, const char *idname)
 
bool ANIM_keyingset_context_ok_poll (bContext *C, KeyingSet *keyingset)
 
static void RKS_ITER_overrides_list (KeyingSetInfo *keyingset_info, bContext *C, KeyingSet *keyingset, blender::Vector< PointerRNA > &sources)
 
void ANIM_relative_keyingset_add_source (blender::Vector< PointerRNA > &sources, ID *id, StructRNA *srna, void *data)
 
void ANIM_relative_keyingset_add_source (blender::Vector< PointerRNA > &sources, ID *id)
 
blender::animrig::ModifyKeyReturn ANIM_validate_keyingset (bContext *C, blender::Vector< PointerRNA > *sources, KeyingSet *keyingset)
 
static eInsertKeyFlags keyingset_apply_keying_flags (const eInsertKeyFlags base_flags, const eInsertKeyFlags overrides, const eInsertKeyFlags own_flags)
 
static int insert_key_to_keying_set_path (bContext *C, KS_Path *keyingset_path, KeyingSet *keyingset, const eInsertKeyFlags insert_key_flags, const blender::animrig::ModifyKeyMode mode, const float frame)
 
int ANIM_apply_keyingset (bContext *C, blender::Vector< PointerRNA > *sources, KeyingSet *keyingset, const blender::animrig::ModifyKeyMode mode, const float cfra)
 

Variables

static ListBase keyingset_type_infos = {nullptr, nullptr}
 
ListBase builtin_keyingsets = {nullptr, nullptr}
 

Macro Definition Documentation

◆ APPLY_KEYINGFLAG_OVERRIDE

#define APPLY_KEYINGFLAG_OVERRIDE ( kflag)
Value:
if (overrides & kflag) { \
result &= ~kflag; \
result |= (own_flags & kflag); \
}

Referenced by keyingset_apply_keying_flags().

Function Documentation

◆ add_default_keyingset_exec()

◆ add_empty_ks_path_exec()

◆ add_keyingset_button_exec()

◆ ANIM_apply_keyingset()

int ANIM_apply_keyingset ( bContext * C,
blender::Vector< PointerRNA > * sources,
KeyingSet * keyingset,
blender::animrig::ModifyKeyMode mode,
float cfra )

Use the specified KeyingSet and context info (if required) to add/remove various Keyframes on the specified frame.

Modify keyframes for the channels specified by the KeyingSet. This takes into account many of the different combinations of using KeyingSets.

Returns
the number of channels that key-frames were added or an #eModifyKey_Returns value (always a negative number).

Definition at line 1134 of file keyingsets.cc.

References ANIM_validate_keyingset(), BKE_reportf(), BLI_assert, CTX_data_scene(), CTX_wm_reports(), error(), insert_key_to_keying_set_path(), INSERTKEY_NOFLAGS, int, KeyingSet::keyingflag, KeyingSet::keyingoverride, keyingset_apply_keying_flags(), LISTBASE_FOREACH, KeyingSet::name, KeyingSet::paths, and RPT_WARNING.

Referenced by blender::animrig::autokeyframe_object(), blender::animrig::autokeyframe_object(), blender::animrig::autokeyframe_pchan(), blender::animrig::autokeyframe_pose_channel(), delete_key_using_keying_set(), ED_view3d_camera_autokey(), insert_key_with_keyingset(), pose_clear_transform_generic_exec(), poseAnim_mapping_autoKeyframe(), and poselib_keytag_pose().

◆ ANIM_builtin_keyingset_get_named()

KeyingSet * ANIM_builtin_keyingset_get_named ( const char name[])

Find builtin KeyingSet by name.

Returns
The first builtin KeyingSet with the given name

Definition at line 581 of file keyingsets.cc.

References builtin_keyingsets, LISTBASE_FOREACH, printf, and STREQ.

Referenced by ANIM_get_keyingset_for_autokeying().

◆ ANIM_get_keyingset_for_autokeying()

◆ ANIM_keying_sets_enum_itemf()

const EnumPropertyItem * ANIM_keying_sets_enum_itemf ( bContext * C,
PointerRNA * ptr,
PropertyRNA * prop,
bool * r_free )

◆ ANIM_keyingset_context_ok_poll()

bool ANIM_keyingset_context_ok_poll ( bContext * C,
KeyingSet * keyingset )

◆ ANIM_keyingset_find_id()

bool ANIM_keyingset_find_id ( KeyingSet * keyingset,
ID * id )

Check if the ID appears in the paths specified by the KeyingSet.

Definition at line 666 of file keyingsets.cc.

References BLI_findptr(), ELEM, offsetof, and KeyingSet::paths.

Referenced by insert_key_with_keyingset().

◆ ANIM_keyingset_get_from_enum_type()

KeyingSet * ANIM_keyingset_get_from_enum_type ( Scene * scene,
int type )

Get the keying set from enum values generated in ANIM_keying_sets_enum_itemf.

Type is the Keying Set the user specified to use when calling the operator:

Parameters
type
  • == 0: use scene's active Keying Set.
  • > 0: use a user-defined Keying Set from the active scene.
  • < 0: use a builtin Keying Set.

Definition at line 846 of file keyingsets.cc.

References BLI_findlink(), and builtin_keyingsets.

Referenced by insert_key_exec(), and keyingset_get_from_op_with_error().

◆ ANIM_keyingset_get_from_idname()

KeyingSet * ANIM_keyingset_get_from_idname ( Scene * scene,
const char * idname )

Definition at line 861 of file keyingsets.cc.

References BLI_findstring(), builtin_keyingsets, and offsetof.

Referenced by keyingset_get_from_op_with_error().

◆ ANIM_keyingset_info_find_name()

KeyingSetInfo * ANIM_keyingset_info_find_name ( const char name[])

Find KeyingSet type info given a name.

Definition at line 570 of file keyingsets.cc.

References BLI_findstring(), keyingset_type_infos, and offsetof.

Referenced by ANIM_keyingset_context_ok_poll(), and ANIM_validate_keyingset().

◆ ANIM_keyingset_info_register()

void ANIM_keyingset_info_register ( KeyingSetInfo * keyingset_info)

◆ ANIM_keyingset_info_unregister()

void ANIM_keyingset_info_unregister ( Main * bmain,
KeyingSetInfo * keyingset_info )

Remove the given KeyingSetInfo from the list of type infos, and also remove the builtin set if appropriate.

Definition at line 626 of file keyingsets.cc.

References BKE_keyingset_free_paths(), BLI_freelinkN(), BLI_remlink(), BLI_remlink_safe(), builtin_keyingsets, ListBase::first, KeyingSetInfo::idname, keyingset_type_infos, LISTBASE_FOREACH_MUTABLE, MEM_freeN(), scene, Main::scenes, and STREQ.

◆ ANIM_keyingset_infos_exit()

void ANIM_keyingset_infos_exit ( )

◆ ANIM_keyingset_visit_for_search()

void ANIM_keyingset_visit_for_search ( const bContext * C,
PointerRNA * ptr,
PropertyRNA * prop,
const char * edit_text,
blender::FunctionRef< void(StringPropertySearchVisitParams)> visit_fn )

Definition at line 794 of file keyingsets.cc.

References anim_keyingset_visit_for_search_impl().

◆ anim_keyingset_visit_for_search_impl()

static void anim_keyingset_visit_for_search_impl ( const bContext * C,
blender::FunctionRef< void(StringPropertySearchVisitParams)> visit_fn,
const bool use_poll )
static

◆ ANIM_keyingset_visit_for_search_no_poll()

void ANIM_keyingset_visit_for_search_no_poll ( const bContext * C,
PointerRNA * ptr,
PropertyRNA * prop,
const char * edit_text,
blender::FunctionRef< void(StringPropertySearchVisitParams)> visit_fn )

◆ ANIM_OT_keying_set_active_set()

◆ ANIM_OT_keying_set_add()

◆ ANIM_OT_keying_set_path_add()

◆ ANIM_OT_keying_set_path_remove()

◆ ANIM_OT_keying_set_remove()

◆ ANIM_OT_keyingset_button_add()

◆ ANIM_OT_keyingset_button_remove()

◆ ANIM_relative_keyingset_add_source() [1/2]

void ANIM_relative_keyingset_add_source ( blender::Vector< PointerRNA > & sources,
ID * id )

◆ ANIM_relative_keyingset_add_source() [2/2]

◆ ANIM_scene_get_active_keyingset()

◆ ANIM_scene_get_keyingset_index()

int ANIM_scene_get_keyingset_index ( Scene * scene,
KeyingSet * keyingset )

Get the index of the Keying Set provided, for the given Scene.

Definition at line 699 of file keyingsets.cc.

References BLI_findindex(), and builtin_keyingsets.

◆ ANIM_validate_keyingset()

blender::animrig::ModifyKeyReturn ANIM_validate_keyingset ( bContext * C,
blender::Vector< PointerRNA > * sources,
KeyingSet * keyingset )

Given a KeyingSet and context info, validate Keying Set's paths. This is only really necessary with relative/built-in KeyingSets where their list of paths is dynamically generated based on the current context info.

Note
Passing sources as pointer because it can be a nullptr.
Returns
0 if succeeded, otherwise an error code: #eModifyKey_Returns.

Definition at line 933 of file keyingsets.cc.

References ANIM_keyingset_info_find_name(), BKE_keyingset_free_paths(), BLI_listbase_is_empty(), KeyingSet::flag, KeyingSetInfo::iter, KEYINGSET_ABSOLUTE, KeyingSet::paths, KeyingSetInfo::poll, RKS_ITER_overrides_list(), and KeyingSet::typeinfo.

Referenced by ANIM_apply_keyingset(), pose_select_same_keyingset(), and blender::ed::object::select_grouped_keyingset().

◆ build_keyingset_enum()

◆ insert_key_to_keying_set_path()

◆ keyingset_active_menu_exec()

static int keyingset_active_menu_exec ( bContext * C,
wmOperator * op )
static

◆ keyingset_active_menu_invoke()

static int keyingset_active_menu_invoke ( bContext * C,
wmOperator * op,
const wmEvent *  )
static

◆ keyingset_apply_keying_flags()

static eInsertKeyFlags keyingset_apply_keying_flags ( const eInsertKeyFlags base_flags,
const eInsertKeyFlags overrides,
const eInsertKeyFlags own_flags )
static

◆ keyingset_poll_active_edit()

static bool keyingset_poll_active_edit ( bContext * C)
static

Definition at line 64 of file keyingsets.cc.

References CTX_data_scene().

Referenced by ANIM_OT_keying_set_path_add(), and ANIM_OT_keying_set_remove().

◆ keyingset_poll_activePath_edit()

static bool keyingset_poll_activePath_edit ( bContext * C)
static

◆ keyingset_poll_default_add()

static bool keyingset_poll_default_add ( bContext * C)
static

Definition at line 57 of file keyingsets.cc.

References CTX_data_scene().

Referenced by ANIM_OT_keying_set_add().

◆ keyingset_set_active_enum_itemf()

static const EnumPropertyItem * keyingset_set_active_enum_itemf ( bContext * C,
PointerRNA * ,
PropertyRNA * ,
bool * r_free )
static

◆ remove_active_keyingset_exec()

◆ remove_active_ks_path_exec()

◆ remove_keyingset_button_exec()

◆ RKS_ITER_overrides_list()

static void RKS_ITER_overrides_list ( KeyingSetInfo * keyingset_info,
bContext * C,
KeyingSet * keyingset,
blender::Vector< PointerRNA > & sources )
static

Definition at line 901 of file keyingsets.cc.

References KeyingSetInfo::generate, and ptr.

Referenced by ANIM_validate_keyingset().

Variable Documentation

◆ builtin_keyingsets

◆ keyingset_type_infos

ListBase keyingset_type_infos = {nullptr, nullptr}
static