乳トラルポーズでポン。
深夜に唐突に降って来るスクリプト。
// 乳トラルポーズでポン。
var oNPCol = XSIFactory.CreateObject( 'XSI.Collection' );
var oCol = XSIFactory.CreateObject( 'XSI.Collection' );
oCol.items = Selection;
var oExpanded = oCol.expand( );
for (var i=0; i < oExpanded.count; i++ )
{
NPFlag = false;
var oObj = oExpanded(i);
if ( oObj.IsClassOf( siX3DObjectID ) )
{
var oLK = oObj.Kinematics.Local;
if ( oLK.nsclx.value != 1 || oLK.nscly.value != 1 || oLK.nsclz.value != 1 )
{
NPFlag = true;
}
else if ( oLK.nrotx.value != 0 || oLK.nroty.value != 0 || oLK.nrotz.value != 0 )
{
NPFlag = true;
}
else if ( oLK.nposx.value != 0 || oLK.nposy.value != 0 || oLK.nposz.value != 0 )
{
NPFlag = true;
}
else if ( oLK.nsclorix.value != 0 || oLK.nscloriy.value != 0 || oLK.nscloriz.value != 0 )
{
NPFlag = true;
}
}
if ( NPFlag == true )
{
oNPCol.Add( oObj );
}
}
SelectObj( oNPCol );
ニュートラルポーズが入ったオブジェクトを見つけます。 たぶん。
シーン内のオブジェクトを、ブランチとかノードとかグループとかで選択した状態で実行します。 すると、なんらかのニュートラルポーズが入っているオブジェクトだけが選択された状態になります。 選んでいたもののうちから検索してます。シーン全体でやりたければ、シーンルートをブランチ選択すれば良いでしょう。たぶん。
ニュートラルポーズがある状態とは、Local Kinematics の Neutral Pose タブで、SRT が 1,1,1 0,0,0 0,0,0 になってない状態ということで合ってますよね? あと、それに加えてシアー(Scaling Orientation)か。
一応、それを前提に検出しています。
間違ってたら教えてください。
同じようなスクリプト、以前に書いたことあるはずだよなあ・・・・。
リギング用小スクリプトがわんさかあるんですが、っていうか毎日少しずつ書き足しながらやってる感じですが、だんだんカオスっぷりがひどいことになってきて、自分で書いたスクリプトをHDDから探したり改良したりするのがめんどくさくて、一度書いたことがあるものでも難しくなければもうゼロから書き直してしまったり。 ちゃんと整理しておけばすぐ使えるのにねえ。
こうして無駄な繰り返しを繰り返し繰り返し繰り返すのです。スクリプト書いて省力化しているつもりで、実はたくさん無駄なことをやっているという、微妙な感じです。
.
| 固定リンク
コメント