Hey Fabio -
I got some good news and some bad news.
Good news: I don't think you're doing anything wrong.
Bad news: ...but it just doesn't work.
In other words, I think it's a bug with the python implementation of
this function. Can anybody else confirm? I tried:
import maya.OpenMaya as om
import maya.OpenMayaFX as omfx
import maya.cmds as cmds
fluidTransformName = cmds.createNode('transform')
fluidShapeName = cmds.createNode('fluidShape', parent=fluidTransformName)
# Need this, or the fluid shape doesn't register correctly when
# we try to call MFnFluid(...)
cmds.refresh()
selList = om.MSelectionList()
selList.add(fluidShapeName)
dag = om.MDagPath()
selList.getDagPath(0, dag)
print dag.fullPathName()
selList.getDependNode(0, mobj)
fluidNode = omfx.MFnFluid(dag)
ptrs = []
for i in xrange(3):
ptrs.append(om.MScriptUtil().asFloatPtr())
fluidNode.getColors(*ptrs)
...and got the same error as Fabio.
The thing here is that it's complaining about argument TWO - but
according to the docs, argument two is the exact same as argument
one... so if it worked for one, it SHOULD work for two. So I'm pretty
sure it's a bug.
Oh, and for future reference - if a c++ function declaration says it
requires a "float*&" - or more generally, a "anything&" - you can
pretty much ignore the '&' when dealing with the python side of things
(assuming the python wrapper has been implemented correctly). The '&'
has more to do with how the function handles the argument within the
function than with what sort of thing you need to pass it when
invoking it.
- Paul
On Thu, Aug 20, 2009 at 11:27 PM, holofermes<[email protected]> wrote:
>
> My eyes hurt!
> I really looked everywhere, and didn't find anything about how to pass
> this kind of argument.
> Please HELP!
> ///
>
> On Aug 19, 6:36 pm, holofermes <[email protected]> wrote:
>> Thanks!
>> That's what I needed! I'm getting there!
>> Now I'm running in a problem that I fear being big. MScriptUtil.
>>
>> the MFnFluid has a method getColors that as arguments needs 3 float
>> *&. As I was looking around the group, and in the web, I couldn't find
>> anything about passing a pointer and reference argument. If I pass it
>> as
>>
>> pointerMagic = om.MScriptUtil()
>> ptr = pointerMagic.asFloatPtr()
>> ptg = pointerMagic.asFloatPtr()
>> ptb = pointerMagic.asFloatPtr()
>>
>> the actual value that each float returns is:
>> # Result: _b0144915_p_float #
>>
>> but when I pass these values to getColors():
>>
>> fluidNode.getColors(ptr,ptg,ptb)
>>
>> it raises a TypeError:
>>
>> # TypeError: in method 'MFnFluid_getColors', argument 2 of type 'float
>> *&' #
>>
>> Question is:
>> Any possibilities of pasing a reference as an argument to the
>> function?
>>
>> Thanks!!!!!!!
>> /Fabio
>>
>> On Aug 19, 12:59 pm, Paul Molodowitch <[email protected]> wrote:
>>
>> > Ah - you're starting down the path of API programming there. If you
>> > haven't already taken a look at them, the basic references to start
>> > are:
>>
>> >http://download.autodesk.com/us/maya/2009help/API/index.htmlhttp://do......
>>
>> > Also, robthebloke had a good site on stuff on the api - sadly, it died
>> > (go to robthebloke.org for a truly touching memorial)... - but
>> > happily, like a good horror movie sequel, it was brought back to life
>> > by Macey at:http://nccastaff.bournemouth.ac.uk/jmacey/RobTheBloke/www/
>>
>> > Also, a good book intro to the maya api
>> > is:http://www.amazon.com/Complete-Maya-Programming-Extensive-Kaufmann/dp...
>>
>> > Just to get you started: according to the maya docs
>> > (http://download.autodesk.com/us/maya/2009help/API/class_m_fn_fluid.html),
>> > MFnFluid can take EITHER an MObject or an MDagPath; in either case,
>> > the typical way to get access to one of these "from scratch" for us
>> > scripters is through the use of MSelectionList:
>>
>> > import maya.OpenMaya as om
>> > import maya.OpenMayaFX as omfx
>>
>> > selList = om.MSelectionList()
>> > selList.add("myFluidNodeName")
>> > dag = om.MDagPath()
>> > selList.getDagPath(0, dag)
>> > fluidNode = omfx.MFnFluid(dag)
>>
>> > Good luck!
>>
>> > - Paul
>>
>> > On Tue, Aug 18, 2009 at 5:54 PM, holofermes<[email protected]> wrote:
>>
>> > > Hi!
>> > > I'm a first-poster, but a long-time-reader, so first of all
>> > > compliments to all of you guys!
>> > > I'm a MEL - Python user, and I know very little about C/C++.
>> > > I was presented with a problem a day ago, where I would have to
>> > > extrapolate data of a fluid shape, such as color, density, position,
>> > > and then bring them back to Houdini. Being able to read them in
>> > > Houdini won't be a problem (I hope). Being able to export them quickly
>> > > it's givining me headachess.
>> > > I tried to use mel to export data, and it works fine, but it just too
>> > > slow. So I started looking around and I found out that there has been
>> > > already somebody working something out
>>
>> > >http://groups.google.com/group/python_inside_maya/browse_thread/threa...
>>
>> > > and
>>
>> > >http://groups.google.com/group/python_inside_maya/browse_thread/threa...
>>
>> > > I kind of understand how does it work, but I can't get it to work my
>> > > self. I get stuck right at the beginning.
>>
>> > > Questions:
>>
>> > > fluidNode = OpenMayaFX.MFnFluid(node)
>>
>> > > What is node supposed to be?
>> > > MFnFluid is supposed to get a "MDagPath const &" type. How can I get
>> > > "node" to become what MFnFluid wants?
>> > > I would like this to be working on a selection basis, so would the
>> > > "node" get a different parametrization?
>> > > I'm not sure what a MDagPath does as well.
>>
>> > > More to come
>>
>> > > Thanks,
>> > > Fabio.
>>
>>
> >
>
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/python_inside_maya
-~----------~----~----~----~------~----~------~--~---