Getting the texture support created by CreateProjection


Here’s the question: How do you get the texture support created by CreateProjection?

You’re supposed to be able to get the support name from an output argument, but that doesn’t work.

from sipyutils import si		# win32com.client.Dispatch('XSI.Application')
from sipyutils import log		# LogMessage
from sipyutils import C			# win32com.client.constants

si = si()

x = si.CreateProjection("sphere", C.siTxtSpherical, "", "SupportName", "Texture_Projection", "", "", "")

log( x.Value("SupportName") == None )

log( x.Count );
log( x(0) == "" );
log( x(1) );

So instead, I get the PropertyName and from CreateProjection and work my way over to the texture support, via the TextureOp.

import win32com.client

from sipyutils import si		# win32com.client.Dispatch('XSI.Application')
from sipyutils import log		# LogMessage
from sipyutils import C			# win32com.client.constants

si = si()

def dispFix( badDispatch ):
    import win32com.client.dynamic
    # Re-Wraps a bad dispatch into a working one:
    return win32com.client.dynamic.Dispatch(badDispatch)

o = si.Selection(0)

x = si.CreateProjection(o, C.siTxtSpherical, "", "Texture_Support", "Texture_Projection", "", "", "")
#CreateProjection( [InputObjs], [Type], [UVDefaultType], [SupportName], [PropertyName], [Parenting], [Fitting], [Camera] );

y = win32com.client.Dispatch( "XSI.Collection" )
y.Items = "%s.polymsh.cls.*.%s" % (o.FullName, x.Value("PropertyName") )

log( y.Items )

txtprop = si.Dictionary.GetObject( y(0).FullName )
op = txtprop.NestedObjects( "TextureOp" )

# re-dispatch it to avoid "object has no attribute 'InputPorts'" error
op = dispFix(op)

txtsupp = op.InputPorts(2).Target2.Parent3DObject

log( si.ClassName(txtsupp) )
si.SelectObj( txtsupp )

The SDK Explorer is good for finding these kinds of port connections:
texture_support_sdk_explorer

PS: Here’s a JScript version.

x = CreateProjection("cylinder", siTxtPlanarXY, siTxtDefaultSpherical, "Texture_Support", "Texture_Projection", null, siRelDefault, null);

var y = new ActiveXObject( "XSI.Collection" );
y.Items = "cylinder.polymsh.cls.*." + x.Value("PropertyName")

txtprop = Dictionary.GetObject( y(0).FullName );
op = txtprop.NestedObjects( "TextureOp" );

txtsupp = op.InputPorts(2).Target2.Parent3DObject

LogMessage( ClassName(txtsupp) );
SelectObj( txtsupp )

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s