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つのノードタイプに競合して 登録されることは問題なく、 また、同じクラスを複数のノードタイプに登録しても構わない。 登録時は、ノードタイプごとに管理されているリストの最初に挿入 されるため、後から登録したものほど優先される。