이라고 말하는건 훼이크구요...
아이쓰 뷰 여는것도 간단합니다. 걍 Tab 키 누르시고 PPG 뜨면 i 키를 누르시고
엔터 하면 아이스 창이 쨔쟌 하고 열립니다.
사용방법은 간단합니다. tab 키를 누르시고 알고 있는 노드명을 치시고
엔터 탁~ 하시면 됩니다. 또는 명령어를 입력하지 않은 상태에서는 tab 치시면
사라집니다. 혹시라도 명령어가 안먹거나 작동 불능일때는 엔터 치세요~
익숙해지면 작업속도 배배배배 빨라질것 입니다.
더 대단한건 아이쓰 뷰에서 랜더트리 뷰로 이동이 가능하다는 겁니다..
tab 키 누르셔서 R 치시면 랜더트리 뷰로 변환 됩니다.. 그리고
아시는 쉐이더들 검색해보세요....ㅋㅋㅋㅋ
삼백원은 죽을때까지 초보유저와 함께 합니다....
2010년은 XSIuser 분들의 부흥기가 될거라고 삼백원은 확신 합니다.
출처 : http://www.andynicholas.com/
이 아저씨 블로그 참 대단한것 같습니다. 요기조기 둘러보심 좋은 정보들 많습니다.
SOFTIMAGE | XSI USER 만쉐이~
visualFX
- 2010.03.02
- 11:33:26
http://images.autodesk.com/adsk/files/pythoninstall64.rar
저도 안됐는데 python을 까니까 되네요. win7에 xsi 7.01사용하고 있습니다.
링크 받아서 설치해보세요. readme.txt순서대로 설치하였습니다.
c:\python26 설치폴더를 환경변수에 꼭 추가해주셔야 xsi에서 인식합니다.
더불어 삼백원님 좋은정보 감사합니다 ^^

