連番打ち直し2013。
ついカッとなって書いたのですが、どうだろう。汎用的に使えないかな。
JScript
---------------------------------------------------------------
// 連番打ち直し2013 // // 複数のオブジェクトを選んで実行 → 番号を振り直してリネーム。 if ( Selection.count == 0 ) Logmessage( "帰って下さい。", siError ); else Main(); function Main() { OpenUndo( "連番打ち直し2013。" ); OriginalName = Selection(0).name; // 名前の文字列の最後の文字から逆方向検索 数値じゃない文字が出てきたらそこまでを名前のボディとする for ( var i=0; i<OriginalName.length; i++ ) { Str = OriginalName.charAt( OriginalName.length - 1 - i ); if ( isNaN( parseInt(Str) ) ) //数値か否かって、こんなんでいいのん? { NumPointer = i; break; } } DefNameBody = OriginalName.substring( 0, OriginalName.length - NumPointer );//名前ボディ var oProp = XSIFactory.CreateObject( "CustomProperty" ); oProp.name = "連番打ち直し2013。"; var oL = oProp.PPGLayout; oProp.AddParameter2( "sNameBody", siString, DefNameBody ); oProp.AddParameter2( "iStart", siInt4, 1, 0, 999999 ); oProp.AddParameter2( "iStep", siInt4, 1, 1, 999999 ); var oItem; oL.AddSpacer( 0, 100 ); oL.AddRow(); oL.AddGroup( "", false, 30 ); oL.EndGroup(); oL.AddGroup( "", true, 40 ); oItem = oL.AddItem( "sNameBody", "Name Body" ); oL.AddSpacer( 0, 20 ); oItem = oL.AddItem( "iStart", "Start Index" ); oItem.SetAttribute( siUINoSlider, true ); oL.AddSpacer( 0, 20 ); oItem = oL.AddItem( "iStep", "Step" ); oItem.SetAttribute( siUINoSlider, true ); oL.EndGroup(); oL.AddGroup( "", false, 30 ); oL.EndGroup(); oL.EndRow(); Inspect = InspectObj( oProp, null, null, siModal, false ); if ( !Inspect ) { for ( var i=0; i<Selection.count; i++ ) { Selection(i).name = "AnybodyFuckMeRightNowPlease.";//一度無関係の名前にリネーム } Index = oProp.iStart.value; for ( var i=0; i<Selection.count; i++ ) { Selection(i).name = oProp.sNameBody.value + Index; Index += oProp.iStep.value; } } CloseUndo(); }
---------------------------------------------------------------
このスクリプトのダウンロード(右クリックで保存とか)
カッとなって書いたのは、どうやら2009年ごろか? 入っていたフォルダを見ると、真田さんの親方さんが死ぬときに書いたようです。 大量のザコ兵インスタンスのリネームにでも使ったのか。 六文銭のボーンのリネームとかそういうショボいアレじゃないよな・・・?
まあどうでもいいのですが、ちょっと必要になったのでそれをほじくり出してきて、若干書き直したものです。 オブジェクトの名前を連番にしたい時に、既に存在するオブジェクトの名前とカブってしまうために意図通りの番号にできない時に使います。 あと、2つおきとか3つおきの番号にしたい時に使います。
例えば、 hage1, hage2, hage3, hage4 というオブジェクトがある時に、これを hage3, hage4, hage5, hage6 という風に、スタートを3にしたいとしますよね。
リネーム後の名前が現存する名前とカブらない、つまり完全に新規の名前にするのであれば、問題ないですよね。 全部を順に選んで PPG を表示させ、マルチモード(複数編集モード)の PPG になっているので名前の入力フィールドに hage3 とか入力してやれば、以降のオブジェクトは数値が1つずつ加算されて望みの連番になります。
しかしこの例では、リネーム後の名前のうち、 hage3, hage4 という2つは既に存在してしまっています。こういう時、XSI 様は hage5 を起点にして連番にしますよね。そりゃそうですよね。
なのでしかたなく、一度無関係の名前にリネームしてカブる名前を無くした状態で、再度 hage3 などと入力すればいいのですが、これがめんどくさいじゃないですか。 だからこのスクリプト書いたんです。
あとは、ステップ2とかにしたい場合があったので、その時も使いましたね。
すいません、そんだけです。
これは、名前。 にでも組み込んだ方がいいかしらん?
名前。 は毎日使うくせに、中身はずいぶん長いこといじってないからなあ。 いろいろ改造したいポイントもあるんだが。。。。。。
..
| 固定リンク
コメント