I am currently working on an importer for captured Shape Key motions. To fasten up the process, I am using the method suggested here. It works perfectly and saves up to a few minutes per import.
I am confused about the way the keyframes are displayed in the viewport. The keyframes show up in the Graph Editor and Dopesheet (Shape Key Editor view) like this:
Here is what I am doing:
if object_with_shape_keys:
keyblocks = object_with_shape_keys.data.shape_keys.key_blocks
for i, key in enumerate(keyblocks):
if i == 0:
continue
# values captured in nano seconds:
values = self.get_values_for_animation(shape_key_animation_values, frame_count, index = i-1)
dp = 'key_blocks["{}"].value'.format(key.name)
fc = self.get_fcurve(mocap_action, data_path = dp) or None
# When there is no fcurve existing for that datapath,
# then we can simply create a new one and populate it
if not fc:
fc = mocap_action.fcurves.new(dp, index = i)
# Create new keyframe points and populate captured values
fc.keyframe_points.add(count = frame_count)
fc.keyframe_points.foreach_set('co', [x for co in zip(frames, values) for x in co])
The issue I am having with it is that the keyframes do not show up in the data tab in the object properties and I cannot get them to show up. It looks like this:
When I manually add a keyframe to one of the Shape Keys then I the interface looks like this:
What's worse is that after manually adding a keyframe, the previously working motion is overwritten for that specific Shape Key...
To summarize: There is a discrepancy between the keyframe_points stored in the individual fcurves and the keyframes displayed in the viewport. I am wondering if I am missing something or if this is intended behavior. I hope I made myself clear!
Thanks a lot in advance!


