« ガッデムMatLib。 | トップページ | 複数グループイッキブッ込み。 »

2013年11月13日 (水)

乗り換えPathCns。

ついカッとなって書いたのですが、どうだろう。汎用的に使えるかな。

Norrykae

JScript
---------------------------------------------------------------------

//	乗り換えPathCns
//	1.Path コンストレインがあるオブジェクトを選択
//	2.乗り換え先の Path Curve オブジェクトを選択
//	3.実行 → 古い Path に別れを告げ、新しい Path に乗っかって終了

if ( Selection.count != 2 || Selection(1).type != "crvlist" ) Logmessage( "Pathコンストがあるオブジェクトと、乗り換え先のカーブの2つが選択されてないくさいので、何卒お死に下さい。", siError );
else
{
	var oObj = Selection(0);
	var oOldPathCns = oObj.Kinematics.Constraints.Filter( siPathCnsType )(0);
	if ( !oOldPathCns ) Logmessage( "Path コンストが見つからないので、何卒お死に下さい。", siError );
	else if ( oOldPathCns.Constraining(0).Fullname == Selection(1).Fullname ) Logmessage( "それは同じ Path Curve ですので何卒お死に下さい。", siError );
	else
	{
		var oOldParams = oOldPathCns.Parameters;
		var oNewPath = Selection(1);

		var oNewPathCns = oObj.Kinematics.AddConstraint( "Path", oNewPath );//元のコンストは残したまま、新たにコンスト
		var oNewParams = oNewPathCns.Parameters;
		for ( var j=0; j<oOldParams.count; j++ )
		{
			var oOldParam = oOldParams(j);	
			var oNewParam = FindParam( oNewParams, oOldParam ); //	一致するパラメータを探す
			if ( oNewParam )
			{
				oNewParam.value = oOldParam.value;		//	値コピー
				if ( oOldParam.IsAnimated( siAnySource ) )	//	アニメーションあればコピー
				{
					CopyAnimation( oOldParam );
					PasteAnimation(  oNewParam );					
				}
			}
		}
		DeleteObj( oOldPathCns );//	元のコンスト殺害
	}	
}

//	名前の一致するパラメータを探す
function FindParam( oNewParams, oParam )
{
	for ( var i=0; i<oNewParams.count; i++ )
	{
		if ( oNewParams(i).ScriptName == oParam.ScriptName ) return oNewParams(i);
	}
}

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

このスクリプトのダウンロード(右クリックで保存とか)




Path コンストレイン先のカーブを別のカーブに変更するスクリプトです。

現在カーブAにコンストしてあるけど、もろもろのパラメータの値やアニメーションは保持したまま、コンスト先をカーブBに変えたい、とかそういう時に使います。 さっきそれを手でやっててミス連発してブチ切れて書きました。 コンストがあるオブジェクトを最初に選び、次に変更先のカーブを選んでから実行します。




・・・・これ、標準機能で無いよね?
無いと言ってくれ



もしアップベクタ先のオブジェクトを指定していた場合ですが、このスクリプトはそこは考慮してません。 なのでアップベクタ先の指定は、新しいカーブに乗り換えた後、手でし直さねばなりません。 もし今後も使えそうだったりしたら、ここら辺を改良しますかね。

あと、複数のオブジェクトには効きません。 また、1つのオブジェクトに Path コンストが複数あっても、最初の1個しか処理対象にしてません。





値やアニメーションをコピーするために、ターゲットのパラメータを探すやり方ですが、全パラメータをループして名前で順番に探しているので非常にダサい気がしますが、ParameterColleciton.Filter で名前を食わせても上手く抽出できなかったんです。なんでだろ。深く検証してない。 なんかいい方法あるでしょうか。








あと、カーブデフォーム乗り換えも欲しいなあ。 そのうち。

この機能、SI|3D の頃は、あったような気がするんだよなあ。 Path > Substitute とか、そんなのなかったっけ?






.

|

« ガッデムMatLib。 | トップページ | 複数グループイッキブッ込み。 »

コメント

コメントを書く



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




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217974/58570791

この記事へのトラックバック一覧です: 乗り換えPathCns。:

« ガッデムMatLib。 | トップページ | 複数グループイッキブッ込み。 »