そんな時のためのスクリプト。
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 件のコメント:
コメントを投稿