出力引数の操作

 
 
 

Softimage は、出力引数を使用します(一部のスクリプト コマンド、たとえば、AddPropGetFCurveInfo、および 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 ユーティリティを使用することもできます。 詳細については、同じフォルダのヘルプ ページを参照してください。