2013/04/22

ただのメモ

プラグインマネージャから新規コマンド作成時、
Add to MenuをNoneで作成した後、メニューに追加したくなった時。
in_reg.RegisterCommand("●●●","●●●");
の後に
in_reg.RegisterMenu(siMenu●●●●●ID,"●●●_Menu",false,false);
を追加。ウィザードで特に何もしてなければ16行目。
んで最後に
function ●●●_Menu_Init( in_ctxt )
{
 var oMenu;
 oMenu = in_ctxt.Source;
 oMenu.AddCommandItem("●●●","●●●");
 return true;
}
こいつを追加。

コマンド作り直してコピペったほうが早いかもしれないけど、ひとまずメモる。

2013/04/19

にわかスクリプト~しょ、ショートカットってイイよね(;゚∀゚)=3ハァハァ


以前、junkiさんがブログで書いてたコレ。

同じ名前の子をイッキに選択するの。

SelectObj( "*." + Selection(0).name );

コレをショートカットに登録てやつ。

素敵だったのでまるっと真似してたんですが、他にも
ショートカット登録したら便利かな~っていうのを登録して試して見てたわけですはい。

それで使用頻度が高かったものをいくつかね。

・Fカーブまるっとコピー
CopyAllAnimation2( Selection(0), siFCurveSource, siAnimatedParam, false, null,null );
Expressionとかは除外して、Fカーブだけアニメーションコピーしてるはず。


・まるっとペースト
var oSel = GetValue("SelectionList")
PasteAnimation( oSel, null );
Logmessage(oSel);
なんかペーストはデフォルトでありそうだけども(´・ω・`)


・リファレンスモード(?)の軸をアクティブなビューに合わせる
var oCam = GetViewCamera(-1);
SetTransientReferencePlane(oCam);
あれです、移動モードとかでLocalボタンの下のRefボタンのアレです。
カメラ合わせで弄くり回すときに便利でした。個人的には。


あとまぁモーキャプデータとか扱って尚且つアニメーションレイヤー使う人向けですが こんなのも
・アニメーションレイヤーマージ+α
var oStartF = GetValue("Project.Data.PlayControl.In")
var oLastF = GetValue("Project.Data.PlayControl.Out")

SetValue("PlayControl.In", oStartF -50, null);
SetValue("PlayControl.Out", oLastF +50, null);

CollapseLayers(Selection(0), null);

SetValue("PlayControl.GlobalIn", oStartF, null);
SetValue("PlayControl.GlobalOut", oLastF, null);

SetValue("PlayControl.In", oStartF, null);
SetValue("PlayControl.Out", oLastF, null);
すっごい無理やりだけども。
アニメーションレイヤってタイムライン分しかマージしてくれなくてイラッとするんです。
だから一回前後50フレーム伸ばして、マージして、戻す。などという頭悪い感じの事してます。
なにかいい方法あるかな。
Fカーブの最初と最後のキーがあるフレーム取得できればいけそうなそうでもないような。

ちなみに前後50フレームなのは特に意味無いです。
アニメーションレイヤの切り替えもショートカットにしてもいいかも。
アニメーションレイヤ開くの面倒くさいものね。

アニメーションに関してメインになってますが取り敢えずこんなところ。
他にも色々便利になるようなの探して行きましょ。

ただ、デフォルトのショートカットにはなるべく被らないようにしないとね。
デフォルトと違うとたまに不便なこともあるんでね(´・ω・`)

-------------追記ワッショイ------------

選択しているオブジェクトのvisibilityをサクッと表示してくれる
.visibilityを.kineにしてKinematicsバージョンも作ってこの2つ登録
シーンがゴチャついてる時にエクスプローラ潜るの嫌だったのでね。

var oCollParam = XSIFactory.CreateObject( "XSI.Collection" );
oObj = GetValue( "SelectionList" )
for(i=0; i<Selection.count; i++){
 oText = Selection(i) + ".visibility";
 oCollParam.AddItems(oText);
 }
Selectobj(oCollParam);
Inspectobj(oCollParam);

にわかスクリプト~動いてる奴だけ選択

はいさい。引き続き選択系。
選んでるオブジェクトの階層下で、アニメーションついてるヤツだけ選択的なアレ。

すっごい無理矢理な感じが否めないけど一応動いてるから許してください。
このやり方だと一回パラメータ全部かき集めちゃうから、if文使ってアニメーションしてるパラメータがあったら
そのオブジェクトを取得的な感じにした方がいい気がするが。。
もう心が折れてるので修正はあとにしような(´・ω・`)
var oRoot = ActiveSceneroot;
var oCollParam = XSIFactory.CreateObject( "XSI.Collection" );
var oCollObj = XSIFactory.CreateObject( "XSI.Collection" );

for( var i=0; i<Selection.count; i++ )
{
 var oSel = oRoot.FindChildren(Selection(i));
  for( var j=0; j<oSel.count; j++ )
 {
  var oChild = oSel(j).FindChildren();
  var oAnimPram = oSel(j).AnimatedParameters2(siFCurveSource);
  oCollParam.AddItems(oAnimPram);
 }
}

oSelectPram = SelectObj(oCollParam, null, null);

for ( var k=0; k<Selection.count; k++ )
{
 oSel = Selection(k).Parent3DObject
 oCollObj.AddItems(oSel);
}

Selectobj(oCollObj);

Twitterで@FumotoKZさんに助けていただいて何とかでけた。
本当に感謝です。自分だけじゃ何もできません(´;ω;`)ウッ…