三百元
- 2010.03.01
- 19:25:57
# HoudiniTabMenu2
# Initial code generated by XSI SDK Wizard
# Executed Tue May 27 19:38:28 UTC+0100 2008 by andyn
#
# Tip: To add a command to this plug-in, right-click in the
# script editor and choose Tools > Add Command.
#
# Tip: To get help on a callback, highlight the callback name
# (for example, "Init", "Define", or "Execute") and press F1.
import win32com.client
from win32com.client import constants
g_pluginName = "fxnut_XSITabMenu"
def XSILoadPlugin( in_reg ):
in_reg.Author = "Andy Nicholas"
in_reg.Name = g_pluginName
in_reg.Email = ""
in_reg.URL = "www.andynicholas.com"
in_reg.Major = 1
in_reg.Minor = 1
in_reg.RegisterEvent("siOnKeyDownEvent",constants.siOnKeyDown)
#RegistrationInsertionPoint - do not remove this line
return True
def XSIUnloadPlugin( in_reg ):
strPluginName = in_reg.Name
Application.LogMessage(str(strPluginName) + str(" has been unloaded."),constants.siVerbose)
return True
def TabMenu_OnInit():
Application.SetGlobal("TAB_PPG",PPG);
BuildLookupTables()
LOOKUP_TABLE=None
# Callback for the siOnKeyDownEvent event.
def siOnKeyDownEvent_OnEvent( in_ctxt ):
keycode = in_ctxt.GetAttribute("KeyCode")
if Application.GetGlobal("TAB_ACTIVE"):
if keycode>127:
return True
in_ctxt.SetAttribute("Consumed",True)
ppg = Application.GetGlobal("TAB_PPG")
tabprop = Application.GetGlobal("TAB_PROP")
tabdisplay = Application.GetGlobal("TAB_DISPLAY")
typedsofar = Application.GetGlobal("TAB_TYPEDSOFAR")
curstring = Application.GetGlobal("TAB_CURSTRING")
treename = Application.GetGlobal("TAB_TREENAME")
treeid = Application.GetGlobal("TAB_TREEID")
lookupTable = BuildLookupTables()
dic = lookupTable[treeid]
if curstring==None:
curstring=""
#Ignore spaces
if keycode==32:
return True
if keycode==13 or keycode==9:
if keycode==13:
result = GetAbbreviatedMatch(curstring,dic)
if result!=None:
match=result[0]
execString = match[1]
if execString=='Application.UpdatePlugins()':
#Special case for update plugins command due to XSI bug
#causing it to sometimes fail on first call
try:
Application.UpdatePlugins()
except:
Application.UpdatePlugins()
else:
if treeid>0:
execString = execString.replace("%TREE%",treename)
exec execString
Application.SetGlobal("TAB_ACTIVE",False)
if ppg:
ppg.Close()
Application.SetGlobal("TAB_PPG",None)
Application.SetGlobal("TAB_PROP",None)
Application.SetGlobal("TAB_DISPLAY",None)
Application.SetGlobal("TAB_CURSTRING","")
return True
if keycode==8:
curstring=curstring[:-1]
else:
curstring+=chr(keycode)
if len(curstring)!=0:
result = GetAbbreviatedMatch(curstring,dic)
if result!=None:
matchName=result[0][0]
extStr=result[1]
displayString = ExpandMatchToIncludeSpaces(extStr, matchName)
typedsofar.Label = displayString
tabdisplay.Label = matchName
Application.SetGlobal("TAB_CURSTRING",curstring)
if ppg:
ppg.Refresh();
else:
Application.SetGlobal("TAB_CURSTRING","")
tabdisplay.Label = ""
typedsofar.Label = ""
if ppg:
ppg.Refresh();
elif keycode==9:
tabprop = XSIFactory.CreateObject("CustomProperty");
layout = tabprop.PPGLayout
treeInfo = GetActiveNodeTree()
treeType = treeInfo[1]
tabtypedsofar = layout.AddStaticText("");
tabdisplay = layout.AddStaticText("");
if treeType==0:
tabprop.Name = "Tab Menu (Main)";
if treeType==1:
tabprop.Name = "Tab Menu (ICE Tree)";
if treeType==2:
tabprop.Name = "Tab Menu (Render Tree)";
Application.SetGlobal("TAB_ACTIVE",True)
Application.SetGlobal("TAB_PROP",tabprop)
Application.SetGlobal("TAB_DISPLAY",tabdisplay)
Application.SetGlobal("TAB_TYPEDSOFAR",tabtypedsofar)
Application.SetGlobal("TAB_CURSTRING","")
Application.SetGlobal("TAB_TREENAME", treeInfo[0])
Application.SetGlobal("TAB_TREEID", treeInfo[1])
layout.Language = "Python"
layout.SetAttribute(constants.siUILogicPrefix, "TabMenu_")
layout.SetAttribute(constants.siUILogicFile, Application.Plugins(g_pluginName).Filename)
Application.InspectObj(tabprop);
in_ctxt.SetAttribute("Consumed",True);
return True
def ExpandMatchToIncludeSpaces(match,fullString):
nchar = len(match)
result=""
for c in fullString:
result+=c
if c!=" ":
nchar-=1
if nchar==0:
break
return result
def GetAbbreviatedMatch(curstring,dic):
matchStr = ""
for c in curstring:
matchStr += c
result = GetFirstMatch(matchStr,dic)
if result==None:
break
matchStr = result[1]
return result
def AddDefinition(name,cmd, dic={}):
curdic=dic
for c in name.upper():
if c==" ":
continue
if not curdic.has_key(c):
curdic[c]={}
curdic = curdic[c]
curdic[' node']=[name,cmd]
def GetFirstMatch(name,dic):
curdic=dic
for c in name:
if not curdic.has_key(c):
return None
curdic = curdic[c]
if curdic.has_key(' node'):
return [curdic[' node'],name]
longestMatch=name
longestFound=False
#Don't know how deep the tree goes, so set this to a big number instead of
#using while(true) to make sure we never enter an infinite loop
#(it should never happen but it's good practice to check)
i=0
while i<1000:
keys = curdic.keys()
keys.sort()
if keys[0]==' node':
return [curdic[' node'], longestMatch]
curdic = curdic[keys[0]]
if not longestFound:
if len(keys)==1:
longestMatch+=keys[0]
else:
longestFound=True
i+=1
LogMessage("Infinite loop detected: Aborting")
return None
def BuildLookupTables():
global LOOKUP_TABLE
if LOOKUP_TABLE != None:
return LOOKUP_TABLE
lookupTables=[{},{},{}]
pluginPath = Application.Plugins(g_pluginName).OriginPath
ReadTabDefinitionFile(pluginPath+"/Main_TabDefinitions.txt",lookupTables[0])
ReadTabDefinitionFile(pluginPath+"/ICE_TabDefinitions.txt",lookupTables[1])
ReadTabDefinitionFile(pluginPath+"/Render_TabDefinitions.txt",lookupTables[2])
LOOKUP_TABLE=lookupTables
return LOOKUP_TABLE
def ReadTabDefinitionFile(filename, dic):
try:
defFile = open(filename)
except:
LogMessage("Can't find Tab Definition File: "+filename,constants.siError)
return False
homeDir = Application.GetInstallationPath2(constants.siFactoryPath)
try:
for line in defFile:
curLine = line.strip()
if curLine!="":
cmdName = curLine[:curLine.find(",")].strip()
cmdLine = curLine[curLine.find(",")+1:].strip()
#We need to replace this because some of the commands don't resolve it correctly,
#and we need to have it work independently of install location
cmdLine = cmdLine.replace("$XSI_HOME",homeDir)
AddDefinition(cmdName,cmdLine,dic)
except:
defFile.close()
return True
def GetActiveNodeTree():
try:
vm = Application.Desktop.ActiveLayout.Views.Find( "View Manager" )
fc = vm.GetAttributeValue("focusedviewport")
except:
return ("",0)
activeView = vm.Views(fc)
iceTreeName = activeView.GetAttributeValue("container")
if iceTreeName=="None":
return ("",0)
col = win32com.client.Dispatch( "XSI.Collection" )
try:
col.SetAsText(iceTreeName)
except:
return ("",0)
container = col(0)
if container.Type=="ICETree":
return (container.FullName,1)
if container.Families.find("NodeOperators")!=-1: #ICE Compound
return (container.FullName,1)
if container.Type=="material":
return (container.FullName,2)
if container.Families.find("Shader Compounds")!=-1: #Render Compound
return (container.FullName,2)
return ("",0)

일정기간 이후 자료실로 이동합니다.