Softimage は、出力引数を使用します(一部のスクリプト コマンド、たとえば、AddProp、GetFCurveInfo、および SICreateImageClip などで)。 C++ では出力引数がサポートされますが、以下に示すように、更新された値は(その初期化に使用された可能性がある変数内ではなく)渡された CValueArray 内に格納されます。
Application app; // Trying to get output arguments via the variable Camera cam; Null camInt; CValue retVal; CValueArray inArgs(8); inArgs[0] = L"Telephoto"; inArgs[1] = L"MyCamera"; inArgs[4] = cam; inArgs[5] = camInt; app.ExecuteCommand( L"SIGetPrimCamera", inArgs, retVal ); // Testing the 'output' arguments to see if they're valid if ( cam.GetRef().IsValid() ) { app.LogMessage( cam.GetName() + L" is valid" ); } else { app.LogMessage( L"'cam' is not valid" ); } if ( camInt.GetRef().IsValid() ) { app.LogMessage( camInt.GetName() + L" is valid" ); } else { app.LogMessage( L"'camInt' is not valid" ); } /* The following is logged to history: 'INFO : 'cam' is not valid 'INFO : 'camInt' is not valid */
出力引数を抽出するには、次の方法で入力引数配列(CValueArray)から取得し、各配列メンバを CValue から妥当なデータ型またはクラスに変換します。
Application app; CValue retVal; CValueArray inArgs(8); inArgs[0] = L"Telephoto"; inArgs[1] = L"MyCamera"; inArgs[4] = CValue(); // newly created Camera and Interest are returned as output arguments inArgs[5] = CValue(); app.ExecuteCommand( L"SIGetPrimCamera", inArgs, retVal ); // The camera is in inArgs[4] and its interest in inArgs[5] Camera cam( inArgs[4] ); Null camInt( inArgs[5] ); app.LogMessage( cam.GetName() + L" is at position " + CString(cam.GetParameterValue(L"posx")) + L"," + CString(cam.GetParameterValue(L"posy")) + L"," + CString(cam.GetParameterValue(L"posz")) ); app.LogMessage( camInt.GetName() + L" is at position " + CString(camInt.GetParameterValue(L"posx")) + L"," + CString(camInt.GetParameterValue(L"posy")) + L"," + CString(camInt.GetParameterValue(L"posz")) ); /* The following is logged to history: 'INFO : Number of output arguments in the returned array: 4 'INFO : MyCamera is at position 0,2,20 'INFO : CameraInterest is at position 0,0,0 */
コマンド スタブを生成する Application::ExecuteCommand 関数に代わる簡単な方法として、<factory location>¥XSISDK¥utils¥cmdstubs ディレクトリにある cmdstubs_generator.js ユーティリティを使用することもできます。 詳細については、同じフォルダのヘルプ ページを参照してください。