A few fixes:
* Loading old files didn't initialise the new rotation variables properly * Fixed some errors with the newly added operator for copying RNA-paths for properties * Auto-keyframing now correctly refreshes animation editors after adding keyframes. Made the keyingsets code send notifiers again, but now using the newly added WM_main_event_add() (thanks Brecht) * A few UI tweaks again for animation stuff (timeline, keyingsets UI)
This commit is contained in:
@@ -26,8 +26,6 @@ class OBJECT_PT_transform(ObjectButtonsPanel):
|
||||
|
||||
ob = context.object
|
||||
|
||||
|
||||
|
||||
row = layout.row()
|
||||
|
||||
row.column().itemR(ob, "location")
|
||||
|
||||
@@ -474,7 +474,7 @@ class SCENE_PT_keying_sets(SceneButtonsPanel):
|
||||
scene = context.scene
|
||||
|
||||
row = layout.row()
|
||||
row.itemL(text="Keying Sets")
|
||||
row.itemL(text="Keying Sets:")
|
||||
|
||||
row = layout.row()
|
||||
|
||||
@@ -512,7 +512,7 @@ class SCENE_PT_keying_set_paths(SceneButtonsPanel):
|
||||
ks = scene.active_keying_set
|
||||
|
||||
row = layout.row()
|
||||
row.itemL(text="Paths")
|
||||
row.itemL(text="Paths:")
|
||||
|
||||
row = layout.row()
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ class TIME_MT_frame(bpy.types.Menu):
|
||||
layout.itemS()
|
||||
|
||||
sub = layout.row()
|
||||
sub.active = tools.enable_auto_key
|
||||
#sub.active = tools.enable_auto_key
|
||||
sub.itemM("TIME_MT_autokey")
|
||||
|
||||
class TIME_MT_playback(bpy.types.Menu):
|
||||
|
||||
@@ -9912,6 +9912,24 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
|
||||
|
||||
/* put 2.50 compatibility code here until next subversion bump */
|
||||
{
|
||||
Object *ob;
|
||||
|
||||
/* New variables for axis-angle rotations and/or quaternion rotations were added, and need proper initialisation */
|
||||
for (ob= main->object.first; ob; ob= ob->id.next) {
|
||||
/* new variables for all objects */
|
||||
ob->quat[0]= 1.0f;
|
||||
ob->rotAxis[1]= 1.0f;
|
||||
|
||||
/* bones */
|
||||
if (ob->pose) {
|
||||
bPoseChannel *pchan;
|
||||
|
||||
for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
|
||||
/* just need to initalise rotation axis properly... */
|
||||
pchan->rotAxis[1]= 1.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
|
||||
|
||||
@@ -565,7 +565,7 @@ void ANIM_OT_paste_driver_button (wmOperatorType *ot)
|
||||
}
|
||||
|
||||
|
||||
/* Paste Driver Button Operator ------------------------ */
|
||||
/* Copy to Clipboard Button Operator ------------------------ */
|
||||
|
||||
static int copy_clipboard_button_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
@@ -579,7 +579,7 @@ static int copy_clipboard_button_exec(bContext *C, wmOperator *op)
|
||||
memset(&ptr, 0, sizeof(PointerRNA));
|
||||
uiAnimContextProperty(C, &ptr, &prop, &index);
|
||||
|
||||
if (ptr.data && prop) { // && RNA_property_animateable(ptr.data, prop)
|
||||
if (ptr.data && prop) {
|
||||
path= RNA_path_from_ID_to_property(&ptr, prop);
|
||||
|
||||
if (path) {
|
||||
@@ -597,15 +597,14 @@ void ANIM_OT_copy_clipboard_button(wmOperatorType *ot)
|
||||
/* identifiers */
|
||||
ot->name= "Copy Data Path";
|
||||
ot->idname= "ANIM_OT_copy_clipboard_button";
|
||||
ot->description= "Copy the rna data path to the clipboard.";
|
||||
ot->description= "Copy the RNA data path for this property to the clipboard.";
|
||||
|
||||
/* callbacks */
|
||||
ot->exec= copy_clipboard_button_exec;
|
||||
//op->poll= ??? // TODO: need to have some driver to be able to do this...
|
||||
//op->poll= ??? // TODO: need to have some valid property before this can be done
|
||||
|
||||
/* flags */
|
||||
ot->flag= 0;
|
||||
ot->flag= OPTYPE_REGISTER;
|
||||
}
|
||||
|
||||
|
||||
/* ************************************************** */
|
||||
|
||||
@@ -349,6 +349,7 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op)
|
||||
|
||||
/* add path to this setting */
|
||||
BKE_keyingset_add_destination(ks, ptr.id.data, NULL, path, index, pflag, KSP_GROUP_KSNAME);
|
||||
ks->active_path= BLI_countlist(&ks->paths);
|
||||
success= 1;
|
||||
|
||||
/* free the temp path created */
|
||||
@@ -1354,6 +1355,9 @@ int modify_keyframes (Scene *scene, ListBase *dsources, bAction *act, KeyingSet
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* send notifiers for updates (this doesn't require context to work!) */
|
||||
WM_main_add_notifier(NC_ANIMATION|ND_KEYFRAME_EDIT, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1484,6 +1488,9 @@ int modify_keyframes (Scene *scene, ListBase *dsources, bAction *act, KeyingSet
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* send notifiers for updates (this doesn't require context to work!) */
|
||||
WM_main_add_notifier(NC_ANIMATION|ND_KEYFRAME_EDIT, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -311,7 +311,8 @@ void ui_but_anim_menu(bContext *C, uiBut *but)
|
||||
}
|
||||
|
||||
uiItemS(layout);
|
||||
uiItemBooleanO(layout, "Copy Data Path", 0, "ANIM_OT_copy_clipboard_button", "all", 1);
|
||||
|
||||
uiItemO(layout, "Copy Data Path", 0, "ANIM_OT_copy_clipboard_button");
|
||||
|
||||
uiPupMenuEnd(C, pup);
|
||||
}
|
||||
|
||||
@@ -3939,6 +3939,7 @@ static void do_outliner_keyingset_editop(SpaceOops *soops, KeyingSet *ks, ListBa
|
||||
/* add a new path with the information obtained (only if valid) */
|
||||
// TODO: what do we do with group name? for now, we don't supply one, and just let this use the KeyingSet name
|
||||
BKE_keyingset_add_destination(ks, id, NULL, path, array_index, flag, groupmode);
|
||||
ks->active_path= BLI_countlist(&ks->paths);
|
||||
}
|
||||
break;
|
||||
case KEYINGSET_EDITMODE_REMOVE:
|
||||
@@ -3950,6 +3951,7 @@ static void do_outliner_keyingset_editop(SpaceOops *soops, KeyingSet *ks, ListBa
|
||||
/* free path's data */
|
||||
// TODO: we probably need an API method for this
|
||||
if (ksp->rna_path) MEM_freeN(ksp->rna_path);
|
||||
ks->active_path= 0;
|
||||
|
||||
/* remove path from set */
|
||||
BLI_freelinkN(&ks->paths, ksp);
|
||||
|
||||
@@ -54,6 +54,7 @@ static void rna_KeyingSet_add_destination(KeyingSet *keyingset, ReportList *repo
|
||||
/* if data is valid, call the API function for this */
|
||||
if (keyingset) {
|
||||
BKE_keyingset_add_destination(keyingset, id, group_name, rna_path, array_index, flag, grouping_method);
|
||||
keyingset->active_path= BLI_countlist(&keyingset->paths);
|
||||
}
|
||||
else {
|
||||
BKE_report(reports, RPT_ERROR, "Keying Set Destination could not be added.");
|
||||
|
||||
Reference in New Issue
Block a user