*"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"*

Not exactly true.  Passing by reference for simple types like ints, floats,
etc, you need to use MScriptUtil in Python.  If it's a non-simple type like
an MFloatArray, then you can ignore it.  You need to use MScriptUtil for
pointers and references to simple types.  This getColors function is tricky
because it expects a reference to a pointer.  Maya treats references as
pointers, so in this case, the function expects a  pointer to a pointer,
which I don't think MScriptUtil supports so I think you're out of luck.

It's also complaining about argument 2 in your implementation because the
first argument in a python class is always self.

Chad

On Fri, Aug 21, 2009 at 9:06 AM, Paul Molodowitch <[email protected]>wrote:

>
> 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to