« ガッデムPlot更新。 | トップページ | 宇宙戦艦。 »

2010年12月19日 (日)

突然 Fcurve 補完のトグル。

ちょいと都合により、唐突にFカーブ関連のスクリプト。
後で加筆したり、移動したり、削除したりするかもしれません。しないかもしれません。



//    3Dオブジェクト選んで実行(複数可)
for ( var i=0; i<Selection.count; i++ )
{
    //    アニメーションされているパラメータだけを取得 = NodeAnimatedParameters
    var oParams = Selection(i).NodeAnimatedParameters();
    for ( var j=0; j<oParams.count; j++ )
    {
        var oSource = oParams(j).Source;    //    そのパラメータのソースを取得
        if ( oSource.IsClassOf( siFCurveID ) )    //    ソースが FCurve だったら以下実行
        {
            //    以下、リニアインターポレーション と キュービックインターポレーション をトグルしてるだけ
            if ( oSource.Interpolation == siLinearInterpolation )
            {
                oSource.Interpolation = siCubicInterpolation;
            }
            else
            {
                oSource.Interpolation = siLinearInterpolation;
            }
        }
    }
}

---------------------------

加筆。


//    3Dオブジェクト選んで実行(複数可)
for ( var i=0; i<Selection.count; i++ )
{
    // NodeAnimatedParameters は X3DObject 以外に効かないので、X3DObject 以外は除外
    if ( Selection(i).IsClassOf( siX3DObjectID ) )
    {
        //    アニメーションされているパラメータだけを取得 = NodeAnimatedParameters
        var oParams = Selection(i).NodeAnimatedParameters();
        for ( var j=0; j<oParams.count; j++ )
        {
            var oSource = oParams(j).Source;    //    そのパラメータのソースを取得
            if ( oSource.IsClassOf( siFCurveID ) )    //    ソースが FCurve だったら以下実行
            {
                //    以下、コンスタントインターポレーション と キュービックインターポレーション をトグルしてるだけ
                if ( oSource.Interpolation == siConstantInterpolation )
                {
                    oSource.Interpolation = siCubicInterpolation;
                }
                else
                {
                    oSource.Interpolation = siConstantInterpolation;
                }
            }
        }
    }
}



変更箇所:
リニアインターポレーションではなく、コンスタントインターポレーションに変更。
3Dオブジェクト以外が選ばれていたら除外するように修正。




ある3Dオブジェクトから、アニメーションされているパラメータだけを取得するには、NodeAnimatedParameters メソッドが使えます。 戻り値は ParameterCollection です。


ただし NodeAnimatedParameters メソッドは X3DObject にしか効きません。


じゃあカスタムプロパティがあった場合はどうするの? カスタムプロパティは X3DObject じゃないから、NodeAnimatedParameters が効かないじゃん? カスタムプロパティ内のパラメータがアニメーションされていたら、処理対象に出来ないってこと?


という疑問が出てきます。ごもっともです。

が、カスタムプロパティの親である3Dオブジェクトに対して NodeAnimatedParameters を使えば、ちゃんとカスタムプロパティ内のアニメーションにも反応してくれますので、ご安心下さい。

上のスクリプトの場合、X3DObject 以外が選ばれていたら除外することになっていますが、例えば X3DObject だったらそのまんま処理対象にする、 カスタムプロパティだったらその親オブジェクトを処理対象にする、 という風に書くのもアリでしょう。



NodeAnimatedParameters によって ParameterCollection を取得できたら、その中身を1つ1つループで取り出してやれば、それは Parameter オブジェクトです。 これで Parameter オブジェクトに使えるメソッド・プロパティが全部効くようになりました。 もうあなたは自由です。どこへでも行けます。さあニライカナイに向かってサバニを漕ぎ出してください。



.

|

« ガッデムPlot更新。 | トップページ | 宇宙戦艦。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 突然 Fcurve 補完のトグル。:

« ガッデムPlot更新。 | トップページ | 宇宙戦艦。 »