« 2014年6月 | トップページ | 2014年8月 »

2014年7月

2014年7月 7日 (月)

名前LR。

またもや脊髄反射スクリプトをロクにテストもせず上げてみるという・・・



オブジェクトのリネームをするスクリプトです。選択しているものを元に、L と R を置き換えてリネームするんですが、ええと、なんて言えばいいんだ、L R の片方だけ名前付けがもう済んでいて、反対側の名前を付けて行きたいという時に使うものです。

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

//	オブジェクト名を LR 置換で書き換えるスクリプト
//	リネームしたいブツ1 → そのリネームの元になるブツ1, リネームしたいブツ2 → そのリネームの元になるブツ2.....
//	の順で偶数個選択して実行。 奇数個選択してると最後のはシカトされます


//	↓ 検索置換ルール 手で書き換え
Search1 = "_L";	//	_L が出てきたら _R に置換、とか。
Replace1 = "_R";

Search2 = "_R";
Replace2 = "_L";


OpenUndo( "Rename LR" );
var RE1 = new RegExp( Search1, "gi" );
var RE2 = new RegExp( Search2, "gi" );

if ( Selection.count <2 ) Logmessage( "帰って下さい。", siError );
else{
	N = Selection.count % 2 == 0 ? 0 : 1; // 奇数選択されてたら最後の1個除外
	for ( var i=0; i<Selection.count-N; i+=2 ){
		var oSlave = Selection(i);
		var oMaster = Selection(i+1);
		OldName = oSlave.Name;
		NewName = oMaster.Name.replace( RE1, Replace1 );	//	置換1回目
		oSlave.Name = NewName;
		if ( oSlave.Name != NewName ){	//	1回目の置換で目指す名前になってなければ
			NewName = oMaster.Name.replace( RE2, Replace2 ); //	置換2回目
			oSlave.Name = NewName;
			if ( oSlave.Name != NewName ) oSlave.Name = OldName; //	それでもダメなら元に戻す
		}
	}
}

CloseUndo();
---------------------------------------------------------------


↓ こういうことなのですが、

Lr1

リネームしたいオブジェクトは 1 と 3 です。 すでに名前付けが完了しているオブジェクトは、 2 と 4 です。

1234の順に選択して実行します。

1.名前を変えたいブツ 2.その名前の元になるブツ、の順番で選択するということです。

すると、

Lr2

このようになります。


1 は 2 から取ってきた名前の文字列のうち、スクリプト内で指定された _L _R に置き換えてリネームしています。 3 と 4 も同様です。


一応2段階リネームするようにしていて、 L だったら R に置換、R だったら L に置換、というのを1回の処理できるようにしているつもりです。


どの文字をどの文字に置換するのかは、スクリプトの冒頭を手で書き換えます。 


この置換ルールに正規表現が使えるようにしたつもりなんだが、これでいいのかな・・・。 例えばオブジェクト名の先頭の文字の L_ だけを置換したい場合なら ^L_ などと書けば、途中で出てくる _L は無視されて先頭の _L だけが置換されます。 _L$ と書けば、末尾に出てきた _L だけが対象になります。  合ってるかな。いまだにこの呪文よくわかんねえよ。







いまだに XSI でスクリプトを書いている俺は終わってますか。
そんなことねえですよ。
まだなんとか仕事できてますよ。
嘔吐デスク様。
Epic とかどっかゲーム会社にでも村を譲渡して下さい。
こんな狭い領土、なくなっても別にいいでしょう?
嘔吐デスク様。





.

| | コメント (3) | トラックバック (0)

« 2014年6月 | トップページ | 2014年8月 »