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
