Houdini 17.0 Pythonスクリプト

Pythonステート ハンドル

独自ステートとハンドルを紐づけて、そのハンドルを使ってユーザー操作に反応させる方法。

On this page

Pythonビューアステート

概要

ユーザーがノードのViewer Stateで作業する時にインタラクティブにパラメータを編集できるようにする標準的な方法は、ノードパラメータに ハンドル をバインド(紐づけ)させることです。

ローレベルの入力デバイスイベントを解釈できたとしても、ハンドルの方が今でもステートでユーザーがインタラクティブに操作できるようにセットアップするためのメインの方法です。 ハンドル自体が非常に強力で、幅広く色々とパラメータをセットアップできるように既製ユーザーインターフェースを指定することができます。 色々なハンドルの多くのライブラリからそれを選択することができます。

ステートテンプレートを作成する時は、ステートにハンドルを バインド させます。 現在のところ、動的にハンドルを作成したり破棄することができません。つまり、ステートで必要となるハンドルすべてを事前に指定しておく必要があります。 しかし、動的にハンドルを表示/非表示にすることは可能です。

静的ハンドル

静的 ハンドルのバインドは、ハンドルパラメータとノードパラメータの単純な1:1のマッピングに対応しています。 移動、回転、スケール、長さなどのハンドルパラメータは、ノードのそれに該当するパラメータと合わせることがほとんどなので、このマッピングを使用することがほとんどです。

ステートに追加したい静的ハンドル毎に、そのハンドルタイプの名前、そのハンドルの内部名(各ハンドルの名前はツール内の他のハンドルと被ってはいけません)、 ノードパラメータとハンドルパラメータをマッピングさせた("node_parm_name", "handle_parm_name")タプルのリストでhou.ViewerStateTemplate.bindHandleStatic()をコールします。

class PythonMeasureState():
    def __init__(self, state_name, scene_viewer):
        self.state_name = state_name
        self.scene_viewer = scene_viewer


template = hou.ViewerStateTemplate(
    "pythonmeasure.pystate",
    "Python Measure",
    hou.sopNodeTypeCategory()
)
template.bindFactory(PythonMeasure)

# このステートのアセットに"start"と"end"の2個の移動パラメータがあることを想定します。
template.bindHandleStatic(
    "xform", "start_handle",
    [("startx", "tx"), ("starty", "ty"), ("startz", "tz")]
)
template.bindHandleStatic(
    "xform", "end_handle",
    [("endx", "tx"), ("endy", "ty"), ("endz", "tz")]
)

動的ハンドル

動的ハンドルのバインドは、コールバック関数において、ハンドルの変更がノードパラメータにどのように影響を与えるのか、または、ノードパラメータの変更がハンドルパラメータにどのように影響を与えるのかを決定します。

ステートに追加したい動的ハンドル毎に、そのハンドルタイプの名前、そのハンドルの内部名(各ハンドルの名前はツール内の他のハンドルと被ってはいけません)でhou.ViewerStateTemplate.bindHandle()をコールします。

Note

hou.ViewerStateTemplate.bindHandle()は、cache_previous_parmsブール引数を受け取ります。

cache_previous_parms=Trueを渡すと、Houdiniは、そのハンドル値を追跡して、ハンドルコールバック以前 のハンドルと 新しい ハンドルの値の両方を渡します。 これは、ユーザーがハンドルを動かした速さを調べたい時にその差分を追跡できるので便利です。

False(デフォルト)を渡すと、Houdiniは、ハンドルコールバックに以前の値を渡しません。

from __future__ import print_function
import hou

class PythonTwistState():
    def __init__(self, state_name, scene_viewer):
        self.state_name = state_name
        self.scene_viewer = scene_viewer

    def onHandleToState(self, kwargs):
        # ユーザーがハンドルを操作した時にコールされます。

        handle_name = kwargs["handle"]
        parms = kwargs["parms"]
        prev_parms = kwargs["prev_parms"]

        print("User edited handle:", handle_name)
        for parm_name in kwargs["mod_parms"]:
            old_value = prev_parms[parm_name]
            new_value = parms[parm_name]
            print("%s was: %s now: %s" % (parm_name, old_value, new_value))

    def onStateToHandle(self, kwargs):
        # 必要に応じて動的ハンドルを更新できるように、
        # ユーザーがパラメータ(s)を変更した時にコールされます。

        parms = kwargs["parms"]
        print("Parameters are now:", parms)
        for p in parms:
            print(p)


