houdini较完善缓存代码

houdini较完善缓存代码

import hou

class Chain(object):#定义类函数
def __init__(self,node):#定义静态函数
hc = hou.pwd().parmTuple('_hs').eval()
self.node=node
self.inputs=[]
if self.isFC():
node.setColor(hou.Color(hc))#给缓存节点上色

def ropName(self):#命名用函数-----------------------------------------
return self.node.name()+'_CHAIN'#加后缀<span id="more-304"></span>

def isFC(self):#判断是不是缓存节点--------------------------------------------
return self.node.type().name()=='filecache'

def directUpstreamFC(node):#循环遍历------------------------------------------
FCs = []#创建空列表
for i in node.inputs():
if i.type().name() == 'filecache': #查找缓存节点
FCs.append(i)#加入列表
else:
FCs.extend(directUpstreamFC(i))
return FCs#返回 包含所有 filecache 节点的列表

def toChain(node):
chain = Chain(node)
chain.inputs = [toChain(i) for i in directUpstreamFC(node)]
return chain

def toRop(chain,rop_parent):#创建节点链接节点------------------------------------
r = rop_parent.node(chain.ropName())
if not r:
#考虑到第一个选择的节点不是 filecache 的情况
r = rop_parent.createNode('fetch' if chain.isFC() else 'merge')
r.setName(chain.ropName())
else:
for i in range(len(r.inputs())):
r.setInput(i,None)
r.setColor(chain.node.color())
if chain.isFC():
r.parm('source').set(chain.node.path() + '/render')#填入拾取路径

for i, input_rop in enumerate([toRop(i,rop_parent) for i in chain.inputs]):
r.setInput(i,input_rop)#根据依赖关系将节点连接起来---------------------------------
r.moveToGoodPosition()#排列整齐
return r

def main():
hou.hipFile.save()#先保存一下文件

FC_COLOR = (0,0.533,0)#定义一个绿色--------------------------------------------------

sel = hou.selectedNodes()#选择节点--------------------------------------------------
if not sel:
hou.ui.displayMessage('请选择最终节点 然后再点击此工具!')#如果没有选择 则提示-------------
else:
par = str('/'.join((str(sel[0].path).split(' ')[-1]).split('/')[:-1]))
# print(par)
for node in sel:
toRop(toChain(node),hou.node('/out'))

b = hou.node('/out/').createNode('shell','zidongguanji')#创建自动关机shell节点--------------------------------

#c = hou.node('/out/').createNode('shell','chongxinjiazai')#创建重新加载shell节点--------------------------------

nodes = hou.node('/out/').children()#选择节点功能
for n in nodes:#连接-------------------------------------------------------
if n.type().name() == 'merge':
# n.setInput(1,c)
n.setInput(1,b)

b.parm('postrender').set('''import os
os.system("shutdown -s")''')
b.parm('lpostrender').set('python')#设置自动关机功能---------------------------------------

#c.parm('postrender').set('''nodes = hou.node('par').children()
#for n in nodes:
# if n.type().name() == ''LJY_JiaoBen'':
# n.parm(''dianji'').pressButton()''')
#c.parm('lpostrender').set('python')#设置重新加载功能---------------------------------------

hou.node('/out/').layoutChildren(vertical_spacing=1.5)#再次排列整齐--------------------

 

点赞

发表回复

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像