そんな時のためのスクリプト。
proc string _round(
int $digit,
string $mode,
float $value )
/******************************************************************************
指定の桁数で切り上げる
******************************************************************************/
{
float $mlt =pow( 10, $digit );
float $sub =pow( 10,-$digit );
float $pls =( 0<$value ) ? 0.5: -0.5;
float $val =((int)(($value*$mlt)+$pls)*$sub);
string $str =(string)$val;
if("xform"==$mode) return $str;
//------------------------------------------------------------------------------
if( !$digit ) return (( $val<0 ) ? $str: (" "+$str));
//------------------------------------------------------------------------------
// 少数の桁数をそろえる
string $array[]=stringToStringArray( $str,"." );
if( 0<=$val ) $array[0]=(" "+$array[0]);
while(`size $array[1]`<$digit ) $array[1]=($array[1]+"0");
return ($array[0]+"."+$array[1]);
}
global proc printCurvePointPositions(
int $digit, // 少数部の桁数
string $mode ) // 表記方法
/******************************************************************************
main procidure.
******************************************************************************/
{
string $objs[]=`ls -sl`;
for( $obj in $objs )
{
select -r ($obj+".ep[*]");
string $eps[]=`ls -sl -fl`;
int $i=0;
for( $e in $eps )
{
vector $p=`xform -q -os -t $e`;
string $x=`_round $digit $mode ($p.x)`;
string $y=`_round $digit $mode ($p.y)`;
string $z=`_round $digit $mode ($p.z)`;
switch( $mode )
{
case "xform": print ("xform -os -t "+$x+" "+$y+" "+$z+" "+$e+";\n"); break;
case "list": print ("$pos["+$i+"]=<<"+$x+", "+$y+", "+$z+">>;\n"); break;
}
$i++;
}
}
select -r $objs;
}
カーブオブジェクトを選択した状態で、
printCurvePointPositions( 2,"xform" );
printCurvePointPositions( 2,"list" );
のような感じに実行すると、スクリプトエディタのヒストリーに座標がプリントされます。
"xform"は左右反転のサポート用。
"list"はリグ作成スクリプトのサポート用。
0 件のコメント:
コメントを投稿