Extrait de code Houdini
Prise en main
Cette section fournie quelques commandes de base pour commencer à scripter dans Houdini.
Le script passe par le module hou
. Sa documentation, très bien faite, est disponible ici.
Le Python Shell est disponible dans le menu Windows :
Récupérer un nœud par son chemin
La première commande utile est hou.node()
. Elle permet de récupérer un nœud Houdini sous forme d’objet depuis son chemin.
root = hou.node('/obj')
Notez que la variable root
fait référence au nœud /obj
dans les exemples qui suivent.
Créer et supprimer des nœuds
Cette fonction créé un nœud de type geo
:
node = root.createNode('geo') # hou.ObjNode of type geo at /obj/geo1>
La fonction createNode()
peut prendre plusieurs paramètres (voir sa documentation).
On peut accéder au type d’un nœud de cette façon :
>>> node.type().name()
'geo'
Le type est également accessible en cliquant sur l’icône Operator Info, depuis l’interface :
Il apparaît dans la fenêtre (ici, geo
) :
Il est aussi disponible en faisant bouton-droit sur un nœud :
Pour supprimer un nœud, il faut appeler la méthode destroy()
:
node.destroy()
Récupéré l’enfant d’un nœud par son nom
child = root.node('geo1')
Lister les enfants d’un nœud
for node in root.children():
print node
Lister les paramètres d’un nœud
for param in node.allParms():
print param.name()
Récupérer et modifier un paramètre d’un nœud
Le nom des paramètres est disponible depuis l’interface en plaçant le curseur sur le paramètre :
Ici, tx
, ty
, et tz
.
root = hou.node('/obj')
node = root.createNode('geo') # <hou.ObjNode of type geo at /obj/geo1>
param = node.parm('tx') # <hou.Parm tx in /obj/geo1>
param.set(20)
On peut assigner une expression :
param.setExpression('ch("../my_node/value")')
Activer un nœud
node.setDisplayFlag(True)
Cela revient à cliquer sur le bouton bleu à droite d’un nœud.
La position des nœuds
x, y = node.position()
node.setPosition(x, y)
Un nœud peut être automatiquement positionné :
node.moveToGoodPosition()
La time line
Récupérer et modifier la time line.
current_frame = hou.frame()
start, end = hou.playbar.frameRange()
start, end = hou.playbar.playbackRange()
frame_rate = hou.fps()
hou.setFrame(1)
hou.playbar.setFrameRange(1, 100)
hou.playbar.setPlaybackRange(1, 100)
hou.setFps(24)
Un network box
Ces nœuds servent à empaqueter des nœuds entres eux :
root.createNetworkBox(item_name)
box.setComment('foo')
box.setColor(hou.Color(1.0, 1.0, 0.7)) # Background color.
for node in nodes: # Puts nodes inside box.
box.addNode(node)
# Adjust size to content.
box.fitAroundContents()
Dernière mise à jour : mar. 12 mai 2020