template = hou.ViewerStateTemplate(
    "pythontwist.pystate",
    "Python Twist",
    hou.sopNodeTypeCategory()
)
template.bindFactory(PythonTwistState)
template.bindHandle("xform", "twist_handle", cache_previous_parms=True)

動的ハンドルイベントのメソッドに渡される辞書には、以下の標準アイテムが含まれています:

node

現行ステートで作用しているノードを表現したhou.Nodeインスタンスを含んでいます。

Menu items

メニューアイテム名をキーとして使用したメニューアイテム関連の現行値を含んでいます。

onHandleToState

これは、ハンドルを変更した時にノードパラメータ(またはステート/表示)を更新することができます。

このメソッドに渡される辞書には、以下の追加アイテムが含まれています:

handle

ハンドルの文字列ID。

parms

新しいハンドルパラメータ値を含んだ辞書。

mod_parms

変更されたパラメータの名前のリスト。

prev_parms

このキーは、hou.ViewerStateTemplate.bindHandle()メソッドにcache_previous_parms=Trueを渡した場合に のみ存在します

これは、前のハンドルのパラメータ値を含んだ辞書です。 これは、差分計算に役立ちます。

onStateToHandle

このメソッドは、 ノードのパラメータを変更する度に ステートにバインドされた 動的ハンドル毎に 別々にコールされます。 これは、変更されたノードパラメータに合うようにハンドルパラメータを更新することができます。

このメソッドに渡される辞書には、以下の追加アイテムが含まれています:

handle

ハンドルの名前。

parms

ハンドルのパラメータ名と値をマッピングした辞書。 この辞書の値を変更することで、そのハンドルパラメータを編集することができます

このメソッドでは、ノードのパラメータからパラメータを読み込んで、kwargs["parms"]内の必要なハンドルのパラメータを動的に更新します:

def onStateToHandle(self, kwargs):
    node = kwargs["node"]
    handle_parms = kwargs["parms"]
    if kwargs["handle"] == "my_angle":
        node_tx = node.parm("tx").evalAsFloat()
        handle_parms["tx"] = node_tx * 2

ハンドルタイプ

名前

説明

パラメータ

angle

位置と回転のハンドル

input, onoff, px, py, pz, rx, ry, rz, scale, trs_order, tx, ty, tz, xyz_order

bboxvector

Bounding Box Vector

input, onoff, scale, twist, tx, ty, tz, vx, vy, vz

boundingbox

Bounding Box

bound_type, centerx, centery, centerz, constant_scale, onoff, rx, ry, rz, sizex, sizey, sizez, uniform_scale

boundingrect

Bounding Rectangle

centerx, centery, centerz, constant_scale, onoff, orient, rx, ry, rz, sizex, sizey, sizez, uniform_scale

boundboundingbox

Bounder Bounding Box

centerx, centery, centerz, constant_scale, onoff, orient, rx, ry, rz, sizex, sizey, sizez, uniform_scale

circle

Circle Transform

onoff, orient, rx, ry, rz, sx, sy, tx, ty, tz

clayxlate

Clay Translate

input, onoff, tx, ty, tz, u, v

curvepoint

Curve Point Options

keepingeo, pointlist

distance

Distance

dist, input, onoff, px, py, pz, vx, vy, vz

domain

Domain

input, onoff, u0, u1, v0, v1

edit

Edit

brushswitcher, dist, handle_group_pivot, input, inputtype, localspace, onoff, pivot_comp_rx, pivot_comp_ry, pivot_comp_rz, pivot_comp_shear_xy, pivot_comp_shear_xz, pivot_comp_shear_yz, pivot_comp_sx, pivot_comp_sy, pivot_comp_sz, pivot_comp_trs_order, pivot_comp_tx, pivot_comp_ty, pivot_comp_tz, pivot_comp_xyz_order, pivot_rx, pivot_ry, pivot_rz, px, py, pz, rx, ry, rz, shear_xy, shear_xz, shear_yz, switcher, sx, sy, sz, trs_order, tx, ty, tz, upx, upy, upz, xyz_order

extrude

Extrude

