Yes. As per the 2011 docs, it's not guaranteed to work if there is no
initial value, but it might :D

On Thu, May 13, 2010 at 4:41 PM, Brandon Harris <[email protected]>wrote:

> ALright, so here's some stuff from Autodesk's own tools
>
> argX = OpenMaya.MScriptUtil()
> argX.createFromInt(0)
> argXPtr = argX.asShortPtr()
> argY = OpenMaya.MScriptUtil()
> argY.createFromInt(0)
> argYPtr = argY.asShortPtr()
> event.getPosition(argXPtr, argYPtr)
> self.__startPos_x = OpenMaya.MScriptUtil(argXPtr).asShort()
> self.__startPos_y = OpenMaya.MScriptUtil(argYPtr).asShort()
> self.__view = OpenMayaUI.M3dView.active3dView()
>
> so the only difference between this and my original code is that is
> uses createFromInt and declares the pointer after that.
> so when I run this.
> import maya.OpenMaya as openMaya
> sel=openMaya.MSelectionList()
> openMaya.MGlobal().getActiveSelectionList(sel)
> path=openMaya.MDagPath()
> obj=openMaya.MObject()
> sel.getDagPath(0, path, obj)
> compItr = openMaya.MItSurfaceCV(path, obj)
> while not compItr.isDone():
>    u = openMaya.MScriptUtil()
>     u.createFromInt(100)
>    uPtr = u.asIntPtr()
>    v = openMaya.MScriptUtil()
>    v.createFromInt(100)
>    vPtr = v.asIntPtr()
>    compItr.getIndex(uPtr, vPtr)
>    print openMaya.MScriptUtil().getInt(uPtr)
>    print openMaya.MScriptUtil().getInt(vPtr)
>    compItr.next()
>
> It works just fine. Is this acceptable use of the MScriptUtil? I want
> to make sure I'm not missing something.
>
>
> Brandon L. Harris
>
>
>
>
>
>
>
>
>
>
>
>
>
> On May 13, 3:01 pm, Brandon Harris <[email protected]> wrote:
> > ok, so here's a test to show what's going wrong.
> >
> > grab some components on a nurb surface and run this.
> >
> > import maya.OpenMaya as openMaya
> > sel=openMaya.MSelectionList()
> > openMaya.MGlobal().getActiveSelectionList(sel)
> > path=openMaya.MDagPath()
> > obj=openMaya.MObject()
> > sel.getDagPath(0, path, obj)
> > compItr = openMaya.MItSurfaceCV(path, obj)
> > while not compItr.isDone():
> >     u = openMaya.MScriptUtil()
> >     v = openMaya.MScriptUtil()
> >     compItr.getIndex(u.asIntPtr(), v.asIntPtr())
> >     print openMaya.MScriptUtil().getInt(u.asIntPtr())
> >     print openMaya.MScriptUtil().getInt(v.asIntPtr())
> >     compItr.next()
> >
> > Now the issue I have is that it doesn't print the correct values.
> >
> > import maya.OpenMaya as openMaya
> > sel=openMaya.MSelectionList()
> > openMaya.MGlobal().getActiveSelectionList(sel)
> > path=openMaya.MDagPath()
> > obj=openMaya.MObject()
> > sel.getDagPath(0, path, obj)
> > compItr = openMaya.MItSurfaceCV(path, obj)
> > while not compItr.isDone():
> >     u = openMaya.MScriptUtil()
> >     v = openMaya.MScriptUtil()
> >     u.createFromInt(50)
> >     v.createFromInt(50)
> >     compItr.getIndex(u.asIntPtr(), v.asIntPtr())
> >     print openMaya.MScriptUtil().getInt(u.asIntPtr())
> >     print openMaya.MScriptUtil().getInt(v.asIntPtr())
> >     compItr.next()
> >
> > This will just print 50. So how am I plugging this into
> > compItr.getIndex wrong?
> >
> > Brandon L. Harris
> >
> > On May 13, 2:55 pm, Adam Mechtley <[email protected]> wrote:
> >
> >
> >
> > > An MScriptUtil object shouldn't care, since it is a Python object. What
> > > matters is what you tell SWIG it is, not how you construct it in
> Python. If
> > > the API wants a reference to a double, but you pass a float ptr, it
> won't
> > > like it. You'll notice, for instance, that there's only
> createFromInt():
> > > there is no createFromShort(), createFromLong(), createFromUInt(), etc.
> > > because they're all the same as far as Python is concerned. Likewise,
> > > MScriptUtil.getInt(), MScriptUtil.getShort(), MScriptUtil.getBool(),
> etc.
> > > all return an int, because Python doesn't discriminate. It really
> doesn't
> > > even bother Python if you create from a decimal and request it as an
> int—it
> > > will handle the conversion. For instance:
> >
> > > u = om.MScriptUtil()
> > > u.createFromInt(5)
> > > om.MScriptUtil.getInt(u.asIntPtr()) # this will return 5
> > > om.MScriptUtil.getDouble(u.asDoublePtr()) # this will return 5.0
> > > om.MScriptUtil.getDouble(u.asIntPtr()) # this will not work, since
> > > MScriptUtil.getDouble requires an argument of type double &, while
> > > u.asIntPtr() is of type int &
> >
> > > On Thu, May 13, 2010 at 1:49 PM, Brandon Harris <[email protected]
> >wrote:
> >
> > > > But that also brings me back to the initial scripts.
> >
> > > > u=om.MScriptUtil()
> > > > u.createFromInt(0)#correct usage?
> > > > v=om.MScriptUtil()
> > > > v.createFromInt(0)#correct usage?
> > > > compItr.getIndex(u.asIntPtr(),v.asIntPtr())
> > > > om.MScriptUtil.getInt(u.asIntPtr())
> >
> > > > OK so if I use createFromInt and just feed it an arbitrary value to
> > > > allocate the space, is that correct? what do I have to consider when
> > > > doing that? if the number may have a value like 20 instead of 2, do I
> > > > need to do createFromInt(100) or something to give it adequate space?
> >
> > > > Brandon L. Harris
> >
> > > > On May 13, 1:36 pm, Brandon Harris <[email protected]> wrote:
> > > > > OK so when I do this
> >
> > > > > u=om.MScriptUtil()
> > > > > u.createFromInt(0)
> >
> > > > > the u.asInt is equal to 0.
> >
> > > > > so when I do that I need to do
> >
> > > > > u.createFromInt(Value That Will Be Used)
> >
> > > > > On May 13, 1:28 pm, Adam Mechtley <[email protected]> wrote:
> >
> > > > > > Basically:
> >
> > > > > > Imagined through the lens of a language like C++, Python always
> passes
> > > > > > simple types (integer, decimal, etc.) by value—you are passing
> actual
> > > > > > numeric data. Some places in the API, however, require that
> simple
> > > > types be
> > > > > > passed by reference (that is, passing an address to some numeric
> data
> > > > rather
> > > > > > than passing the numeric data itself). In such cases, there is no
> > > > automatic
> > > > > > way for the SWIG layer to translate a simple type into a
> *reference* to
> > > > a
> > > > > > simple type. An MScriptUtil object is thus basically a way of
> wrapping
> > > > a
> > > > > > simple numeric value (like an integer or decimal) in a complex
> object
> > > > so it
> > > > > > can be passed by reference.
> >
> > > > > > In your example, u is an object containing a simple integer value
> (0 or
> > > > 20
> > > > > > or whatever you give it when you construct it). The sole function
> of u
> > > > is
> > > > > > thus to pass its contents by reference (u.asIntPtr()) or to
> obtain the
> > > > value
> > > > > > when something else has changed it (u.asInt()).
> >
> > > > > > On Thu, May 13, 2010 at 1:11 PM, Brandon Harris <
> [email protected]
> > > > >wrote:
> >
> > > > > > > OK, I believe that by changing some of this I have actually
> crippled
> > > > > > > some functionality. So is there more information on exactly
> what
> > > > > > > u=om.MScriptUtil()
> > > > > > > u.createFromInt(0)
> > > > > > > actually does and if I use 20 instead of 0 what happens?
> > > > > > > Forgive my ignorance. Just an odd class that I'm not sure on
> what
> > > > it's
> > > > > > > doing so not 100% on how I'm to use it properly
> >
> > > > > > > On May 11, 12:20 pm, Brandon Harris <[email protected]>
> wrote:
> > > > > > > > Alright. That did seem to be the issue. big thanks for the
> help!
> >
> > > > > > > > Brandon L. Harris
> >
> > > > > > > > On May 11, 10:21 am, Paul Molodowitch <[email protected]>
> wrote:
> >
> > > > > > > > > Yup... the only thing I would add is that you need to
> allocate
> > > > space
> > > > > > > for
> > > > > > > > > whatever you're going to be storing - the default
> constructor
> > > > allocates
> > > > > > > NO
> > > > > > > > > space (not even enough for a single int).
> >
> > > > > > > > > The easiest way to allocate space here would be to use the
> > > > > > > createFromInt
> > > > > > > > > method:
> >
> > > > > > > > > u=om.MScriptUtil()
> > > > > > > > > u.createFromInt(0) # Can be any value, just want to make
> sure
> > > > space is
> > > > > > > > > allocated
> >
> > > > > > > > > You can use the createFromInt / createFromDouble methods to
> > > > allocate
> > > > > > > enough
> > > > > > > > > space for up to 4 values; if you need more, I suggest using
> the
> > > > > > > > > (undocumented) createFromList method.
> >
> > > > > > > > > I love MScriptUtil - it lives at the lovely intersection of
> > > > confusing
> > > > > > > > > implementation, poor documentation, and high expectation of
> > > > crashes
> > > > > > > when
> > > > > > > > > used incorrectly...
> >
> > > > > > > > > - Paul
> >
> > > > > > > > > On Tue, May 11, 2010 at 12:37 AM, Viktoras <
> > > > [email protected]>
> > > > > > > wrote:
> > > > > > > > > > On 2010.05.11 06:48, Brandon Harris wrote:
> >
> > > > > > > > > >>         u = openMaya.MScriptUtil().asIntPtr()
> > > > > > > > > >>         v = openMaya.MScriptUtil().asIntPtr()
> > > > > > > > > >>         compItr.getIndex(u,v)
> > > > > > > > > >>         compList.append([(pathName + ".cv[%s][%s]")%
> >
> > > > > > >
> (openMaya.MScriptUtil().getInt(u),openMaya.MScriptUtil().getInt(v))])
> >
> > > > > > > > > > this was never intended to be a correct usage of
> MScriptUtil,
> > > > you
> > > > > > > should
> > > > > > > > > > not save instances of "asPtr" return values.
> > > > > > > > > > instead, you save instance of MScriptUtil, e.g.
> >
> > > > > > > > > > u=om.MScriptUtil()
> >
> > > > > > > > > > then pass asPtr value to functions
> >
> > > > > > > > > > compItr.getIndex(u.asIntPtr(),v.asIntPtr())
> >
> > > > > > > > > > then retreive the value with
> >
> > > > > > > > > > om.MScriptUtil.getInt(u.asIntPtr())
> >
> > > > > > > > > > --
> > > > > > > > > > Viktoras
> > > > > > > > > >www.neglostyti.com
> >
> > > > > > > > > > --
> > > > > > > > > >http://groups.google.com/group/python_inside_maya
> >
> > > > > > > > > --http://groups.google.com/group/python_inside_maya
> >
> > > > > > > > --http://groups.google.com/group/python_inside_maya
> >
> > > > > > > --
> > > > > > >http://groups.google.com/group/python_inside_maya
> >
> > > > > > --http://groups.google.com/group/python_inside_maya
> >
> > > > > --http://groups.google.com/group/python_inside_maya
> >
> > > > --
> > > >http://groups.google.com/group/python_inside_maya
> >
> > > --http://groups.google.com/group/python_inside_maya
> >
> > --http://groups.google.com/group/python_inside_maya
>
> --
> http://groups.google.com/group/python_inside_maya
>

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

Reply via email to