Ici on parlera Python
on va creer un node pour run des scripts python a partir d'un null.
exec(kwargs['node'].parm('pythonCode').eval())
on va colorer les nodes color et les objets avec la meme couleur. C'est pratique quand on fait du layout pour savoir quel branche du network correspond a tel ou tel objet.
node = hou.pwd()
geo = node.geometry()
color =node.inputAncestors()[0]
r=color.parm("colorr").eval()
g=color.parm("colorg").eval()
b=color.parm("colorb").eval()
myColor = hou.Color((r,g,b))
color.setColor(myColor)
editor = hou.ui.paneTabOfType(hou.paneTabType.NetworkEditor)
print(editor.nodeShapes())
# Returned tuple of strings:
# ('rect', 'bone', 'bulge', 'bulge_down', 'burst', 'camera',
# 'chevron_down', 'chevron_up', 'cigar', 'circle', 'clipped_left',
# 'clipped_right', 'cloud', 'diamond', 'ensign', 'gurgle', 'light',
# 'null', 'oval', 'peanut', 'pointy', 'slash', 'squared', 'star',
# 'tabbed_left', 'tabbed_right', 'tilted', 'trapezoid_down',
# 'trapezoid_up', 'wave')
utile pour de la crowd par exemple. On va recupperer les objet par id. puis faire des selection par pourcentage.
exec(kwargs['node'].parm('pythonCode').eval())
import hou
import os
import random
cList = hou.parm("../crypto_list").eval()
#convertir en list
cList = cList.split(",")
print (cList)
it = 0.0 + hou.parm("../seed").eval()
nList=[]
pourcent = hou.parm("../pourcent").eval()
for i in cList:
it+=1
random.seed(it)
r = random.random()
if (r<pourcent):
print (i)
nList.append(i)
print(nList)
sList = str(nList)
sList = sList.replace("[","")
sList = sList.replace("]","")
sList = sList.replace("'","")
print (sList)
hou.parm("../new_list").set(sList)
import hou
import nodesearch
matchType = nodesearch.NodeType("*")
matchName = nodesearch.Name("*")
match = nodesearch.Group([matchType,matchName])
net = hou.node("/")
for node in match.nodes(net,recursive =True):
try:
node.setHardLocked(False)
except:
pass
On va generer un menu dynamique en fonction de groups sur les primitives
import hou
import nodesearch
matchType = nodesearch.NodeType("*")
matchName = nodesearch.Name("*")
match = nodesearch.Group([matchType,matchName])
net = hou.node("/")
for node in match.nodes(net,recursive =True):
try:
node.setHardLocked(False)
except:
pass
On va lancé une recherche pour tout les node de texture pour corriger les chemin. Très utile si on change de disk en cours de projet par exemple et qu'on a pas prédéfini de variable vers un disque. on peu utiliser cette methode pour n'importe quel type de node.
import hou
# node courant
myPath = hou.pwd()
import nodesearch
search = hou.parm("../search").eval()
replace = hou.parm("../replace").eval()
#maj all texture mantra legacy
matchType = nodesearch.NodeType("texture")
#cherche quimporte le nom du node
matchName = nodesearch.Name("*")
match = nodesearch.Group([matchType,matchName])
#!!! cherche a partir de ce chemin !!!
net = hou.node("/obj/")
#cherche de maniere recursive
# tout ce joue ici
for node in match.nodes(net,recursive =True):
try:
print(node)
parm = node.parm("map")
file = parm.eval()
file = file.replace(search,replace)
parm.set(file)
except:
pass
Ici on vas recuperrer tout les chemins des fichiers contenus dans un dossiers. utile pour faire des convertion de geometry ou de texture en masse par exemple
node = hou.pwd()
geo = node.geometry()
import os
roots = hou.parm("sourcePath").eval()
path = next(os.walk(roots))[2]
pathExp = []
textS = ""
for i in path:
tmp = i.split(".")[0]
pathExp.append(tmp)
textS += tmp +"\n"
range = len(path)
geo.setGlobalAttribValue("path",path)
geo.setGlobalAttribValue("pathExp",pathExp)
geo.setGlobalAttribValue("range",range)
hou.parm("text_list").set(textS)
hou.FloatParmTemplate("Color", "Color", 3, default_value=(1,1,1), look=hou.parmLook.ColorSquare, naming_scheme=hou.parmNamingScheme.RGBA)
import hou
node = hou.pwd()
g= node.parmTemplateGroup()
g.remove("p")
node.setParmTemplateGroup(g)
node.setConditional(hou.parmCondType.DisableWhen, "{uniformsamples != 4}")
node.setConditional(hou.parmCondType.HideWhen, "{uniformsamples != 4}")
#https://www.keatonwilliamson.com/houdini/python/parmtemplate