Scripting the creation of text objects


Here’s a little Python snippet that creates a bunch of text objects, one for each item in a list. Note the handling of multiple lines (elements in triple quotes).

names = ["Test", """Coming
Soon""", "XSI",
"""one
two
THREE""", "SUMATRA"]

for n in names:
                text = Application.CreateMeshText("CurveListToSolidMeshForText", "siPersistentOperation")
                if n.find( "\n" ):
                                n = n.replace( "\n", "\\par\r\n" )
                                Application.SetValue(str(text) + ".crvlist.TextToCurveList.text.singleline", 0, "")
                                
                Application.SetValue(str(text) + ".crvlist.TextToCurveList.text.text", "%s%s%s" % ("_RTF_{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0\\froman\\fcharset0 Arial;}}\r\n\\viewkind4\\uc1\\pard\\lang1033\\f0\\fs20 ", n, "\\par\r\n}\r\n"), "")
                Application.SetValue(str(text) + ".extrudelength", 1, "")

Friday Flashback #83


Review of SOFTIMAGE XSI 1.0 from 3DWorld Magazine issue no 1, 2000.

To be honest, from the outset we were prepared to be underwhelmed by [XSI]…eclipsed as it has been by Maya [but] when you get down to it, XSI is simply a stunning piece of software and we wever very impressed

Hat tip to Daniel Brassard for kindly sending this in.




Another look at IsElement problems


I’ve had some problems with IsElement lately, so I took another look at how to work around problems with IsElement, especially when you’re using it with ICE topology. Also, a quick look under the covers at the connections in the construction stack (aka operator history).

http://vimeo.com/47605597

Here’s the script I was using to print the connection stack info:

#
# This script works in 2013 SP1 only because it uses sipyutils 
#
from sipyutils import si			# win32com.client.Dispatch('XSI.Application')
from sipyutils import siut		# win32com.client.Dispatch('XSI.Utils')
from sipyutils import siui		# win32com.client.Dispatch('XSI.UIToolkit')
from sipyutils import simath	# win32com.client.Dispatch('XSI.Math')
from sipyutils import log		# LogMessage
from sipyutils import disp		# win32com.client.Dispatch
from sipyutils import C			# win32com.client.constants

si=si()
siut =siut()

sisel = si.Selection


from xml.etree import ElementTree as ET

prim = sisel(0).ActivePrimitive if si.ClassName(sisel(0)) ==  'X3DObject' else sisel(0)


stackInfo = siut.DataRepository.GetConnectionStackInfo( prim )
#log( stackInfo )
connections = ET.XML(stackInfo)
currentMarker =''

print "Connections for %s" % prim.FullName
for connection in connections:
		o = connection.find('object').text
		if o == currentMarker:
			continue
	
		if o.endswith('marker'):
			currentMarker = o
			
		print "%s (%s)" % (connection.find('object').text, connection.find('type').text)

The case of Error 2000 Failed creating scripting engine XSI.SIPython.1


The guy sitting next to me kept getting this Python error at startup (which meant I had to either fix his install or continue taking all the CrowdFX cases 😉

' ERROR : 2000 - Failed creating scripting engine: XSI.SIPython.1.
' pythoncom error: PythonCOM Server - The 'win32com.server.policy' module could not be loaded.
' <type 'exceptions.ImportError'>: No module named win32com.server.policy
' pythoncom error: CPyFactory::CreateInstance failed to create instance. (80004005)

This happened only with the Python installed with Softimage. We did runonce.bat. We checked that Python was in the PATH. I scoured a Process Monitor log for several hours. But no luck. After a few days off, I came back and took another look at his Process Monitor log, and I noticed that at a certain point, Softimage switched over to reading files from the system Python install (in C:\Python26). And that was the clue.

It turns out that the environment variable PYTHONHOME was set to C:\Python26. Unsetting that environment variable was the solution.

Setting PYTHONPATH to C:\Python26 also causes the same error.

Bullet Rigid Body Simulation with States


Softimage 2013 SP1 included a fix for a problem (aka a crash) with the Simulate Bullet Rigid Bodies nodes and states.

So, when a customer asked us how to do a two-part simulation, I gave Bullet + States a try. In the first part, the objects drop onto an obstacle, and in the second part, another obstacle comes along and pushes some of the objects away. Like this:

Here’s the ICE tree. I used Test Current Frame to trigger the state change. I did try some other triggers, like Test Particle Velocity and Test Particle Size, but I got some weird results with those triggers. By weird, I mean things like some, but not all, of the small cylinders being pushed away, even though they were still in the first state.

The idea here is to push just the big cubes. I make all the little cubes passive, so they get left behind.