Created on | Updated on

【Python State ユースケース】Pythonステート 選択

公式ドキュメント:Pythonステート 選択
トップページ:Houdini Python State サンプルコードユースケース

手動型のスクリプトによる選択

シェルフツールに埋め込む

  1. シェルフタブに新しいシェルフツールを作る
  2. Edit Tool を開き、Script タブにサンプルコードを貼り付け
  3. 38, 45行目の「"$HDA_NAME"」を「"copytopoints::2.0"」に書き換える
  4. Accept で保存
  5. ネットワークビューに box を配置
  6. 今作ったシェルフツールをクリック
  7. box プリミティブを全選択(ダブルクリック)して Enter
  8. 頂点の 8ポイントを全選択して Enter

copy to points の両入力に box が入るはずです。

 

HDA に埋め込む

  1. copytopoints を含む HDA を作成
  2. Type Properties を開き、Basic タブで Maximum Inputs を 2 にする
  3. HDA の中に入り、copytopoints に Input #1 と #2 を接続し、Save Node Type
  4. Type Properties の Interactive > Shelf Tools タブにサンプルコードを貼り付け
  5. ネットワークビューで tab > 作成した HDA を選択
  6. box プリミティブを全選択(ダブルクリック)して Enter
  7. 頂点の 8ポイントを全選択して Enter

作成した HDA の両入力に box が入るはずです。

 

ジオメトリセレクターのバインド

HDA に埋め込む

  1. box を含む HDA を作成
  2. Type Properties を開き、Interactive > State Script タブの右下の New... を選択
  3. Label に任意の名前を入力し、イベントハンドラから onSelection だけを選択して Accept
  4. サンプルコードの onSelection 全体をコピーし、State Script の onSelection 全体に書き換え
  5. template = hou.ViewerStateTemplate(state_typename, state_label, state_cat)
    template.bindFactory(State)
    template.bindIcon(kwargs["type"].icon())
    の三行を削除し、サンプルコードの
    template = hou.ViewerStateTemplate(
    以下全文を貼り付け、改行を合わせる
  6. ここで Accept するとエラーになるため、selector #1 と #2 の geometry_typesprimitive_types をリストにする
  7. 47-50行目の template = hou.ViewerStateTemplate(...
    template = hou.ViewerStateTemplate(state_typename, state_label, state_cat)
    に書き換え
  8. 48行目の MyStateState に書き換え
  9. Accept で保存
  10. HDA を選択状態にしてフラグを立てて、ビューポートで Enter を入力
  11. 下に「Select three polygons」と出るので、3面選択して Enter を入力、エラーが出る
  12. Type Properties を開き、23行目あたりの are_prims = sel.geometryType() == hou.geometryType.Primitive の末尾を .Primitives に直す
  13. 29行目 return are_prims and are_all_polys and count == 3 の一行前に print ("Three polygons selected") と追加し、Accept で保存
  14. もう一度 12 をやり、出力を確認

サンプルコードだけでは 3ポリゴン以外の選択でも出力はされるが、あくまで内容として選択数が 3 かどうかを判定している。Selector #2 は自分で切り替えシステムを作れば起動できる。

これだけでは不十分なので、他のサンプルコードも参考にすることをお勧めします。

 

オブジェクトセレクターのバインド

HDA に埋め込む

  1. Object レベルに null を含む(もしくは空の)HDA を作成
  2. Type Properties を開き、Interactive > State Script タブの右下の New... を選択
  3. Label に任意の名前を入力し、イベントハンドラから onSelection だけを選択して Accept
  4. サンプルコードの onSelection 全体をコピーし、State Script の onSelection 全体に書き換え
  5. サンプルコードの template.bindObjectSelector( 以下 5行をコピーし、State Script の 36行目 template.bindIcon(kwargs["type"].icon()) の下に貼り付け
  6. 21行目の print 文を ( ) で囲み、Accept で保存
  7. HDA と同じ Object レベルに box や sphere などの Geometry ノードと camera を複数作成(camera は 2つ以上)
  8. HDA を選択状態にしてフラグを立てて、ビューポートで Enter を入力
  9. box や sphere は選択できないが、camera は選択できることを確認
  10. 任意の数の camera を選択して Enter を入力し、Number of cameras selected:(選択した数)と出力されることを確認

問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

※ 問い合わせ対応はBorn Digitalより製品をご購入頂きましたお客様のみのサービスとなります。ご了承下さい。
サポート問い合わせ