This is the code I'm using (2011x64.hotfix3-win7)

import maya.OpenMaya as om
import maya.OpenMayaAnim as oma

#variables outside the scope of this but should be straight forward
plug = MPlug_from_elsewhere
values = list_of_values_from_elsewhere

#initialize function set
anim_curve_function_set = oma.MFnAnimCurve()

#detect the type of curve to create from the plug
type = anim_curve_function_set.timedAnimCurveTypeForPlug(plug)

#create the curve
mnew_curve = anim_curve_function_set.create(type)

#build the values for addKeys
time_array = om.MTimeArray()
values_array = om.MDoubleArray()

for index,value in enumerate(values):
    time_array.append(om.MTime(index,om.MTime.uiUnit()))
    values_array.append(value)

anim_curve_function_set.addKeys(time_array,values_array,oma.MFnAnimCurve.kTangentLinear,oma.MFnAnimCurve.kTangentLinear
)


Hope that helps.

Ian

On Thu, Feb 17, 2011 at 12:02 PM, mtherrell <[email protected]> wrote:
> so, i think the root of the problem is that:
>
> the docs say that upon using the 'create' function of the MFnAnimCurve
> function set,
> that the function set becomes attached to the newly created curve so
> that you could:
>
> crv.addKeys(...)
>
> but i cannot get the function set attached to the python
> representation of MObject 'crv'
> even using:
>
> openMayaAnim.MFnAnimCurve.setObject(crv)
>
> so when i finally do go to try to add the keyframes to the curve node,
> i can't use the 'crv' MObject itself to do the operation.
>
> anyone know how to make sure that the curve MObject generated with the
> 'create' function of MFnAnimCurve
> attaches the MFnAnimCurve function set?, so that one can manipulate
> the curve using MFnAnimCurve after curve creation?
>
> -thanks
> -mt
>
> On Feb 15, 5:01 pm, mtherrell <[email protected]> wrote:
>> Hoping i am just doing somthing wrong,
>> but:
>>
>> import maya.OpenMayaAnim as omAn
>>
>> ## instance the MFnAnimCurve() function set
>> crvFnc = omAn.MFnAnimCurve()
>>
>> ## make a curve
>> crv = crvFnc.create(mplug,crvtype)
>>
>> ## ok it has all worked so far.........
>> ## but then:
>>
>> ## (om.MTime().kFilm.... no variation makes a difference .. even just
>> leaving the mtime type out of it)
>> time = om.MTime(1 , om.MTime.kFilm)
>>
>> crv.addKey(time , 2.5 , MFnAnimCurve.kTangentStep ,
>> MFnAnimCurve.kTangentStep)
>>
>> ### errors:
>> # Error: addKey
>> # Traceback (most recent call last):
>> # File "<maya console>", line 4, in <module>
>> # File "C:\Users\mtherrell\Documents\maya\milldev\millToolMaya.py",
>> line 91, in createAnimCurveOnLayer
>> #
>> crv.addKey(time,tvp[1],MFnAnimCurve.kTangentStep ,MFnAnimCurve.kTangentStep)
>> # File "D:\buildforge\Maya_2011_Win64_Build\build\wrk\optim\runTime
>> \Python\Lib\site-packages\maya\OpenMaya.py", line 1466, in <lambda>
>> # File "D:\buildforge\Maya_2011_Win64_Build\build\wrk\optim\runTime
>> \Python\Lib\site-packages\maya\OpenMaya.py", line 34, in _swig_getattr
>> # AttributeError: addKey #
>>
>> the same "_swig_getattr", "AttributeError" for any of the addKey(s) or
>> addKeyframe functions of MFnAnimcurve in the python API.
>> It seems like this mysterious location of OpenMaya.py (which does not
>> actually exist on my computer) is some internal way of refering to the
>> Python/Lib/site-Packages/OpenMaya.pyc file which is the only file
>> close to that name that does exist, and must be where maya is getting
>> it python api functionality from. (i guess we are not allowed by
>> Autodesk to see the original OpenMaya.py to figure out whats wrong.)
>>
>> This is the error, however, that one gets when one refers to a
>> function or attribute of a function that does not exist. as though
>> within the MfnAnimCurve function set for python, they forgot to add
>> the 'addKey' and 'addKeyFrame(s)' functions.
>> But the functions are members.. see below
>>
>> i do not want to use mel setKeyFrame or keyframe. too slow. takes many
>> seconds to build keyframes for all the attrs i entend to animate.
>> this works fine in the normal c++ API, but i want to have this
>> functionality in a python script (for well known and well discussed
>> reasons.)
>> .. this should be possible.
>>
>> i want to use the python API to create an AnimCurve node with all its
>> keys and values in one fell swoop in order to make what i am doing
>> fast and in python, and in a script.
>>
>> any ideas where this is going wrong?
>>
>> to see what member functions exist:
>> one can list all the member functions of a class in python.
>> i did this to the MFnAnimCurve function set.
>> in the python script editor i did this:
>>
>>
>>
>> import maya.OpenMayaAnim
>> import inspect
>>
>> crvFnc = OpenMayaAnim.MFnAnimCurve()
>> funclist = inspect.getmembers(crvFnc)
>>
>> for func in funclist:
>>     print func
>>
>> <<<<
>>
>> they deffinately did not forget to add the methods related to
>> addKey(s):
>> because they are there in the list of functions including all
>> inhereted.
>>
>> so either they are not working properly, i am not sending arguments to
>> them in the right way, or they are not intended by maya to work in
>> python yet they are not documented as "No Script Support" in the
>> current API docs for 2011.
>
> --
> http://groups.google.com/group/python_inside_maya
>

-- 
http://groups.google.com/group/python_inside_maya

Reply via email to