移動先: 概要 戻り値 フラグ MEL の例

概要

stackTrace [-dump] [-parameterCount uint] [-parameterType uint uint] [-parameterValue uint uint] [-state boolean]

stackTrace は「元に戻す」が可能、「照会」が可能、「編集」が不可能です。

このコマンドは MEL スタック トレースを制御します。

戻り値

int: 照会モードで状態を返す

戻り値の型は照会モードでは照会フラグが基になります。

フラグ

dump, parameterCount, parameterType, parameterValue, state
ロング ネーム(ショート ネーム) 引数型 プロパティ
-state(-s) boolean createquery
MEL スタック トレースの表示をオンまたはオフにします。
-dump(-d) query
MEL 呼び出しのカレント スタックをダンプします。
-parameterCount(-pc) uint create
特定のスタック レベルでの関数のパラメータ数を整数で返します。
-parameterType(-pt) uint uint create
特定のスタック レベルで指定された関数パラメータのタイプを文字列で返します。引数は次のとおりです。スタック インデックス、パラメータ インデックス。戻り値は、int、int[]、float、float[]、vector、vector[]、string、string[] です。
-parameterValue(-pv) uint uint create
特定のスタック レベルで指定された関数パラメータの値を返します。戻り値のタイプはパラメータの実際のタイプに一致します。例外はベクトルおよびベクトル配列で、float 配列として返されます。しかし、これらの結果をベクトル/ベクトル配列に割り当てることが可能で、投影は自動的に行われます(後述の MEL の例を参照)。引数は次のとおりです。スタック インデックス、パラメータ インデックス。

: コマンドの作成モードで使用可能なフラグ : コマンドの編集モードで使用可能なフラグ
: コマンドの照会モードで使用可能なフラグ : 1 つのコマンドで複数回使用可能なフラグ

MEL の例

// Have the stack trace show up on MEL script errors
stackTrace -state on;
// No stack trace for MEL script errors
stackTrace -state off;

// The following is an example of the use of the parameterCount/Type/Value flags.
// A function is defined which uses stackTrace to examine its own inputs.
proc foo( int $inty, int $intya[], float $floaty, float $floatya[], string $stringy, string $stringya[], vector $vectory, vector $vectorya[] )
{
	string $dump[] = `stackTrace -q -d`;
	print( $dump[0] );
	int $count = `stackTrace -pc 0`;
	print( "parameter count: " + $count + "\n" );
	int $i;
	for ( $i=0; $i<$count; $i++ )
	{
		string $type = `stackTrace -pt 0 $i`;
		print( "parameter " + $i + " type: " + $type + "\n" );
		switch ( $type )
		{
		case "int":
			int $val_i = `stackTrace -pv 0 $i`;
			print( "   value: " + $val_i + "\n" );
			break;
		case "float":
			float $val_f = `stackTrace -pv 0 $i`;
			print( "   value: " + $val_f + "\n" );
			break;
		case "string":
			string $val_s = `stackTrace -pv 0 $i`;
			print( "   value: " + $val_s + "\n" );
			break;
		case "vector":
			vector $val_v = `stackTrace -pv 0 $i`;
			print( "   value: <<" + $val_v + ">>\n" );
			break;
		case "int[]":
			int $val_ia[] = `stackTrace -pv 0 $i`;
			print( "   value: [" );
			for ( $j in $val_ia ) print( $j + ", " );
			print( "]\n" );
			break;
		case "float[]":
			float $val_fa[] = `stackTrace -pv 0 $i`;
			print( "   value: [" );
			for ( $f in $val_fa ) print( $f + ", " );
			print( "]\n" );
			break;
		case "string[]":
			string $val_sa[] = `stackTrace -pv 0 $i`;
			print( "   value: [" );
			for ( $s in $val_sa ) print( $s + ", " );
			print( "]\n" );
			break;
		case "vector[]":
			vector $val_va[] = `stackTrace -pv 0 $i`;
			print( "   value: [" );
			for ( $v in $val_va ) print( "<<" + $v + ">>, " );
			print( "]\n" );
			break;
		}
	}
}
// Make some input arrays.
int $i[3] = { 9, 6, 3 };
float $f[4] = { 5.0, 7.0, 9.0, 23.0 };
string $s[2] = { "monkey", "ape" };
vector $v[2] = { <<0.1,0.2,0.3>>, <<7,7,11>> };
// Invoke the function.
foo( 42, $i, 3.14, $f, "oook", $s, <<0,0,1>>, $v );