class cymel.core.typeregistry.NodeTypes¶

- class cymel.core.typeregistry.NodeTypes(*args, **kwargs)¶
ベースクラス:
objectノードタイプのラッパークラスのマネージャー。
唯一のインスタンスである
nodetypesが生成済み。全てのノードクラスはこの属性としてアクセスできる。
cymel では、プラグインも含む全てのノードタイプの ラッパークラスが提供されるが、機能実装のために あらかじめ用意されている主要なノードタイプ以外は、 最初にアクセスしたときなどの必要なときに自動生成される。
システムが提供する標準的なクラス名は、 ノードタイプ名の先頭を大文字にした名前となる。
既存のノードクラスを継承してカスタムクラスを作ることもできる。 カスタムクラスはノードタイプのみから純粋に決まるものでも、 その他の任意の条件によって決まるものでも良い。
カスタムクラスは、 システムに登録するなどせずにそのまま利用可能だが、
registerNodeClassによって登録することもできる。 インスタンスを得る場合、 そのクラスを直接指定すればインスタンスを得られるが、 クラスが登録してあればCyObjectからインスタンスを得ることで 自動的にクラスを決定させることができる。注釈
2026でのノードタイプ名の変更など、 バージョン間の互換性を維持した名前指定に対応しており、 常に新しいタイプ名 (たとえば、2026未満でも接尾辞
DLを付けた名前) での指定が推奨される。Methods:
basicNodeClass(nodetype[, nodename])ノードタイプ名のみを条件として決まるベーシッククラスを得る。
deregisterNodeClass(cls[, warn])ノードクラスとそのサブクラスの登録を削除する。
parentBasicNodeClass(nodetype[, nodename])指定ノードタイプの親タイプ名のみを条件として決まるベーシッククラスを得る。
registerNodeClass(cls, nodetype)ノードクラスを登録する。
relatedNodeTypes(cls)クラスに結び付けられているノードタイプのタプルを得る。
Methods Details:
- basicNodeClass(nodetype, nodename=None)¶
ノードタイプ名のみを条件として決まるベーシッククラスを得る。
- deregisterNodeClass(cls, warn=False)¶
ノードクラスとそのサブクラスの登録を削除する。
- parentBasicNodeClass(nodetype, nodename=None)¶
指定ノードタイプの親タイプ名のみを条件として決まるベーシッククラスを得る。
- registerNodeClass(cls, nodetype)¶
ノードクラスを登録する。
ノードクラスは、適合検査のためのスタティックメソッド
_verifyNodeを持つ 検査メソッド付きクラス と、 それを持たない ベーシッククラス に分けられる。適合検査のためのスタティックメソッドの仕様は以下の通り。
_verifyNode(mfn, name)
引数に、 Python API 2 の MFnDependencyNode 派生クラスのインスタンス(例えば dagNode なら MFnDagNode など)と、 ノードのパーシャルパスなどのユニーク名が渡され、 適合の可否を表すブール値を返すものとする。
_verifyNodeを実装した場合、さらにNode.createNodeもオーバーライドして、 ノード生成時に条件を満たすようにすることを推奨する。ベーシッククラスは、ノードタイプへの紐付けが厳格で、 抽象タイプも含む全てのノードタイプごとに1つずつ存在するか 自動生成される。 カスタムクラスをベーシッククラスとして登録する場合も、 ノードタイプと矛盾しない親クラスを継承しなければならない。 クラス実装で、継承すべき親クラスを取得するには
parentBasicNodeClassが便利である。 1つのノードタイプへの競合する登録は上書き登録となり、 警告が出力された上で古いクラスの登録はサブクラスも含めて 全て抹消される(システムが先んじて行った自動登録を上書き してもさして害は無い)。一方、適合検査メソッド付きクラスは、 ノードタイプへの紐付けが厳格でなくても問題ない。 クラスの継承と登録するノードタイプに矛盾さえ無ければ、 抽象タイプも含むどのノードタイプに登録するのも自由である。 複数の検査メソッド付きクラスが、1つのノードタイプに競合して 登録されることは問題なく、 また、同じクラスを複数のノードタイプに登録しても構わない。 登録時は、ノードタイプごとに管理されているリストの最初に挿入 されるため、後から登録したものほど優先される。