>> ISIVTCollection collections exist because Python was not in Softimage since >> the very beginning,
Not true, Alan. Python WAS available in the beginning (along with VBscript, Jscript, and PerlScript). People chose not to use Python. When 'Sumatra' (XSI) was being developed, all the internal scripts and scripting examples written were in VBScript which supports output arguments much like by-reference passing of arguments in C++. It wasn't until I and a few other users spoke up during early versions that Jscript did not support this feature. Around XSI 1.5 or XSI 2.0, Softimage stopped writing commands using ISITVCollections as output arguments and started moving towards the paradigm used today of supplying a command or method with a numeric suffix to account for these language specific situations (PolygonMesh.Get() vs. PolygonMesh.Get2() for example). There were no Jscript examples in the documentation either - everything was VBscript. I had to poke around in the dark to find the issues whether it be ISITVCollections, arrays vs. VB Safe Arrays, reading/writing RGBA color values, inability to make custom spreadsheet queries, and so on. Yes, it was very frustrating. Eventually Softimage got the hint people preferred using Jscript over VBscript, so the documentation started to reflect that in later versions. Today Python users are merely going through the same growing pains as there wasn't a significant audience until XSI v6 or later. The language has been around for more than 20 years, only recently has it gotten traction in our industry. Perl used to be the language of choice where Python is used today. Perlscript was an early choice for XSI as well, but fell out of favor early on when it ran into the same speed bumps Jscript and but didn't have enough squeaky wheels to fight for the cause. Part of the original design decision was probably due to the product being waaaaaay behind schedule and developers were looking for the least cost way to get things done. That meant focusing on getting one language working. VBscript was the internal technology of Microsoft, who then owned Softimage, and it interacted with many other windows applications. Problem was many of the features 3D users wanted to use were not friendly to VBscript, or were not in mass adoption (HTML pages for netview, for example). Jscript could be used in the entire application, was available on other platforms, and had decent methods for working with strings. VBscript was restricted to Microsoft platforms via MainWin. Another early feature, that was since dropped, was the ability to compile scripts into executables - it was friendlier in Jscript than VBScript. Jscript was also a much more widely used language than VBScript, making it easier to find examples and documentation, as well as more similar to C++ to make prototyping plugins easier. Long story short The main issue is the short sighted approach of the SDK design focusing heavily on COM/OLE automation and exposing the capabilities to one language in the scripting environment (VBscript) without testing against the others. If a product is going to advertise multi-language support, then the SDK and documentation should reflect that wholly. However in defense, if you write code effectively, chances are your code is 90% focused on interacting with the Softimage API and not leveraging the features of your chosen language so much. Matt From: [email protected] [mailto:[email protected]] On Behalf Of Alan Fregtman Sent: Thursday, April 25, 2013 6:45 AM To: XSI Mailing List Subject: Re: scripting: returning value in SIImportMatLib ISIVTCollection collections exist because Python was not in Softimage since the very beginning, so a few of the SDK command implementations used these so-called "output arguments" feature (since a big chunk of the core commands are written in VBScript, which supports it.) The special collection object was a way of getting them to be accessible automatically without having to go back and add new commands. >> Either way, I don't think the new SDK docs really show what arguments are >> the ones returned Perhaps not clearly, but they do show. For example: http://download.autodesk.com/global/docs/softimage2013/en_us/sdkguide/si_cmds/PickElement.html Note how in the 2nd paragraph they mention output arguments, then in the Parameters list, for "PickedElement", "ButtonPressed" and "ModifierPressed" the Description of the parameter reads "Returns the...". That's how you know it's an output argument; because it's trying to return something. The Parameter name for the output argument is the key for the ISIVTCollection returned, so in this it might be something like Application.PickElement(...)("PickedElement") for example. Cheers, -- Alan On Thu, Apr 25, 2013 at 9:10 AM, Eric Thivierge <[email protected]<mailto:[email protected]>> wrote: Yeah certain commands aren't, let's say, specifically compatible with Python or other scripting languages that don't support output arguments. That's an ugly explanation but is pretty much how I think of it. Either way, I don't think the new SDK docs really show what arguments are the ones returned so it may be a bit tough to know but if you take a look at the various code around and maybe some of the older docs you'll see how it works. This may help too in Python: http://download.autodesk.com/global/docs/softimage2013/en_us/sdkguide/index.html?url=files/ISIVTCollection.htm,topicNumber=d30e53970 On 25/04/2013 7:57 AM, David Barosin wrote: Look at these links - they help explain what ISIVTCollections are and when they are returned. http://download.autodesk.com/global/docs/softimage2013/en_us/sdkguide/index.html?url=files/outarg_bylang.htm,topicNumber=d30e53710 http://download.autodesk.com/global/docs/softimage2013/en_us/sdkguide/index.html?url=files/ISIVTCollection.htm,topicNumber=d30e53970 On Thu, Apr 25, 2013 at 7:36 AM, Martin <[email protected]<mailto:[email protected]>> wrote: Hi list, I have a question about SIImportMatLib command. I was trying to get the return value in jscript without success until I checked Eric's ET_PassManager code where he is using oMatLib = xsi.SIImportMatLib(strMatLibPath)("Value") and the oMatLib gets the return value. It works (in jscript too) and I'm using it now, but why does it work? I mean, where this ("Value") thing comes from? When should I use it? Thanks M.Yara