roup_pivot, grst_order , grx , gry , grz , gshear_xy , gshear_xz , gshear_yz , gsx , gsy , gsz , gtx , gty , gtz , gxyz_order , input, onoff, pivot_comp_in_obj_prexform, pivot_comp_rx, pivot_comp_ry, pivot_comp_rz, pivot_comp_shear_xy, pivot_comp_shear_xz, pivot_comp_shear_yz, pivot_comp_sx, pivot_comp_sy, pivot_comp_sz, pivot_comp_trs_order, pivot_comp_tx, pivot_comp_ty, pivot_comp_tz, pivot_comp_xyz_order, pivot_rx, pivot_ry, pivot_rz, px, py, pz, roffsetx, roffsety, roffsetz, rpivotx, rpivoty, rpivotz, rpostx, rposty, rpostz, rprex, rprey, rprez, rx, ry, rz, shear_xy, shear_xz, shear_yz, soffsetx, soffsety, soffsetz, spivotx, spivoty, spivotz, sx, sy, sz, trs_order, tx, ty, tz, uniform_scale, xyz_order

extrude2

Extrude v2

input, onoff, pivot_comp_in_obj_prexform, pivot_comp_rx, pivot_comp_ry, pivot_comp_rz, pivot_comp_shear_xy, pivot_comp_shear_xz, pivot_comp_shear_yz, pivot_comp_sx, pivot_comp_sy, pivot_comp_sz, pivot_comp_trs_order, pivot_comp_tx, pivot_comp_ty, pivot_comp_tz, pivot_comp_xyz_order, pivot_rx, pivot_ry, pivot_rz, px, py, pz, roffsetx, roffsety, roffsetz, rpivotx, rpivoty, rpivotz, rpostx, rposty, rpostz, rprex, rprey, rprez, rx, ry, rz, shear_xy, shear_xz, shear_yz, soffsetx, soffsety, soffsetz, spivotx, spivoty, spivotz, sx, sy, sz, trs_order, tx, ty, tz, uniform_scale, xform_front, xyz_order

fallbackvector

Vector with Fallback

onoff, scale, useval, vx, vy, vz

hudintslider

HUD Int Slider

value, onoff

設定

hudslider

HUD Slider

value, onoff

設定

isosegment0

Isoparm Segment

input , knotu, knotv, onoff, scale, useu, width

isosegment1

Isoparm Segment

input, onoff, knotu, knotv, scale, useu, width

mousewheelbump

Mouse Wheel Bump

onoff, value

mousewheelradius

Mouse Wheel Radius

radius

pasterange

Paste Range

input1, input2, onoff, u0, u1, v0, v1

peak

Peak

dist, input, onoff, radius

pill

Pill

botheight, botrx, botry, botrz, cbotheight, cbotrx, cbotry, cbotrz, colorb, colorg, colorr, corient, crx, cry, crz, csx, csy, csz, ctopheight, ctoprx, ctopry, ctoprz, ctx, cty, ctz, czfactor, orient, onoff, rigadjrx, rigadjry, rigadjrz, rigadjsx, rigadjsy, rigadjsz, rigadjtx, rigadjty, rigadjtz, rigadjzfactor, rx, ry, rz, topheight, toprx, topry, toprz, tx, ty, tz, x, y, z, zfactor

pivot

Pivot

input, onoff, tx, ty, tz

project

Project

axis, input, onoff, scale, twist, vx, vy, vz

softxform

Soft Transformer

input, localspace, onoff, pivot_comp_in_obj_prexform, pivot_comp_rx, pivot_comp_ry, pivot_comp_rz, pivot_comp_shear_xy, pivot_comp_shear_xz, pivot_comp_shear_yz, pivot_comp_sx, pivot_comp_sy, pivot_comp_sz, pivot_comp_trs_order, pivot_comp_tx, pivot_comp_ty, pivot_comp_tz, pivot_comp_xyz_order, pivot_rx, pivot_ry, pivot_rz, px, py, pz, roffsetx, roffsety, roffsetz, rpivotx, rpivoty, rpivotz, rpostx, rposty, rpostz, rprex, rprey, rprez, rx, ry, rz, shear_xy, shear_xz, shear_yz, soffsetx, soffsety, soffsetz, spivotx, spivoty, spivotz, sx, sy, sz, trs_order, tx, ty, tz, uniform_scale, upx, upy, upz, xyz_order

sphere

Sphere Transformer

onoff, orient, rx, ry, rz, sx, sy, sz, tx, ty, tz

translate

Translate

input, onoff, tx, ty, tz

torus

