[PYTHON] Combien de nœuds y a-t-il?

Article du jour 19 du calendrier de l'Avent Houdini 2016.

Le contenu est comme le titre ... À ce stade, ceux qui disent «Ah, haut» peuvent être invités à le fermer. Si vous connaissez une autre meilleure façon, je vous serais reconnaissant de bien vouloir me le dire en secret.

Deviner le type de nœud

Jetons un œil à l'intérieur du module hou. De la liste retournée par dir, si "NodeType" est inclus, cela semble être le cas, donc Je vais enquêter comme ça.

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

Puis

NodeType

Il est revenu un peu. Il semble que la première moitié et _swigregister soient différents. Il est intéressant de noter qu'il existe des "Node Type" et "Node Type Category". Je pense que ce dernier est plus comme ça.

inspect.getmembers

Jetons maintenant un coup d'oeil en utilisant le module inspect getmembers.

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

Le système NodeTypeCategory semble être une ** fonction intégrée ** à tous les niveaux. Ces fonctions renvoient un type "NodeTypeCategory".

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

NodeTypeCategory

Dans le type NodeTypeCategory, j'ai tapé n pour voir le nom pour le moment, puis "nodeTypes" a également été suggéré. name_nodeTypes

sopCategory.name()
'Sop'

sopCategory.nodeTypes()

Le nom est comme prévu, mais Le nodeTypes que j'ai trouvé en passant ressemble à ceci! nodeTypes

J'avais un peu peur, mais maintenant je peux vérifier les nœuds dans chaque catégorie de nœuds.

Compter le contenu de 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 ) )

L'essai sauf au milieu est fourni par les personnes swigregister pour provoquer une erreur. La deuxième ligne à partir du bas a reçu le dictionnaire qui était le résultat de nodeTypes, et a imprimé la longueur du dictionnaire avec le nom de la catégorie.

count

résultat…… ~ ~ Je comprends que chaque système Net n'a qu'un seul nœud, Y a-t-il autant de SOP, DOP, VOP, etc.? ?? ?? Est-ce vrai.

Je publierai le résultat pour le moment. C'est 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)

Compter le contenu des nodeTypes (en particulier CHOP)

J'ai décidé de comparer ** CHOP **, qui semble relativement facile à compter. Le résultat du script est "103" comme ci-dessus.

chopNodes = hou.chopNodeTypeCategory().nodeTypes()
sorted( chopNodes.keys() )
スクリーンショット 2016-12-19 23.22.11.png

Sur l'interface utilisateur Houdini ...

CHOP

4 colonnes, 25 lignes. ** Vous pouvez même multiplier ** Je ne trouve pas 3 nœuds " for "," popnet" et " vop phop type "sur l'interface utilisateur.

Cependant, si vous regardez le document en ligne à partir de H12, il y a forCHOP, donc http://sidefx.jp/doc/nodes/chop/for.html On peut en déduire qu'ils sont laissés pour compte pour maintenir la compatibilité avec les données de scène passées. Est-ce ainsi que la quantité de VOP est si grande?

Alors, comment filtrer uniquement ce nœud avec un script? Il semble que ce sera mes prochains devoirs.

Résumé

J'ai été aidé par la suggestion. Pratique! !!

Vient ensuite Yone80 @ github "Transformer pour adapter un polygone carré".

Recommended Posts

Combien de nœuds y a-t-il?
Puisqu'il y a beaucoup de tremblements de terre, obtenez l'histoire du tremblement de terre
[Harlem] Il y en a trop pour choisir! 13 façons de calculer la circonférence π en Python
Comment écrire une chaîne de caractères lorsqu'il y a plusieurs lignes en python