I guess the other disclaimer there is that if something is passed by reference *and* is marked as *const*, it is effectively the same as passing by value as far as the SWIG layer is concerned. In C++ it's a little more memory-efficient to pass it by reference, but if you're down to that level of memory management then you should probably just be working in C++ anyway :)
On Thu, May 13, 2010 at 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
