H16新機能 コンパイルブロック 6 – コンパイルブロックとPython その2


どうも篠島です。前回に引き続きPythonの説明です! 今回は前回のPythonスクリプトの説明をしていきます。

 

前回のPythonスクリプトです。

 

ブログ書いてる時はダブルクオーテーションがちゃんと表示されるのですが、自分の環境では実際にブログ表示すると異なる記号? みたいなのになってしまっています。フォントの問題なのだろうか・・・?、コピペする時は気をつけましょう。

 

自分のノードを返して、node変数に入れる。すなわちPython SOPノードが代入される。

node = hou.pwd()

 

geo変数を作り、自分自身(Python SOP)のジオメトリを入れる。すなわち、Python SOPのインプットに繋がれたジオメトリ、Box のジオメトリが代入される。

geo = node.geometry()

 

空っぽのジオメトリの入れ物、resultgeo変数を作る。

resultgeo = hou.Geometry()

 

SOPのカテゴリーと言うものを作り、sops変数にいれる。

sops = hou.sopNodeTypeCategory()

 

 

ここでちょっとカテゴリについて・・・。Python Shell で hou.sopNodeTypeCategory() と入力すると返される値を確認できる。SOP用のノードタイプカテゴリーと言うものが返されるのが確認できます。

 

カテゴリーに関する情報があまりヘルプにも載ってませんが、このカテゴリーからそれぞれのSOPのタイプとSOPの動詞を取ってこれたりします。Python Shell で hou.sopNodeTypeCategory().nodeTypes()[‘box’] と入力すると下のようにBox SOPのタイプが得られます。

 

 

SOPカテゴリーからSubdivideの核となる部分(動詞)を、subverb変数にいれる。

subverb = sops.nodeVerb(“subdivide”)

 

subverb変数に入っているSubdivide SOPの動詞に対してパラメーターを変更する。引数はディクショナリにして渡してやる。setParms()メソッドで変更しない場合はデフォルトの値が使われる。

subverb.setParms({“iterations”:3})

 

それぞれの動詞は execute() メソッドを持っており、このコマンドで最終的に処理を実行する。最初の引数が出力先の変数、二つ目の引数にはインプットジオメトリをリストとして入れる。

subverb.execute(resultgeo, [geo])

 

Subdivide の場合と同様に、SOPカテゴリからIso Offsetの動詞を取得。

isoverb = sops.nodeVerb(“isooffset”)

 

 

Iso Offsetのパラメーター変更。同じくディクショナリを渡している。

isoverb.setParms({“samplediv”:100, “output”:0})

 

そして、Iso Offsetの処理を実行。入力ジオメトリに対して結果を直接上書きしている。

isoverb.execute(resultgeo, [resultgeo])

 

 

自分のノードのジオメトリを全部削除する。これをしないと、Pythonノードのインプットがそのままジオメトリの入れ物に残ってしまいます。

node.geometry().clear()

 

 

そして先程処理したジオメトリを自分のノードのジオメトリの入れ物に読み込む。

node.geometry().merge(resultgeo)