Torus Transformer

onoff, orient, rx, ry, rz, sx, sy, tx, ty, tz

tube

Tube Transformer

onoff, orient, rx, ry, rz, sx, sy, sz, tx, ty, tz

uisoparm

U Isoparm

input, k, onoff

uvedit

UV Edit Manipulator

input, onoff, px, py, rz, shear_xy, sx, sy, trs_order, tx, ty, xyz_order

uvedit_reversez

Texture Transformer

input, onoff, rz, sx, sy, tx, ty

uvpoint

UV Point

input, onoff, px, py, pz, rx, ry, rz, sx, sy, sz, u, v

uvproject

UV Project Manipulator

onoff, projtype, px, py, pz, rx, ry, rz, sx, sy, sz, torrad, trs_order, tx, ty, tz, xyz_order

uvrange

UV Range Manipulator

onoff, projtype, px, py, pz, rx, ry, rz, sx, sy, sz, torrad, trs_order, tx, ty, tz, u0, u1, v0, v1, xyz_order

uvxform

UV Transform Manipulator

group_pivot, input, onoff, px, py, rz, shear_xy, sx, sy, trs_order, tx, ty, xyz_order

uvunwrap

UV Unwrap Manipulator

input, onoff, projplanes, px, py, pz, ref_input, rx, ry, rz, trs_order, tx, ty, tz, xyz_order

vector

Vector

input, onoff, scale, twist, tx, ty, tz, vx, vy, vz

visoparm

V Isoparm

input, k, onoff

xform

Transformer

input, onoff, pivot_comp_in_obj_prexform, pivot_comp_rx, pivot_comp_ry, pivot_comp_rz, pivot_comp_shear_xy, pivot_comp_shear_xz, pivot_comp_shear_yz, pivot_comp_sx, pivot_comp_sy, pivot_comp_sz, pivot_comp_trs_order, pivot_comp_tx, pivot_comp_ty, pivot_comp_tz, pivot_comp_xyz_order, pivot_rx, pivot_ry, pivot_rz, px, py, pz, roffsetx, roffsety, roffsetz, rpivotx, rpivoty, rpivotz, rpostx, rposty, rpostz, rprex, rprey, rprez, rx, ry, rz, shear_xy, shear_xz, shear_yz, soffsetx, soffsety, soffsetz, spivotx, spivoty, spivotz, sx, sy, sz, trs_order, tx, ty, tz, uniform_scale, xyz_order

HUD整数スライダの設定

hudh: 高さ

hudharbourname('name') スライダをグループに割り当てます。同じグループのスライダ同士がドッキングされます。

hudharbourx(int) スライダグループのX位置。

hudharboury(int) スライダグループのY位置。

hudnameside(int) ラベル位置: 上(1), 左(2), 右(3), 下(4)

hudrangehigh(int) スライダ範囲の上限値。

hudrangelow(int) スライダ範囲の下限値。

hudlockhigh(int) 最大制限値。

hudlocklow(int) 最小制限値。

hudvalueside(int) 位置の値: 上(1), 左(2), 右(3), 下(4)

hudx(int) ビューアペイントのX位置。

hudw(int) ビューアペインのY位置。

hudw(int)

HUDスライダ設定

hudh: 高さ

hudharbourname('name') スライダをグループに割り当てます。同じグループのスライダ同士がドッキングされます。

hudharbourx(int) スライダグループのX位置。

hudharboury(int) スライダグループのY位置。

hudnameside(int) ラベル位置: 上(1), 左(2), 右(3), 下(4)

hudrangehigh(float) スライダ範囲の上限値。

hudrangelow(float) スライダ範囲の下限値。

hudlockhigh(float) 最大制限値。

hudlocklow(float) 最小制限値。

hudvalueside(int) 位置の値: 上(1), 左(2), 右(3), 下(4)

hudx(int) ビューアペイントのX位置。

hudw(int) ビューアペイントのY位置。

hudw(int)

Pythonビューアステート

Pythonスクリプト

はじめよう

次のステップ

Pythonビューアステート

Pythonでビューアステートを記述することで、ビューポート内でノードのユーザー操作をカスタマイズすることができます。

導師レベル

リファレンス

  • hou

    Houdiniにアクセスできるサブモジュール、クラス、ファンクションを含んだモジュール。

  • Alembic拡張関数

    Alembicファイルから情報を抽出するための便利な関数です。