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 :

houdini_python_shell_menu

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 :

houdini_operator_info_001

Il apparaît dans la fenêtre (ici, geo) :

houdini_operator_info_002

Il est aussi disponible en faisant bouton-droit sur un nœud :

houdini_operator_info_bouton_milieu

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 :

houdini_parameter_name

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.

houdini_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 :

houdini_network_box

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