def create_anim_curve_node_apione( times, values, node_attr=None, tangent_in_type=OpenMayaAnim1.MFnAnimCurve.kTangentGlobal, tangent_out_type=OpenMayaAnim1.MFnAnimCurve.kTangentGlobal, anim_type=OpenMayaAnim1.MFnAnimCurve.kAnimCurveTL, undo_cache=None): """ Create an animCurve using Maya API (one). :param times: Time values for the animCurve :type times: list :param values: Values for the animCurve. :type values: list :param node_attr: The 'plug' to connect the animCurve to. :type node_attr: str :param tangent_in_type: The "in" tangent type for keyframes. :type tangent_in_type: maya.OpenMayaAnim.MFnAnimCurve.kTangent* :param tangent_out_type: The "out" tangent type for keyframes. :type tangent_out_type: maya.OpenMayaAnim.MFnAnimCurve.kTangent* :param anim_type: The type of animation curve node. :type anim_type: maya.OpenMayaAnim.MFnAnimCurve.kAnimCurve* :param undo_cache: The Maya AnimCurve Undo Cache data structure or None if no undo is required. :type undo_cache: maya.OpenMayaAnim.MAnimCurveChange :return: MFnAnimCurve object attached to a newly created animation curve. :rtype: maya.OpenMaya.MFnAnimCurve """ if not isinstance(times, list): raise ValueError('times must be a list or sequence type.') if not isinstance(values, list): raise ValueError('times must be a list or sequence type.') if len(times) == 0: raise ValueError('times must have 1 or more values.') if len(values) == 0: raise ValueError('values must have 1 or more values.') if len(times) != len(values): raise ValueError('Number of times and values does not match.') # create anim curve animfn = OpenMayaAnim1.MFnAnimCurve() if node_attr is None: animCurve = animfn.create(anim_type) else: # Get the plug to be animated. dst_plug = node_utils.get_as_plug(node_attr) objs = OpenMaya1.MObjectArray() find = OpenMayaAnim1.MAnimUtil.findAnimation(dst_plug, objs) if find is True and objs.length() > 0: animfn = OpenMayaAnim1.MFnAnimCurve(objs[0]) else: animfn = OpenMayaAnim1.MFnAnimCurve() animfn.create(dst_plug) # Copy the times into an MTimeArray and the values into an MDoubleArray. time_array = OpenMaya1.MTimeArray() value_array = OpenMaya1.MDoubleArray() for time, value in zip(times, values): time_array.append(OpenMaya1.MTime(time, OpenMaya1.MTime.uiUnit())) value_array.append(value) # force a default undo cache if not undo_cache: undo_cache = OpenMayaAnim1.MAnimCurveChange() # Add the keys to the animCurve. animfn.addKeys( time_array, value_array, tangent_in_type, tangent_out_type, False, # overwrite any keys that get in our way undo_cache) return animfn
def pre_import(): if not cmds.pluginInfo('kikoUndoer', q=1, l=1): cmds.loadPlugin('kikoUndoer', quiet=True) MayaUndoHelper.anim_curve_change = OpenMayaAnim.MAnimCurveChange() MayaUndoHelper.dg_modifier = OpenMaya.MDGModifier()