Help us understand the problem. What is going on with this article?

ノードっていくつあるんですか?

More than 3 years have passed since last update.

Houdini アドベントカレンダー2016 19日目の記事です。

内容は掲題の通りですので……
この時点で「あー、ハイハイ」という方はそっ閉じしていただいたり、
他にもっといい方法知ってたらこっそり教えていただけたりすると嬉しいです。

NodeTypeという当て推量

houモジュールの中を見てみようかなーと思います。
dirで返ってくるリストのうち、「NodeType」が含まれていればそれっぽいような気がするので、
そのように調べてみます。

for i in dir(hou):
    if 'NodeType' in i:
        print( i )

すると

NodeType

結構返ってきました。
前半のとか、_swigregisterとかは違いそうです。
「NodeType」と「NodeTypeCategory」がいるのが興味深いですね。
後者の方がよりそれっぽい気がします。

inspect.getmembers

今度は、inspectモジュールのgetmembersを使って見てみます。

import inspect
for i in inspect.getmembers(hou):
    if 'NodeType' in i[0]:
        print i

getmembers

NodeTypeCategory系は、軒並み built-in function なようです。
これらの関数は、「NodeTypeCategory」型を返してくれます。

type( hou.sopNodeTypeCategory() )
<class 'hou.NodeTypeCategory'>

NodeTypeCategory

NodeTypeCategory型で、とりあえず名前(name)でも見ようかなと n をタイプしたら、ついでに「nodeTypes」というのもサジェストされました。
name_nodeTypes

sopCategory.name()
'Sop'

sopCategory.nodeTypes()

nameの方は想像通りの結果ですが、
ついでに見つけたnodeTypesの方はこういう感じになりました!
nodeTypes

ちょっとギョッとしましたが、これで各ノードカテゴリ内のノードをチェックできそうです。

nodeTypesの中身をカウント

import inspect
for i in inspect.getmembers(hou):
    if 'NodeType' in i[0]:
        if inspect.isbuiltin(i[1]):
            try:
                nodetypecategory= i[1]()
            except:
                continue
            nts = nodetypecategory.nodeTypes()
            print( nodetypecategory.name(),len( nts ) )

途中のtry-exceptは、swigregisterの人たちがエラーを起こすために設けたものです。
下から2行目で先ほどのnodeTypesの結果である辞書を受け取り、カテゴリ名と共にその辞書の長さをプリントしてみました。

count

結果……
〜〜Net系はそれぞれ1ノードしかないのはわかるんですが、
SOPとかDOPとかVOPとかそんなに多いものなんですか??? そうですか。

一応結果を貼っておきます。H15.5.632です。

('ChopNet', 1)
('Chop', 103)
('CopNet', 1)
('Cop2', 145)
('Dop', 435)
('Object', 146)
('Particle', 1)
('Pop', 68)
('Driver', 42)
('Shop', 205)
('Sop', 430)
('VopNet', 18)
('Vop', 816)

nodeTypesの中身をカウント(特にCHOP)

比較的数えやすそうなCHOPを比べてみることにしました。
スクリプトの結果が上記のように「103」。

chopNodes = hou.chopNodeTypeCategory().nodeTypes()
sorted( chopNodes.keys() )

スクリーンショット 2016-12-19 23.22.11.png

Houdini UI上だと……

CHOP

4列、25行。掛け算くらいできます
for」と「popnet」と「vopchoptype」の3ノードが、UI上では見当たりません。

でも、H12時点のオンラインドキュメントを見てみると、forCHOPはありますので、
http://sidefx.jp/doc/nodes/chop/for.html
これらは、過去のシーンデータとの互換性を保つためとかで残してあるものなのだろうなと推察できます。
VOPがすごい量になってるのもそうアレなのでしょうか。

ではスクリプトでそのノードだけフィルタリングするには?
といったあたりは次回の宿題になりそうです。

まとめ

サジェストに助けられました。
便利!!

次は yone80@github さんの「四角ポリゴンに合わせて変形」です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした