ジャンプ先: 概要. 戻り値. フラグ. Python 例.

概要

cycleCheck( string[] , [all=boolean], [children=boolean], [dag=boolean], [evaluation=boolean], [firstCycleOnly=boolean], [firstPlugPerNode=boolean], [lastPlugPerNode=boolean], [list=boolean], [listSeparator=string], [parents=boolean], [secondary=boolean], [timeLimit=time])

注: オブジェクトの名前と引数を表す文字列は、カンマで区切る必要があります。これはシノプシスに示されていません。

cycleCheck は、取り消し可能、照会可能、および編集不可能です。

このコマンドは、ディペンデンシー グラフのプラグ サイクルを検索します。プラグやノードを選択すると、そのプラグやノードが関連するサイクルを検索します。プラグまたはノードも、引数として渡されます。-all フラグを使用すると、グラフ全体が検索されます。

通常、戻り値はブーリアン型で、指定の項目がサイクルに含まれていたかどうかを示します。-list フラグを使用すると、戻り値はサイクル(選択したプラグやノードが関連する)内のすべてのプラグを示すリストです。

なお、DG 接続がない場合も、評価サイクルを発生させることは可能です。たとえば次のようなものを作成できます。

1) 評価時に依存する接続を持つノード: 例としては、エクスプレッション ノードが挙げられます。エクスプレッション ノードの実際の参照先は評価時まで不明で、このように評価時に依存するノードは、ノードを評価するコンテキスト(たとえば、時間)によって異なる動作をする場合があるからです。このような接続によるサイクルが疑われる場合に最適なサイクル検出方法は、手作業での検証です。

2) DAG 階層によるサイクル: DAG ノードは必ずペアレント化によって接続されるため、子の DAG ノードが親ノードの入力に出力を接続する場合、関係するプラグも互いに影響を与えあっているときは、サイクルが存在します。DAG に関係するサイクルを検出するには、-dag フラグをコマンド ラインに追加してください。

このコマンドも、いくつかのインスタンスが IK を使用する場合、インスタンス化されたスケルトンに正しくサイクルを記録しないことがあるので注意してください。厳密にサイクルかどうかを判断するには、記録されたサイクルを自分で調べる必要があります。評価時のサイクル検査は、不正なサイクルをレポートしません。

戻り値

boolean一般的な場合。
string[]list フラグを使用する場合。

照会モードでは、戻り値のタイプは照会されたフラグに基づきます。

フラグ

all, children, dag, evaluation, firstCycleOnly, firstPlugPerNode, lastPlugPerNode, list, listSeparator, parents, secondary, timeLimit
ロング ネーム(ショート ネーム) 引数タイプ プロパティ
all(all) boolean create
セレクション リストの代わりに、サイクルのグラフ全体を検索します(注: 何も選択しない場合は、-all が指定されているとみなされます)。
children(c) boolean create
子のサイクルは考慮せず、指定したプラグのみを考慮します。
dag(dag) boolean create
DAG のリレーションシップによるサイクルも検索します。DAG ノードごとの子のペアレント化接続は、サイクルの検索時にも考慮されます。
evaluation(e) boolean createquery
グラフの評価中のサイクル検出をオンまたはオフにします。
firstCycleOnly(fco) boolean create
-list を使用してプラグ リストを返す場合、リストには複数のサイクルや部分サイクルが含まれることがあります。-firstCycleOnly を指定すると、この中の最初のサイクル(全体サイクル)のみが返されます。
firstPlugPerNode(fpn) boolean create
-list を使用してプラグ リストを返す場合、リストには通常はノードごとに複数のプラグが含まれ(例: A.output B.input B.output C.input など)、外部との DG 接続よりも内部の「作用対象」のリレーションシップが反映されます。-firstPlugPerNode を指定すると、ノードごとにリストの最初のプラグのみが返されます(例では B.input)。
lastPlugPerNode(lpn) boolean create
-list を使用してプラグ リストを返す場合、リストには通常はノードごとに複数のプラグが含まれ(例: A.output B.input B.output C.input など)、外部との DG 接続よりも内部の「作用対象」のリレーションシップが反映されます。-lastPlugPerNode を指定すると、ノードごとにリストの最後のプラグのみが返されます(例では B.output)。
list(l) boolean create
1 つまたは複数のサイクルに含まれるすべてのプラグを返します。指定しない場合は、サイクルが存在するかどうかを示すブーリアン値を返します。
listSeparator(ls) string create
-list を使用してプラグ リストを返す場合、リストには複数のサイクルや部分サイクルが含まれることがあります。-listSeparator を使用すれば、各サイクルを区切る文字列を指定して返される文字配列に挿入できます。
parents(p) boolean create
親のサイクルは考慮せず、指定したプラグのみを考慮します。
secondary(s) boolean create
指定のプラグだけでなく関連プラグのサイクルも検索します。既定値は、「-all」の場合は「オン」、その他の場合は「オフ」です。
timeLimit(tl) time create
検索時間を指定の長さに制限します。

フラグはコマンドの作成モードで表示できます フラグはコマンドの編集モードで表示できます
フラグはコマンドの照会モードで表示できます フラグに複数の引数を指定し、タプルまたはリストとして渡すことができます。

Python 例

import maya.cmds as cmds

# Print a message if xNode.tx is in a cycle.
cmds.createNode( 'transform', n='xNode' )
if cmds.cycleCheck('xNode.tx') > 0:
  print('xNode.tx is in a cycle')

# Get the list of plugs in a cycle with xNode.ty
cmds.connectAttr( 'xNode.tx', 'xNode.ty' )
cmds.connectAttr( 'xNode.ty', 'xNode.tx' )
cycles = cmds.cycleCheck()

# Print a message if there are any cycles in the graph.
if cmds.cycleCheck(all=True, tl='10sec') > 0:
  print("Your graph has a cycle.")
else:
  print("Your graph probably does not have a cycle")

# List all cycles involving the DG and DAG hierarchy.
cmds.cycleCheck(all=True,dag=True,l=True )