昼間っから唐突に降ってくるスクリプト。
実は昨日の深夜に1時間くらいで書いて、さっき30分くらい手直し。 きっと俺の作業にも役立つ。
すいません、まだ解説無し。
いずれ。
動きますかね初夏さん。
JScript
-------------------------------------------------------
var oPC = Dictionary.GetObject( "PlayControl" );
DefMode = GetGlobal( "KeyFrameFucker_Mode" );
DefStart = GetGlobal( "KeyFrameFucker_StartFrame" );
DefEnd = GetGlobal( "KeyFrameFucker_EndFrame" );
DefLock = GetGlobal( "KeyFrameFucker_Lock" );
if ( DefMode == null )
{
DefMode = 0;
DefStart = oPC.In.value;
DefEnd = oPC.Out.value;
DefLock = false;
}
var oP = XSIFactory.CreateObject( "CustomProperty" );
oP.name = "キーフレーム殲滅でポン。";
oP.AddParameter2( "iMode", siInt4, DefMode );
oP.AddParameter2( "iStartFrame", siInt4, DefStart );
oP.AddParameter2( "iEndFrame", siInt4, DefEnd );
oP.AddParameter2( "bOverrideLock", siBool, DefLock );
var oL, oItem;
oL = oP.PPGLayout;
oL.AddRow();
oL.AddGroup( "", false, 23 );
oItem = oL.AddButton( "DeleteKey", "∀゜)⊃" );
oItem.SetAttribute( siUICX, 0 );
oItem.SetAttribute( siUICY, 110 );
oL.EndGroup();
oL.AddGroup( "", true, 54);
oItem = oL.AddEnumControl( "iMode", Array( "Keep this Range", 0, "Fuck this Range", 1 ), "Mode", siControlCombo);
oItem.SetAttribute( siUINoLabel, true );
oItem = oL.AddItem( "iStartFrame", "Start" );
oItem = oL.AddItem( "iEndFrame", "End" );
oItem = oL.AddItem( "bOverrideLock", "Fuck Key Lock" );
oL.EndGroup();
oL.AddGroup( "", false, 23 );
oItem = oL.AddButton( "DeleteKey", "⊂(゜∀゜" );
oItem.SetAttribute( siUICX, 0 );
oItem.SetAttribute( siUICY, 110 );
oL.EndGroup();
oL.EndRow();
oL.Language = "JScript";
oL.Logic = DeleteKey_OnClicked.toString();
function DeleteKey_OnClicked()
{
var oCol = XSIFactory.CreateObject( 'XSI.Collection' );
oCol.items = Selection;
var oExpanded = oCol.expand( );
var oAllFuckinAnimatedParametersGodDamnItYouMotherFuckerEatThisShitSonOfABitch = XSIFactory.CreateObject( 'XSI.Collection' );
for ( var i=0; i<oExpanded.count; i++ )
{
oAllFuckinAnimatedParametersGodDamnItYouMotherFuckerEatThisShitSonOfABitch.AddItems( oExpanded(i).NodeAnimatedParameters( siFCurveSource ) );
}
Mode = PPG.iMode.value;
FrameStart = PPG.iStartFrame.value;
FrameEnd = PPG.iEndFrame.value;
LockOverride = PPG.bOverrideLock.value;
for ( var i=0; i<oAllFuckinAnimatedParametersGodDamnItYouMotherFuckerEatThisShitSonOfABitch.count; i++ )
{
var oFcurve = oAllFuckinAnimatedParametersGodDamnItYouMotherFuckerEatThisShitSonOfABitch(i).Source;
if ( Mode == 0 )
{
oFcurve.BeginEdit();
oFcurve.RemoveKeys( FrameStart - 9999999, FrameStart - 0.01, LockOverride );
oFcurve.RemoveKeys( FrameEnd + 0.01, FrameEnd + 9999999, LockOverride );
oFcurve.EndEdit();
}
else
{
oFcurve.BeginEdit();
oFcurve.RemoveKeys( FrameStart - 0.01, FrameEnd + 0.01, LockOverride );
oFcurve.EndEdit();
}
}
SetGlobal( "KeyFrameFucker_Mode", Mode );
SetGlobal( "KeyFrameFucker_StartFrame", FrameStart );
SetGlobal( "KeyFrameFucker_EndFrame", FrameEnd );
SetGlobal( "KeyFrameFucker_Lock", LockOverride );
Logmessage( "|∀゜)⊃ 終わりますた ⊂(゜∀゜|" );
// 以下の1行追記。表示を強制アップデート。 2011までは多分必要。Thanks to 網ー誤マーティン
SelectObj( oCol );
}
InspectObj( oP, null, null, siLock );
-------------------------------------------------------
Keep モードで、そのフレーム範囲内にあるキーフレームを保持しそれ以外を殲滅。 つまり指定したフレーム範囲より前にあるキーフレームと後にあるキーフレームが殲滅されます。 頭とケツ削除。
Fuck モードで、そのフレーム範囲内にあるキーフレームを殲滅。
Fuck Key Lock は、ロックされてるキーフレームでも強引に犯っちまうかどうか。
ボタンは左右同じです。どっち押してもいいです。
複数オブジェクト可。 オブジェクトをブランチ選択してればその子供も含まれる。 Group を選択していればその Group 内の全てのオブジェクトが対称。 つまり Expand の魔法。
解説はまた後ほど。たぶん。
ごきげんよう。
------------------------------------------
追記:
コメント欄にありますが、ヤラたんからのタレコミで、2011 まではどうやら表示のアップデートに問題があったようでした。 キーフレーム削除後、表示が更新されないという。 実際はちゃんと削除されているんだけど、画面上即座にそれが確認できないという状態ですね。
俺はもともと 2012 でこのスクリプトを書いたのですが、2012 ではその問題が出なかったんですよ。 でも 2011 SAP SP1 で試してみたら、まさに同じ問題に出くわしました。
他のお方はどうですか? 同じ問題が出るお方はいますか? バージョンは?
とりあえず、ヤラたんの実験結果に従い、上のコードの赤字の部分、1行追加しました。 おそらくこれで、キーフレーム削除後に表示が強制アップデートされると思います。 2012 よりも以前のバージョンでは必要と思われます。 2012 以降のバージョンでも、まあ害にはならないので、この1行があって良いでしょう。
マーティンヤラたんありがとう (゜∀゜
------------------------------------------
.
最近のコメント