いくつかの Softimage 関数は、出力引数と戻り値の両方を戻します。 関数に明示的に定義された戻り値がある場合は、関数が代わりに特定の値を戻すため、ISIVTCollection から出力引数を抽出できません。
「戻り値」セクション(「コマンドおよびスクリプト リファレンス」)では、コマンドが明示的な戻り値を使用するかどうか、またその値が何であるかを調べることができます。
この場合、VBScript は出力引数を介して情報を取得するために出力パラメータを渡す必要があります。ただし、JScript および Python では、他の方法を考慮する必要があります。
ほとんどの場合、これらの関数には出力引数と戻り値を使用する特別版の関数が用意されています。 一般に、この特別版の関数名は、出力引数バージョンの関数と同じ名前に「2」が付いたものです。 たとえば、NurbsSurface.GetTrim 関数は出力引数を許可していますが(「VBScript の例: メソッドから出力引数を取得する」を参照)、NurbsSurface.GetTrim2 関数は出力された値の配列を戻します(「JScript の例: メソッド「2」の回避策を使用する」を参照)。
関数の代替(対応した)バージョンがない場合の回避策としては、VBScript のカスタム コマンドを作成して、対応していないコマンドを呼び出したり、出力引数と戻り値の両方を含む配列を戻す方法があります。
このコードには、カスタム コマンド用の Execute コールバックが含まれていることに注意してください。 このプラグインを完全実装するための詳細については、「例: 出力引数と戻り値のカスタム コマンドによる回避策」を参照してください。
' Execute callback for the custom command function MyGetSkeleton_Execute( InputObj ) ' Call the GetSkeleton command and pack the output ' argument and the return value in an array set oSkel = GetSkeleton( InputObj, lIndex ) aReturn = Array( lIndex, oSkel ) ' Return the array MyGetSkeleton_Execute = aReturn end function
' Execute callback for the custom command function MyGetSkeleton_Execute( InputObj ) ' Call the GetSkeleton command and pack the output ' argument and the return value in an array set oSkel = GetSkeleton( InputObj, lIndex ) aReturn = Array( lIndex, oSkel ) ' Return the array MyGetSkeleton_Execute = aReturn end function
NewScene( null, false ); Create2DSkeleton( -3.004, 2.152, 0.000, -1.531, -1.163, 0.000, 0.000, 0.000, 1.000, 1 ); AppendBone( "eff", 0.853, 1.396, 0.000 ); AppendBone( "eff", 2.578, -1.532, 0.000 ); // Returns a VBArray, which must be converted to a JS Array var RtnArray = MyGetSkeleton( "bone1" ).toArray(); // The output argument is the first item (a Long) var MyObjIndex = RtnArray[0]; LogMessage( "Index of objects in skeleton: " + MyObjIndex ); // The return value is the second item (XSICollection) var MySkeleton = RtnArray[1]; for ( i=0; i<MySkeleton.Count; i++ ) { LogMessage( "Item[" + i + "] = " + MySkeleton(i) ); } // So both are available now in JScript // INFO : Index of objects in skeleton: 2 // INFO : Item[0] = root // INFO : Item[1] = bone // INFO : Item[2] = bone1 // INFO : Item[3] = bone2 // INFO : Item[4] = eff