カテゴリー「XSI Plug-ins/Scripts (original)」の143件の記事

2017年11月23日 (木)

俺のFカーブ。 要ります?。

.





今さら XSI のツールねえ。




いや、マーティンのように今でも XSI をバリバリ使っていて、バリバリといいツールを書いてくれる人はスヴァらしいけど、俺のは、なんつうか、ほんと俺得ですね。 俺の仕事に必要だった機能を書き足していくうちにこうなったというだけの。ちっとも万人向けではないかもしれない。  今さらこんなの欲しい人、いらっしゃいますでしょうか。


「俺のFカーブ」 って呼んでるんですが、 XSI のFカーブエディタ上でアニメーションカーブやらキーフレームやらをごにょごにょ操作するツール群 です。

Oreno


もう何年も機能追加を続けているツールだけど、ここ最近 XSI の仕事が続いたので、特に色々増えた気がする。



選択したキーを1フレずつ前に後ろにショートカットキー使ってガガガガガっと動かすとかね、となりのキーフレームの値にじわっと近づけるとかね、あと、キーの繰り返しコピペとかね。 いろいろです。  ちゃんとバグ取りとか、ちっともしていないので、マトモに動かない機能すら含まれている可能性はあります。 個人的には、業務になくてはならないツールですが。


Maya 用にも似たようなものをだいぶ書いたり、どっかからパクってきたり、色々してます。 アニメーション作業はこの手の機能が必要で、かつショートカット(ホットキー)が絶対必要だと思っているんですが、どうですかね。 標準じゃあんまり無いんだよねこういうの。




どっかにアップロードしようと思ってるんだけど、どうしようかしら。このブログに貼り付けてしまえばいいのかな。 旧 JJJ ツールの置き場所は、閉鎖されてしまって以来そのままです。 バックアップは手元にあるので、またどこかに置きたいんですけどね。 めんどくさがって、なかなか着手してませんw




こういうツールが増えると、ショートカットキーがほんとにもう足りなくなっているので、ボタンがいっぱいついた特殊な入力デバイスを買って、自作ツールの機能を割り当てて使ってみようかとか画策しているんだけど、どうかなあ。便利になるかなあ。 スペースパイロットみたいなやつとか?  ゲーム用のプログラマブルキーパッドみたいなやつとか?  誰か使っていたら、使い心地とか実用性とか、教えて下さい。






.

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

2017年6月22日 (木)

涙のMayaさまペアレント。

XSI のスクリプトですよー





今更誰得。




俺得に決まってるじゃないですか。









脊髄反射的に今書いたばかりの XSI のスクリプト
Maya さまのスタイルで親子付けをします。


JScript
--------------------------------------------------------
// 涙のMayaさまペアレント。
var oSels = FilterX3D( Selection );
var oNewParent = oSels( oSels.count - 1 );
for ( var i=0; i<oSels.count-1; i++ ) ParentObj( oNewParent, oSels(i) );
function FilterX3D(in_Objs)
{
 var oCol = XSIFactory.CreateObject('XSI.Collection');
 for (var i=0; i<in_Objs.count; i++)
 {
 if (in_Objs(i).IsClassOf(siX3DObjectID)) oCol.Add(in_Objs(i));
 }
 return oCol;
}
--------------------------------------------------------

オブジェクトを複数選んで実行。
最後に選んでいたオブジェクトが、親になります。
Maya さまの流儀ですね。



別に Maya さまの流儀が優れているとかそういうわけではなく、単に、この流儀で親子付けしたい場面が何度か出てきたので、書いてしまったというだけのアレであります。 XSI 流儀、つまりピックを伴う親子付けがいつでも最良というわけではありません。 ピック無しに通常の選択動作だけで親子付けができるというのが便利な場面も、たくさんあるということです。

