From aff23c92cc48b2e4b36cc0e5c56c2aabc72d6335 Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Wed, 9 Feb 2011 00:51:30 +0000 Subject: Bugfix [#25990] backward compatibility with ShapeKey Actions :: 2.49 -> 2.50 Actionified ShapeKey IPO-blocks (i.e. "Shape Key Actions") would have an action channel with the hardcoded name, "Shape", and this action would be assigned to Object level (although ShapeKey blocks had their own IPO-block slot, only Objects could have actions, so actionifying ShapeKey IPO-blocks would wrap a ShapeKey block's IPO's to an Object- level action). Hence, the path conversions code would wrongly interpret this action channel as referring to a Pose Channel instead, thus creating some invalid paths with a 'pose.bones["Shape"]' prefix wrongly getting tacked on. To ensure that the converted animation can work out of the box, a 'data.shape_keys' prefix is now used instead so that these actions can still be Object-rooted while still being able to correctly control the Shape Keys. This is because there's no easy way to identify and then shift such action from Object-level to ShapeKey- level within the conversion code. The consequence though is that such converted ShapeKey actions CAN ONLY BE USED THROUGH OBJECT LEVEL (i.e. via Action NOT ShapeKey editor). Secondly, the Action/ShapeKey editor version patching code has been modified so that if a ShapeKey editor view was active when loading an old 2.4x file, the action gets cleared from the view. This is because of this didn't make semantic sense: the ShapeKey editor is for ShapeKey-rooted actions, while the Action Editor is for Object-rooted actions. The converted files though let Object-level actions be shown in either one. --- source/blender/blenkernel/intern/ipo.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'source/blender/blenkernel/intern/ipo.c') diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index db995fd4f1d..d8ebe40db16 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -914,8 +914,17 @@ static char *get_rna_access (int blocktype, int adrcode, char actname[], char co sprintf(buf, "pose.bones[\"%s\"].constraints[\"%s\"]", actname, constname); } else if (actname && actname[0]) { - /* Pose-Channel */ - sprintf(buf, "pose.bones[\"%s\"]", actname); + if ((blocktype == ID_OB) && strcmp(actname, "Object")==0) { + /* Actionified "Object" IPO's... no extra path stuff needed */ + } + else if ((blocktype == ID_KE) && strcmp(actname, "Shape")==0) { + /* Actionified "Shape" IPO's - these are forced onto object level via the action container there... */ + strcpy(buf, "data.shape_keys"); + } + else { + /* Pose-Channel */ + sprintf(buf, "pose.bones[\"%s\"]", actname); + } } else if (constname && constname[0]) { /* Constraint in Object */ -- cgit v1.2.3