In one of my scripts i do something like this for rotations :
trs = MTransformationMatrix(local_matrix) # i grab the matrix i need
.
.
if set_rotate_order:
trs = trs.reorderRotation(rotate_order+1) # set the rotation order
euler = trs.rotation(asQuaternion=False) # grab rotation values from matrix
euler = om2.MEulerRotation(euler.x, euler.y, euler.z, rotate_order)
euler.reorder(rotate_order) # re-order rotations
# Write values per frames
keys["rotateX"].append((frame, euler.x))
keys["rotateY"].append((frame, euler.y))
keys["rotateZ"].append((frame, euler.z))
.
.
.
# Then after passing all my keys i apply them to anim curves.
# Use addKeys to set all keys in one go for efficiency
times = [om2.MTime(frame, om2.MTime.uiUnit()) for frame, _ in frame_values]|
values = [value for _, value in frame_values]|
animFn.addKeys(times, values)|