コンストレインもそうですね。ピックがいつでも最良というわけではない。 Maya さま流儀で、選択の順番で出来るというのも、悪くないですよ。 大昔に書いた コンちゃん というコンストレイン関係のツールには、そういうモードもありました。 実は未だに愛用しているコンちゃん。


でもピックが良いことももちろんたくさんある。 しかし Maya さまにはそもそもピックという操作法が無い。 信で下さい Maya さま。




ああ、ちなみに XSI の Explorer での親子付けは、左クリックドラッグができてスヴァらしいですね。 左クリックが一番ラクですからね。  Maya のアウトライナは、親子付け操作は 中クリックドラッグ なんですよね。 中クリック嫌いです。ペンタブ使うので、ボタン押しづらいのですよ。 芯で下さい Maya さま。




アウトライナと言えば、あのうんこたれアウトライナが、いつか XSI の Explorer 並みになってくれるんでしょうかね。 最近はマテリアルの表示ができるようになったのかな。  でもね、まだ Explorer の足元にもおよびませんね。 何が表示できるかだけでなく、例えば XSI でいうグループへの追加とか削除とか、そういう操作体型も整備せねばなりません。 色んなモードがあって、シーン内のあらゆる要素に、あらゆる角度から、あらゆるスコープでアクセスできねばなりません。 XSI のように。  まだ道は長そうですね。  でもグラフエディタ(笑 が最近ずいぶん良くなったから、可能性はあるかも知れませんね。 がんばって下さい Maya さま。








.

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

2017年5月 4日 (木)

フローティングカメラビュー的なアレ。

作業していたら、強烈に欲しくなって、書いてしまった。





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


// フローティングカメラビュー的なアレ。
// カメラを選んで実行して下さい。
var olayout = Application.Desktop.ActiveLayout;
var oView = olayout.CreateView( "Object View", selection(0).FullName );
oView.SetAttributeValue( "camera", selection(0).FullName ) ;
oView.SetAttributeValue( "displayall", "true" ) ;
oView.SetAttributeValue( "autoalign", "false" ) ;
oView.SetAttributeValue( "autoframe", "false" ) ;
oView.SetAttributeValue( "compensate", "false" ) ;
oView.SetAttributeValue( "holdselection", "false" ) ;
oView.SetAttributeValue( "localview", "false" ) ;
oView.SetAttributeValue( "lockstatus", "true" ) ;
oView.SetAttributeValue( "modifycameras", "true" ) ;
oView.SetAttributeValue( "rotatecomp", "false" ) ;
oView.SetAttributeValue( "scalecomp", "false" ) ;
oView.SetAttributeValue( "translatecomp", "false" ) ;

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

Jjjfloatingcamviewtekinaare


つまりアレです。
カメラビューをもう1個、フローティングで出したい的なアレです。

やってることは、Object View をひとつ降臨させて、各種設定をいじくっているだけです。 今まではオブジェクトビューを出すところから全部手でやっていたけど、面倒だからスクリプトに書いたというだけ。

カメラビューのただのコピーみたいなもんなので、普通に ABCD のビューと同じように使えると思います。フローティングなのでモニタのどこに置いてもいいし、大きさも自由というところがポイントですね。





最近、昔ながらの4分割の画面じゃ何も操作できなくなりました。小さすぎるんだもん。 なので1つのビューで全画面、もしくは2分割程度で作業することが多いんだけど、最終アウトプットのカメラがね、見づらいことが多くてね。 特にすごく横長とか、ヘンなアスペクトを持った画像を出そうとしていると、カメラビューの配置や大きさにもっと自由度が欲しくなるわけですよね。 だからこうしてフローティングのウインドウにしようとするわけです。


昔、Softimage 社にいたチニーさんが、こんなプラグインを出してたよな。 Viewport Controls とかいう名前だっけ。違ったっけ。 すごく便利だけどメニュー項目が多すぎて肥大してしまって、もうこりゃかなわんとアンインストールしたような記憶がある・・・・10年以上前の話かな。


あー ちなみに Maya さまでは、このスクリプトのような機能は最初からありますね。パネルに Tear Off Copy ってのがあるから、カメラビューでもなんでも切り離してフローティングにできますね。







ところで最近はもう、XSI のスクリプトの書き方を強烈に忘れてしまっていて、なかなか苦労します。 こんなの俺、2分で書いてたのになあとか思うと、涙が出そうになります。 

Maya さまで Python や MEL を書くスピードは上がってきましたが、でもまあ、まだモタモタですね。 なにか不都合を感じるとソッコーでスクリプト書いてアプリケーションを俺様用に調教するというのを、Maya さまでもやりたいんですよ。 XSI でずっとそうしてきたように。   カスタマイズの余地は Maya さまの方がはるかに大きいように見えるので、未開拓エリアは広大です。 すんげえ魔改造もできるみたいだし。

でもなあ、例えばマウスドラッグの操作性とかね、モノのセレクトとかね、そういう部分で Maya さまは Maya さまなので、どんなにカスタマイズしてもそこは変わらないんですよねえ。 ううむ、氏んで下さい Maya さま。






そしてこんなスクリプト書いてるってことは、
まだまだ現役ってことなんだぜ XSI。

現在放送中のアレは XSI で作られているんですよ奥さん。

ヘイルヘイルXSI。

ゴートゥーヘルMayaさま。








.

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

2014年12月27日 (土)

フレームレンジ様。

久々にツールを公開してみたり。
今さら、ねえ。

しかもほんのちょいツールなので、大したアレではないのですが。


フレームレンジ様

Framerangesama_menu

http://homepage3.nifty.com/jjj/XSIFiles/Plugin/JJJ_XSI_Plugins.html




説明はビデオでどうぞ。



まああの、フレーム範囲をいじくるというか、セットするのに少しラクをしたかっただけです。 ほんの少しラクになります。



さて、もうすぐ XSI 男忘年会です。 20人ちょい集まるのかな。 もう何回目になるんだろう。たぶん7回とか。 皆様、当日会いましょう。 

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

2014年9月 9日 (火)

おっぴろげスケマチック。

スケマティックビューで、ノードを畳んだ状態にするってよくやりますけど、それを展開するときに面倒なこと多いですね。 特に人からもらったデータだとね。 


Nキーというショートカットがありますが、キーを押す前にまずはそのノードが選択されていることが前提ですからね。 あちこちに散っている畳まれたノード達。 畳んだ下の階層でさらに畳まれたりしてますからね。 どこがどう畳まれてるかも知らないのにどうやって選択すんのよ、 っていうか知ってても選択したくねえよ って話ですよ。 




例えば、パッと見こんなスケマティックが・・・・・、

Sss2


全部展開してみると・・・・・・

Sss3

実はこんなだったりとかね。 クリックするとでかい画像が出ます。


こんなツリーで、あちこちが畳まれていたら、そりゃブチ切れますよね。 全部おっぴろげろやゴルァ とモニタを窓から射出してしまいます。






・・・・という状況だったらしい。 俺もよくある。 実によくある。





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

//	おっぴろげスケマチック ver 2

var oGodDamnViews = Desktop.ActiveLayout.Views;

//	ドックビューを捜索 -> 浮遊ビューを捜索 -> それでもなきゃ作る
var oFuckinSchematicView = oGodDamnViews.Filter( "View Manager" )(0).Views.Filter( "Schematic" )(0);
if ( !oFuckinSchematicView ) {
	oFuckinSchematicView = oGodDamnViews.Filter( "Schematic" )(0);
	if ( !oFuckinSchematicView ) var oFuckinSchematicView = Desktop.ActiveLayout.CreateView( "Schematic", "おっぴろげスケマチック。" );
}

var oMotherFuckinNodes = oFuckinSchematicView.SelectedNodes;//	選択中のノード
if ( oMotherFuckinNodes.count == 0 ) oMotherFuckinNodes = oFuckinSchematicView.Nodes;//なんもなければ全ノード

for ( var i=0; i<oMotherFuckinNodes.count; i++ ) ExpandMotherFuckinSonOfABitchNode( oMotherFuckinNodes(i) );

function ExpandMotherFuckinSonOfABitchNode(oAssHoleNode){	//	再帰的というらしい
	oAssHoleNode.Expanded = true;//	おっぴろげ
	for ( var i=0; i<oAssHoleNode.Nodes.count; i++ ) ExpandMotherFuckinSonOfABitchNode( oAssHoleNode.Nodes(i) );
}

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

ダウンロードする


コピペでもダウンロードでもなく、手打ちが推奨なのですが(謎



何も選んでない状態で実行すると、シーンの中の全スケマティックノードが展開されます。 つまり、たたまれた状態のノードはなくなります。 何かを選んでいると、その選んでいるオブジェクトの階層以下全てが展開されます。 そんだけです。 以上。







スケマティックビュー関連は昔、全然スクリプタブルじゃなかったんですよね。 でもおそらく要望が多かったのでしょう、2012 になってようやく Schematic オブジェクトSchematicNode オブジェクトができたんですよね。 俺も 2006 年とかその頃からずーーーっと要望を出していたので、すげえ嬉しかったです。

でも、まだ全然できることが少ない。 必要なプロパティやメソッドがまだ全然整備されてないという印象です。 

でもまあ、最初はこんなものだろう、これからだんだん増やしていくんだなーとか思っていたら、廃村です。 Python じゃありません。 廃村です。  



これはもう、滅び行く村の方言であります。 幻の言語になります。 文化保存の目的で、ここに残します。 いつか XSI 博物館が建ったら収蔵して下さい。




.

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

2014年9月 3日 (水)

選択順で親子づらづら。

どうしたことかなかなか XSI 仕事が途切れなくて、日々 XSI 触ってます。 つまり日々スクリプト書いてます。


最近は、ヌルがたくさんあって直列に親子付けしたいとか、そういう場面が多いです。 


これ、XSI の標準の親子付けで連続的にやろうと思ったら、中クリックで子供から親をピックしていくしかないですよね? 

俺の場合、中クリックがけっこうツラいんですよ。 マウスだと指の筋肉のスジが痛くなってくる。 ペンタブのペンだと指を多く曲げるのがつらい。 

ちなみにペンのスイッチは人差し指で押す派で、かつ下側が右クリック、上側が中クリック派です。 つまり中クリックをしようとすると人差し指をぐりんと曲げた状態にせねばならず、これがつらく感じることもよくあるんですよ。 だから、中クリックや、できれば右クリックもなるべくしないで済むようなスクリプトを書くことがけっこう多いです。


今回もそういうスクリプトですね。


Jscript
------------------------------------------------

//	選択した順で親子づらづら
//
//	オブジェクトを 親 → 子 の順でいくでも選んで実行 → その順番で親子になる。

OpenUndo( "選択した順で親子づらづら" );
for ( var i=Selection.count-1; i>=0; i-- )
{
	if ( Selection(i).IsClassOf( siX3DObjectID ) )
	{
		var oChild = Selection(i);
		var oParent = Selection(i-1);	
		if ( oParent ) oParent.AddChild( oChild );
	}
}
CloseUndo();
------------------------------------------------

このスクリプトのダウンロード




いや、ほんと、毎回どうでもいい小スクリプトですよね・・・。 まあ、俺は便利に使ってますけどね。

親にしたいオブジェクトが最初、次に子供、次にその子供・・・・という順番で選択して行き、このスクリプトを実行すると、その順番で直列に親子関係ができます。  そんだけ。  中クリックとか要らないので、俺は楽なんです。


Zoolazoola



もうちょっと規模の大きな(って言っても大したことないですが)ツールもたくさん書いてるんですが、なかなかブログにアップできないな。 2~3日まとまった時間を作らないとなあ。




しぶとく続く XSI の日々。



.



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

2014年8月 6日 (水)

これ。 このModel。

this this_model ですよ。
エクスプレッションの話です。


PPG 上でドラッグ&ドロップしてエクスプレッションを作成すると、this や this_model で記述できる部分でもそのオブジェクトのフルネームが入ってしまいますね。 

それを this や this_model にイッキに置換してくれるツールが欲しかったのですが、たぶん無いだろうから急に書きました。


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

//	これ。このModel。 this. this Model.
//	エクスプレッションのあるオブジェクトを選んで実行。 
//	this や this_model に置換できる部分を置換

OpenUndo( "これ。このModel。" );
var oObjects = Selection;
for ( var i=0; i<oObjects.count; i++ )
{
	var oObj = oObjects(i);
	var oAnimParams = oObj.NodeAnimatedParameters(siExpressionSource);//Expression駆動のパラメータ取得
	for ( var j=0; j<oAnimParams.count; j++)
	{
		var oParam = oAnimParams(j);
		Hage( oParam );
	}
}
CloseUndo();

function Hage( oParam )
{
	var oObject = oParam.Parent3DObject;	//そのパラメータの所有者であるオブジェクト取得
	
	var oExpr = oParam.Source;	//Expression駆動で既にフィルタ済みなのでSourceで必ず Expression オブジェクトが取得される
	var oDefinitionParam = oExpr.Parameters( "Definition" );//なんか知らんがこれと次の1行でExpressionの中身を取得
	ExprDif = oDefinitionParam.Value;

	//	this
	var RE1 = new RegExp( oObject.FullName, "gi" );
	NewExprDif1 = ExprDif.replace( RE1, "this" );

	//	this_model
	var oModel = oObject.Model;
	var RE2 = new RegExp( oModel.Name, "gi" );
	NewExprDif2 = NewExprDif1.replace( RE2, "this_model" );

	if ( ExprDif.toLowerCase() != NewExprDif2.toLowerCase() )
	{
		oDefinitionParam.Value = NewExprDif2;
		Result = oDefinitionParam.Value;
		if ( ExprDif.toLowerCase() == Result.toLowerCase() ) Logmessage( "なぜか変わってねえっス : " + oParam.Fullname, siWarning );
		else
		{
			Logmessage( "置換しますた。 : " + oParam.Fullname );
			Logmessage( "	" + ExprDif  + " --> " + NewExprDif2 );
		}
	}
}

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

このスクリプトをダウンロード(右クリックで保存とか) Korekonomodel ほんと、それだけのものです。 これ、EKC に組み込めばいいかなあ。 っていうか EKC も長年メンテしてないな。色々不具合あったはず。もっとシンプルなものに書き直したい。昔書いたツールはどれも無駄に複雑で、現在の俺のワークフローに合わなくなってきたりしてますね。 2008年だって。すげえ昔だなあ。 ところでこういう小さいツールは、めんどくさがらずにチマチマ書き溜めていくと、俺様的ワークフローの中にだんだん溶け込んで、効率が上がるんですよねえ。 そのツールを使うために都合が良いようなフローに変わっていくこともよくあって、場合によっては本末転倒のこともあるけどね。  まあアレだ、俺の場合、最初に細かいことを気にせず作り散らして、後で綺麗に整理するというフローが好きなんだなきっと。そのためのツールをよく書いている気がする。 このツールも、ひとまず何も考えずエクスプレッションを書き散らして、あとで this とかに置換できる部分は自動でやってもらおうという発想だな。 毎日暑いですね。 明日は XSI な人と少人数で会って、パワーをもらってきますよ。 甘太郎でビールを吞もう。 .

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

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年2月24日 (月)

パッていしおん。

何年も前から、改造したり書き足したりしながら書いたツールなんですけどね。


パーティションのアレです。 複数の Pass で、次々にパーティションを作成しながらオブジェクトをブチ込んでいくとか、既にあるパーティションにズンドコ入れていくとか、そういうアレです。


それ以外にも、パーティションがらみのちょっとした機能がいろいろ付いてます。 あの Pass にあるあのパーティションをこちらの Pass でも再現したい、でもマテリアルアサインしたりオーバーライド作り直したりするのめんどくせえなあ、先に全部設定してから Pass を複製すれば良かったなあ、などという場面で役に立ってるんですが、どうですかね。

以前に単体でこのブログに載せたことがありましたね。  それを改良したり、色々付け加えたりしたものですね。







パッていしおん

http://homepage3.nifty.com/jjj/XSIFiles/Plugin/JJJ_XSI_Plugins.html


Pa_menu


Pa_ppg







説明は全部ビデオです。 いっぱいツールが入ってるから、いちいちドキュメント書いてられない。 喋る方がずっとラクです。  HD にしないと文字読めないかも。














ではごきげんよう。





.

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

2014年2月18日 (火)

ソートします。

スケマティックビューでマウスドラッグして矩形選択しますよね。


Recsel

こういう風に。 四角を描いて選択します。


すると、選択したオブジェクトは、名前がちゃんと連番になっているにも関わらず、選択順は連番の順になってないんですよね。




なんでですか。アフォですか。昔から思ってました。


どういう時困るかと言うと、親子付けするときとかですね。このように矩形選択で選択したために選択の順番が名前順になってない時、誰かの子供にしたりすると、名前順ではないその順番で親子付けされてしまいます。 そうなると、スケマティックビューでノードを整列し直したとき、そのおかしい順番で並んでしまうんですよね。 なので I キーを押して並びを直してやらないと見づらい。 これがめんどくさい。

あとはリネームとかですよね。マルチモードの PPG を出して名前を入力してイッキに連番名にする時とか、もちろん選択順でリネームされますからね。




まあ最近の若僧はスケマティックを使わずエクスプローラばかり使うらしいから問題ないみたいだけど、あなた、人生の半分損してますよ。スケマティックは人生の半分です。 ええそうです。

っていうか最近の若僧は XSI を使わないよね。 うん、あなたの人生、ほぼ幸せのはずです。 今どき XSI と一緒にいると人生を棒に振ります。俺は知ってて一緒にいます。俺の人生そんなもんです。




ともかくですね、スケマティックで矩形選択したときでも、ちゃんと名前順にソートされた状態の選択にして欲しいんですよ。嘔吐デスク様。アフォですか。

と長年思っていたけどさっき条件反射的にスクリプト書きました。超シンプルスクリプト。 なんとなくちゃんと動いているように見えるが、きっと不都合な場面も多いだろうな。まあいいや。


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

var aItems = new Array();
for ( var i=0; i<Selection.count; i++ )	{
	aItems.push( Selection(i).Fullname );
}
aItems.sort();
SelectObj( aItems );
Logmessage( "ソートして選択し直しますた。 : " + Selection.GetAsText() );

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

こんだけなんですけどね。


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



何か選択して実行すると、その選択中のオブジェクトの名前を、内部的にソートします。そしてソート後の結果を使って改めて選択し直します。結果、名前順の選択が実現しているはずです。 このスクリプトがするのはここまでです。 後は、この状態で親子付けとかすれば、ちゃんと名前順で親子付けされます。 もちろんリネームも選択順でされます。 そんだけです。

ソートは、他に方法を知らないもんだから、JScript の Array に対する sort メソッドをよく挙動も知らないまま白痴的に使ってますが、これだと不十分だったりする場面も出てくるんでしょうね。 でも他に知らないの。 何かいいアイデアあったら教えて下さいね。







2014年にもなってまだ XSI のスクリプト書いてブログに載せたりしてる俺って・・・・ ゑへへ。俺の人生そんなもんです。よろしくお願い致します。


ごきげんよう

.

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

より以前の記事一覧