Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/startup/keyingsets_builtins.py18
-rw-r--r--source/blender/editors/armature/pose_lib.c5
-rw-r--r--source/blender/editors/include/ED_keyframing.h1
3 files changed, 20 insertions, 4 deletions
diff --git a/release/scripts/startup/keyingsets_builtins.py b/release/scripts/startup/keyingsets_builtins.py
index 0b4fbd52b5d..e04b55ec4d2 100644
--- a/release/scripts/startup/keyingsets_builtins.py
+++ b/release/scripts/startup/keyingsets_builtins.py
@@ -43,6 +43,7 @@ ANIM_KS_SCALING_ID = "Scaling"
ANIM_KS_LOC_ROT_SCALE_ID = "LocRotScale"
ANIM_KS_AVAILABLE_ID = "Available"
ANIM_KS_WHOLE_CHARACTER_ID = "WholeCharacter"
+ANIM_KS_WHOLE_CHARACTER_SELECTED_ID = "WholeCharacterSelected"
# Location
@@ -522,9 +523,24 @@ class BUILTIN_KSI_WholeCharacter(KeyingSetInfo):
elif prop_rna.is_animatable:
ksi.addProp(ks, bone, prop)
+# All properties that are likely to get animated in a character rig, only selected bones.
+class BUILTIN_KSI_WholeCharacterSelected(BUILTIN_KSI_WholeCharacter):
+ """Insert a keyframe for all properties that are likely to get animated in a character rig """
+ """(only selected bones)"""
+ bl_idname = ANIM_KS_WHOLE_CHARACTER_SELECTED_ID
+ bl_label = "Whole Character (Selected bones)"
-###############################
+ # iterator - all bones regardless of selection
+ def iterator(ksi, context, ks):
+ # Use either the selected bones, or all of them if none are selected.
+ bones = context.selected_pose_bones or context.active_object.pose.bones
+ for bone in bones:
+ if bone.name.startswith(BUILTIN_KSI_WholeCharacterSelected.badBonePrefixes):
+ continue
+ ksi.generate(context, ks, bone)
+
+###############################
# Delta Location
class BUILTIN_KSI_DeltaLocation(KeyingSetInfo):
diff --git a/source/blender/editors/armature/pose_lib.c b/source/blender/editors/armature/pose_lib.c
index 4af7f3f8727..9309592bb46 100644
--- a/source/blender/editors/armature/pose_lib.c
+++ b/source/blender/editors/armature/pose_lib.c
@@ -461,7 +461,7 @@ static int poselib_add_exec(bContext *C, wmOperator *op)
bAction *act = poselib_validate(ob);
bPose *pose = (ob) ? ob->pose : NULL;
TimeMarker *marker;
- KeyingSet *ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_WHOLE_CHARACTER_ID); /* this includes custom props :)*/
+ KeyingSet *ks;
int frame = RNA_int_get(op->ptr, "frame");
char name[64];
@@ -495,8 +495,7 @@ static int poselib_add_exec(bContext *C, wmOperator *op)
BLI_uniquename(&act->markers, marker, DATA_("Pose"), '.', offsetof(TimeMarker, name), sizeof(marker->name));
/* use Keying Set to determine what to store for the pose */
- /* FIXME: in the past, the Keying Set respected selections (LocRotScale), but the current one doesn't
- * (WholeCharacter) so perhaps we need either a new Keying Set, or just to add overrides here... */
+ ks = ANIM_builtin_keyingset_get_named(NULL, ANIM_KS_WHOLE_CHARACTER_SELECTED_ID); /* this includes custom props :)*/
ANIM_apply_keyingset(C, NULL, act, ks, MODIFYKEY_MODE_INSERT, (float)frame);
/* store new 'active' pose number */
diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h
index 602e203a381..07cdff687a3 100644
--- a/source/blender/editors/include/ED_keyframing.h
+++ b/source/blender/editors/include/ED_keyframing.h
@@ -389,6 +389,7 @@ bool ED_autokeyframe_pchan(struct bContext *C, struct Scene *scene, struct Objec
#define ANIM_KS_LOC_ROT_SCALE_ID "LocRotScale"
#define ANIM_KS_AVAILABLE_ID "Available"
#define ANIM_KS_WHOLE_CHARACTER_ID "WholeCharacter"
+#define ANIM_KS_WHOLE_CHARACTER_SELECTED_ID "WholeCharacterSelected"
#ifdef __cplusplus
}