blog

ラベル スクリプト の投稿を表示しています。 すべての投稿を表示
ラベル スクリプト の投稿を表示しています。 すべての投稿を表示

2014/07/03

久々にスクリプトなど

迷走するので今年はテクニカル周りの勉強は一時停止で行こうと思ってますが、どうしても

ウルァ!!(╯°□°)╯︵ ┻━┻

ってなることがあったので。

選択してるパスの名前をカンマ区切りで取り出したいだけだったのです。
普通にログ拾うと"Passes."が邪魔で。


|ω・`)チラッ
http://d.hatena.ne.jp/mochio326/20120913/1347545064


そしてこいつを。。。

oPassname = GetValue("Selectionlist")
oText = oPassname.GetAsText();
str= oText.replace(/Passes./g,"");
Logmessage(str)


先輩方のブログにはホント助けられます(´;ω;`)

ていうか、普通にパスの名前だけもっと簡単に出来そうな気も・・するんですがコレで何とかなってるのでいいのですもう考えたくないのです。

とりあえずスッキリした。

 何も考えずに作ったのでパス以外選んでても実行されますね。そりゃそうだ。まぁいいさ。

2014/03/26

アクティブビューでスクリーンショット的なアレ

何となく作って、最近よく使うスクリプト。 アクティブビューでスクリーンショット的なアレ。
//必要な情報を取得
var oCam = GetViewCamera(-1);
var oViews = GetValue(oCam)
var oCurrentPass = GetCurrentPass();
var oCurrentPassName = oCurrentPass.name
var oPicturesFolder = Application.ActiveProject2.Path + "\\Pictures\\"

var oCurrentFrame = GetValue("PlayControl.Current");
var oRenderer =  GetValue(oCurrentPass + ".Renderer");
var oFilename = GetValue(oCurrentPass + ".Main.Filename");
var oFormat = GetValue(oCurrentPass + ".Main.Format");
var oRendCam = GetValue(oCurrentPass + ".Camera");

//スクリーンショット用の設定にセット
SetValue(oCurrentPass + ".Renderer", "Hardware Renderer", null);
SetValue(oCurrentPass + ".Main.Filename",oPicturesFolder + oCurrentPassName + "_ScreenShot", null);
SetValue(oCurrentPass + ".Main.Format", "psd", null);
SetValue(oCurrentPass + ".Camera", oViews, null);

//現在のフレームでレンダ
RenderPasses(oCurrentPass, oCurrentFrame, oCurrentFrame, 1, siRenderVerbosityDefault);

//元の設定に戻す
SetValue(oCurrentPass + ".Renderer", oRenderer, null);
SetValue(oCurrentPass + ".Main.Filename", oFilename, null);
SetValue(oCurrentPass + ".Main.Format", oFormat, null);
SetValue(oCurrentPass + ".Camera", oRendCam, null);

なんか頭悪い感じするのは気のせいではありません(´・ω:;.:...

2014/02/17

Pickして名前コピーとか。

リグ組んだりすると適当にポンポン構造組んで最後に名前整理したりするのでもうゴッチャゴチャで(´・ω:;.:...
for(i=0; i<Selection.count; i++)
{
var pick = PickObject ( "Select Object", "Select Object" ,Selection(i));
var oPickObj = pick.Value ( "PickedElement" );
var oRename = oPickObj.name + "_COPY"

SetValue(Selection(i) + ".name", oRename, null);
}

リネームツールの補助的な感じで書いてみたがまぁ使い勝手の悪いこと。
毎度ながらアホっぽい書き方してる気がするな。。

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さんに助けていただいて何とかでけた。
本当に感謝です。自分だけじゃ何もできません(´;ω;`)ウッ…

2013/04/18

にわかスクリプト~メッシュだけ選択したらいいと思う

選択してるもの(そいつ自身含む)の階層下でメッシュだけ選ぶ的な。
var oRoot = ActiveSceneroot;
var oColl = XSIFactory.CreateObject( "XSI.Collection" );

for(i=0; i<Selection.count; i++)
{
var oSel = oRoot.FindChildren2(Selection(i),"");
 for(j=0; j<oSel.count; j++)
 {
  var oChild = oSel(j).FindChildren("","",siMeshFamily);
  oColl.AddItems(oChild);
 }
}

 
SelectObj(oColl, null, null);


siMeshFamilyを他のに変えれば種類ごとに選択できると思ふ。
てかこれ書き方に無駄ないかな・・いつも不安だぜ。。
アニメーション付いてるのだけ選択とかも付けてアップグレードさせなければ。

いやしかしアニメーションついてるオブジェクト選択は標準でありそうで怖い。
そしてリサーチせず作ったから既に似たような素晴らしい物がありそうで怖い。

今年は、もっとちゃんとした「ツール」っぽい物を作るんだ・・(`・ω・´)キリッ

2012/08/09

にわかスクリプト~毎回ゴースティング設定したり消したり付けたり面倒くさかったんです。

見るからに怒られてしまいそうな感じですごめんなさい。
綺麗にいかないのを整理もせずに放置して忘れるの防止の意味も込めて(´・ω・`)

選択してるオブジェクトのアニメーションゴースティングの表示非表示を
切り替えたかったので書いてみたが何かスマートじゃないわね。いつものことながら。
とりあえず軌跡とか見るとき便利かな~と。。

ほんとにコレで大丈夫か。。動いてるからまぁ、いいか・・・いいのか・・?

因みにLayerのゴースティングのチェックとCameraVisibilityのCurvesには何もしてませんですはい。
var oCam = GetViewCamera(-1);
var oCamA = GetViewCamera(0);
var oCamB = GetViewCamera(1);
var oCamC = GetViewCamera(2);
var oCamD = GetViewCamera(3);
var oLastF = GetValue( "PlayControl.Out" );

for (i=0; i<Selection.count; i++)
{
 {
 var Ghosting = GetValue(Selection(i) + ".visibility.ghosting", null);
 var Ghosttype = GetValue(Selection(i) + ".visibility.ghosttype", null);
 }

 if (Ghosting == false )
 {
 SetValue(Selection(i) + ".visibility.ghosting", true, null);
 SetValue(Selection(i) + ".visibility.ghosttype", 1, null);
 
 }
 else
 {
 SetValue(Selection(i) + ".visibility.ghosting", false, null);
 }
}

var Camdisp = GetValue(oCam + ".camdisp.animghostfade",null);

if (Camdisp == true )
 {
 SetValue(oCam + ".camdisp.animghostenable", true, null);
 
 SetValue(oCam + ".camdisp.animghostframesbefore", oLastF, null);
 SetValue(oCam + ".camdisp.animghostframesafter", oLastF, null);
 SetValue(oCam + ".camdisp.animghostframestep", 1, null);
 SetValue(oCam + ".camdisp.animghostfade", false, null);
 SetValue(oCam + ".camdisp.animghostontop", true, null);
 
 SetValue(oCam + ".camdisp.animghosttrailsamples", 10, null);
 SetValue(oCam + ".camdisp.animghostvelocityscale", 1, null);
 
 SetValue(oCam + ".camdisp.keybeforecolorred", 1, null);
 SetValue(oCam + ".camdisp.keybeforecolorgreen", 0, null);
 SetValue(oCam + ".camdisp.keybeforecolorblue", 0, null);
 SetValue(oCam + ".camdisp.keyaftercolorblue", 1, null);
 SetValue(oCam + ".camdisp.keyaftercolorgreen", 0, null);
 SetValue(oCam + ".camdisp.keyaftercolorred", 0, null);
 
 SetValue(oCam + ".camdisp.framebeforecolorred", 1, null);
 SetValue(oCam + ".camdisp.framebeforecolorgreen", 0, null);
 SetValue(oCam + ".camdisp.framebeforecolorblue", 0, null);
 SetValue(oCam + ".camdisp.frameaftercolorblue", 1, null);
 SetValue(oCam + ".camdisp.frameaftercolorgreen", 0, null);
 SetValue(oCam + ".camdisp.frameaftercolorred", 0, null);
 
 SetValue(oCamA + ".camdisp.animghostenable", false, null);
 SetValue(oCamB + ".camdisp.animghostenable", false, null);
 SetValue(oCamC + ".camdisp.animghostenable", false, null);
 SetValue(oCamD + ".camdisp.animghostenable", false, null);
 SetValue(oCam + ".camdisp.animghostenable", true, null);
 }
else
 {
 SetValue(oCamA + ".camdisp.animghostenable", false, null);
 SetValue(oCamB + ".camdisp.animghostenable", false, null);
 SetValue(oCamC + ".camdisp.animghostenable", false, null);
 SetValue(oCamD + ".camdisp.animghostenable", false, null);
 SetValue(oCam + ".camdisp.animghostenable", true, null);
 }


軌跡出したい奴を選んで実行。
スクリプト実行するたびにアクティブなビューでゴースティング表示のON/OFF。

ゴースティングタイプはポイントにして、長さは前後にPlayControl.Outの値入れてます。
後は、色とフェードやらXrayやらチェックしたり外したり自分好みに。


複数選択してるモデルにブラウザで選択したプリセットを一気に
適応できたらいいなって思って。

しかしすっごい無理やり感が否めない・・。

違うビューに行ったら今までのゴースティング可視状態リセットして新たに選択している
ものだけゴースティング表示にしたいんだけども、シーン内のオブジェクト全部調べたら
処理速度が残念なことになったんだよなぁ。ヌルとカーブの数だけでも8000とかあるもの。

もっとこうエレガントにしたいもんです。
そろそろ友愛とやらに挑戦してみようかなドキドキ(;´Д`)ハァハァ

そうそう、今日Twitterでプログレスバーの実験に使ってたのこれです。
例文からコピペして、break ;を消しちゃって処理速度重い!!とかなってました(;・∀・)

どうなるかは分かったけどどこで使うかはイマイチ想像できてませんorz
ワケが分からなくなりつつ今日もまた日が暮れる(´・ω:;.:...


あとコレとは別に全部一気にゴースティング周り全部OFFにしてやんぜってことで、
こんなん
var oProgressBar = XSIUIToolkit.ProgressBar ;
oProgressBar.Maximum = 100 ;
oProgressBar.Step = 1;
oProgressBar.Caption = "ちょっと待ってね(´・ω・`)";
oProgressBar.CancelEnabled = true ;
oProgressBar.Visible = true;

while( oProgressBar.Value < oProgressBar.Maximum )
{
 SetValue("Views.ViewA.*Camera.camdisp.animghostenable", false, null);
 SetValue("Views.ViewB.*Camera.camdisp.animghostenable", false, null);
 SetValue("Views.ViewC.*Camera.camdisp.animghostenable", false, null);
 SetValue("Views.ViewD.*Camera.camdisp.animghostenable", false, null);
 SetValue("*Camera*.*Camera*.camdisp.animghostenable", false, null);
 SetValue("*.visibility.ghosting", false, null);
break ;
oProgressBar.Increment() ;
}


なんとなくプログレスバー入れてみた。
サンプルのコピペまんまだけど。しかも本文全部コマンドだけど。

いやはや難しいなぁ。全然進歩する気がしなひ(´・ω:;.:...

2012/08/01

にわかスクリプト~クリップをActionsフォルダに保存したかったんです。

記事2連投。
取り敢えずメモ代わりに。

作成したAnimSourcesクリップを選択(複数可)して実行。
親モデル名+クリップ名で開いてるプロジェクトのActionsフォルダに保存してくれる。。はず。
var oProject = ActiveProject;
for( i=0; i<Selection.count; i++ )
{
 SelName = "Sources." + Selection(i).Parent.name + "." + Selection(i).name;
 SaveName = Selection(i).Parent.name + "_" + Selection(i).name;
 SavePreset(SelName, oProject + "\\Actions\\" + SaveName + ".Preset", null, null, null, false, null);
}

そんなに検証してないけどAnimSourcesじゃないとダメっぽい?
ん~、やっぱりなんかスッキリしない感じ。もう少し工夫が必要だ(´・ω:;.:...
けど動くからいいか・・ということにしておこう(;´∀`)

前回の記事に追記でも良かったかも。まぁ、いいか。

にわかスクリプト~移り気ストーキングカメラ

人が何かに乗ってビューンっていったり、
ロボ的なのがなんか噴射してビューンっていったり、
まぁよく動く。

アニメーション付けるときフレームごとにソイツの所に飛んでいくの
が煩わしかったのです。キャラごとにカメラ付けたらゴチャついて使いづら。。

てことで選択したヤツをストーキングするカメラを作りたかったんです。

なんか、標準機能で良い方法がありそうなんですけども(´・ω・`)

var oSel = Selection(0);
var oSelName = oSel.fullname;
var oCamModel = Dictionary.GetObject("Follow_Cam",false);

if ( oCamModel == null )
{
 var oModel = ActiveSceneRoot.AddModel(null,"Follow_Cam");
 var oNull = oModel.AddNull("Follow_Cam_Cons");
 var oCam = oNull.AddCamera("camera","Follow_Cam");
 SetValue("Follow_Cam.Follow_Cam.kine.local.posz", 20, null);

 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posx", oSelName + ".kine.global.posx", null);
 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posy", oSelName + ".kine.global.posy", null);
 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posz", oSelName + ".kine.global.posz", null);
}
else
{
 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posx", oSelName + ".kine.global.posx", null);
 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posy", oSelName + ".kine.global.posy", null);
 AddExpr("Follow_Cam.Follow_Cam_Cons.kine.global.posz", oSelName + ".kine.global.posz", null);
}


とまぁこんな感じで。if文的なモノの練習がてら。

内容は
-----------------------
ストーキングしたいオブジェクトを選択して実行。

もし"Follow_Cam"っていうモデルが無かったら"Follow_Cam"っていうModel作る
"Follow_Cam"の子に"Follow_Cam_Cons"ってヌル作る
"Follow_Cam_Cons"の子に"Follow_Cam"って名前のカメラを作る
"Follow_Cam_Cons"のGlobalポジション選択したオブジェクトのGlobalポジション
にExpressionで固定する。

"Follow_Cam"っていうモデルが存在していたら、カメラ構造の作成はせずに
だけ実行。
-----------------------
こんな感じ・・になってるハズ。多分きっとMaybe。

さて次は何を試してみようか(´・ω:;.:...

2012/02/17

にわかスクリプト~グループ内のクラスタの名前変えたかっただけなんです。ごめんなさい。

同僚M「グループ内のポリゴンクラスタの名前を所属グループ名にしなければお前の猥褻図書館及び猥褻HDDを消去スルウケケケケケ」

って脅されまして。従わざるをえないじゃないですか。

んでまぁこんなん書いたわけですよ。

for (i=0; i<Selection.count; i++)

var oSel = Selection(i);

var oGrpName = oSel.name

var oGrpMembers = oSel.Members.Filter( "poly" );

oGrpMembers.name = oGrpName;


コード乗っけといて何ですがこれ動きません。
最後のoGrpMembers.name = oGrpName;がダメみたい。
エラー出る。

同僚M「汚物は消毒・・汚物は消毒・・・ブツブツ」

こ、このままだと私の猥褻物たちが( ;´Д`)イヤアァァァァァー!


はい、例によって世紀末救世主の登場です。


クラスタ名はグループ名からポン。
http://junkithejunkie.cocolog-nifty.com/blog/2012/02/post-1fb7.html



全国の私と同レベルなカス野郎ども。今日のポイントはこれだぁぁぁああ!
for ( var j=0; j<oMembers.count; j++ )// メンバコレクションをループ

もうね、自分で書いてて阿呆っぽいことしてるなぁと思ってたんですよ。
なんか似たような感じで詰まるなぁ(´;ω;`)


前回の反省を活かせない人間  はい私です。



じゃあの!

2012/02/09

にわかスクリプト~EnvelopeWeightsの名前を変えたかっただけなんです許してやってください。

こんなの書くのにしばらく時間がかかってしまいましたorz

今回ばかりは誰のためにもならないがそれでも晒す。全裸で晒す。

Jscript

for (i=0; i<Selection.count; i++)
{
    FreezeModeling(Selection(i), null, null);
    var oClusters =Selection(i).ActivePrimitive.Geometry.Clusters.Filter( "pnt" );
    SetValue(oClusters.GetAsText() + ".*.Name", "Envelope_Weights", null);
}


いやもう見事にダメダメですな。無理やり感この上ない。
なんかもう生きててごめんなさい。

Twitterでチラッと呟いたら天の声。

mObject Cleaner:myara CG blog
http://myara.blog.fc2.com/blog-entry-47.html

秒殺クラスタ :Junki The Junkie's Junkyard
http://junkithejunkie.cocolog-nifty.com/blog/2008/07/post_a1f7.html


涙が止まりません。

SDKガイドを調べる練習をしたんだと思い込むことにしようそうしよう。
ダメダメでもやってりゃ何とか形になるもんです。たぶんきっとメイビー。

日々教えて頂いている方々に見離される前に普通に書けるようになりたい所存です。

さぁ明日へ向かってアイキャンフライ。


追記:
ブログにコードのっけるウィジェットと変換コード公開してくださってる方が
居たのでメモメモ。

http://www.kuribo.info/2008/04/code-prettify.html


2012/02/02

にわかスクリプト~救世主現る その2 :前回の追記

----前回までのあらすじ----
マテリアルを皆まとめてグループにしようとして失敗

時間切れ

マテリアル1つずつ選択して実行 とかで茶を濁す
-----------------------

とまぁこんな感じでグダグダ。超グダグダ。
そして月曜日にもまだできず、選択してグループにできたものは他のライブラリに移す。

という手作業前提な改悪を施して、後は週末にでも調べてみよう・・ とか思ってました。


が、


またしても救世主現る。
Material ・ ImageClips 取得メモ

屋良Martinさんありがとうございます。
私が雪山で遭難しかけてる時に記事を見つけて書いてくださったようで、本当に感謝です。


ということでまた私大して何もしてません。

ダメ人間です。救世主が居ないと何もできません。
なんかもうアレです、世紀末救世主に偶然助けられる村人的な存在です。

・・・orz

そんなこんなで今日も恥を晒しましょう。
 
誰かに助けられてばかりの全国の村人達のために。


Jscriptでふ
oSel = Selection(0);

if (oSel == null)
{
          Logmessage("マテリアルライブラリを選択しろ");
}
          else
{
           SetCurrentMaterialLibrary(oSel);


           var oMatLib = ActiveProject.ActiveScene.ActiveMaterialLibrary;
           var oMatItem = oMatLib.Items;


           for( var i=0; i<oMatItem.Count; i++ )
                     {
                    var oMats = oMatItem(i);
                    var oName = oMats.Name;
                    var oMember = SelectObjectsUsingMaterial(oMats);
                    CreateGroup(oName, oMember,null );
                    }
          Logmessage("でけた(´・ω・`)");
}



選択してるマテリアルライブラリ内のマテリアルが適応されてる奴らを
それぞれグループにしてしまいなさいよってスクリプトです。多分動くはず。。


ifとかも使ってみました。for、if、elseは基本なのですかね。

あとコピペスクリプトの時は全く使わなかったLogmessageが大活躍。


しかしあれだ。変数の名前って難しいな。

oMenberとかも何のメンバーだよって感じになるもんな。
ていうかよくわからんからもう全部o付けちゃったけどどうなのよコレ。

助けられつつ何となく調べ方も分かってきたような気がする。たぶん気がするだけ。
まぁちょっとずつ覚えて行きましょう(´・ω・`)


~追記~

ソースコードをブログの中に表示させるのやってみたんだけどなんかおかしい。
やたら改行されてたりスペース空いてたり。何じゃこりゃ。

そしてJunki The Junkie's Junkyardさんでも記事を書いて頂いた模様。
私がイエティとタイマンしてる間に・・・感謝の涙で前が見えません(´;ω;`)

2012/01/28

にわかスクリプト~マテリアルを皆まとめてグループにしようとして失敗

あと数十分後にはスノボしに雪山に向かわねばならないので途中だけど載っけておく。

同僚Aよ、後は任せた!ていうかあと一歩な気もするんだよ、うん。

ループ処理がうまく行かずにどうしようかと思ってたらタイムアップ。


Jscriptでふ
-----------------------------


var oSel = Selection(0);

var Name = oSel.name;

var Member = SelectObjectsUsingMaterial("Sources.Materials.".oSel);

CreateGroup(Name, Member, null);

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

とりあえずこれで選んでるマテリアルの名前とメンバー一緒なグループが出来てくれるはず。

たぶん。

本当はマテリアルライブラリの中にある奴ら全部に適応したいのですがね。。


こんなの晒したら各方面からお怒号が飛んできそうだわ(;´Д`)


for的な文が間違ってるんだろうな。どうなんだろ。


雪山から生還した暁にはちゃんとまとめると思います。

ていうかこんなの誰も使わねぇってばよ。いや今は使うんだけど。

ブログ書いてたら時間がやばい。いざゆかん。



追記へつづく~・・・はず。


2012/01/19

にわかスクリプト~救世主現る

一応タイトル統一してますがまだ自力ではなんにもしてません。はい。
そして今回はスクリプトとか書いてません。メモです。

この前の範囲削除スクリプトを晒してみたら

Junki The Junkie's Junkyard のjunkiさんが記事を書いてくれまして。


キーフレーム殲滅でポン。

大感謝です(´;ω;`) 中身はサッパリわかりませんがorz


で、Twitterで会話して学んだことメモっておこう。

日本中すべての 僕のような 勘の鈍い紳士淑女のために。

--------------
"" ←これ。

""これでくくるのが「文字列」って奴らしいですよ奥さん。
"0"ってやっても文字列って認識されるみたいですよ。
--------------
オブジェクトモデルでもないのに o とかつけるなと叱られました。
とりあえずo付けとけばいいんだと思ってましたごめんなさいorz

挙動には問題ないけど分かりづらいってばよ ってことみたいです。

oStr = GetValue ("PlayControl.In") ←コレダメ

まぁ言ってしまえば、オブジェクトモデルというものを理解できてないので、
上記のもオブジェクトモデルだとか頭の悪い勘違いをしていました。はいごめんなさい。
--------------

そしてありがたい事にjunkiさんが過去記事で色々Tips書いてくれてます。
勉強になりそうなのと近々で調べてみたいものメモメモ。








しかしあれだな、細かい便利スクリプトたくさん増えていった場合はどうやって管理しようか。

みなさん独自にランチャ的なもの作ってるんですかね。やりかた分からないけど。

レイアウトかえてボタンにしてるんですかね。やりかた分からないけど。

まぁ、、追々で。


てことでjunkiさんに書いていただいたのを地道に解析してお勉強だ。
もう少し今のプロジェクト仕様に変えたい部分を改良してみよう。



つづく・・・たぶん。


2012/01/18

にわかスクリプト~範囲外削除的な何か

数千フレームあるモーキャプのデータを削ったり何だりするのは重いわけですよ。

面倒くさい。

ていうか大量に選択してアニメーションエディタで消し続けるとメモリ不足でSIさんが逝ってしまう。

32bitマシンでメモリに限界がある上にCPUもそんなに強くない。仕方ない。


てことで調べてみたんです。SDKガイドとやらを。

するとなんとDeleteKeysなんて便利そうなもんがあるじゃあないですか。


で、弄り回してたんですが取得した値を入れようとすると型が違うわボケって怒られて、
もうわからなくなったので友人にメールして解決!


・・・前置きが長くなりましたが私は特に何もしてません。教えてもらっただけです。
けど書いちゃいます。

私のようなヘルプ見ただけじゃサッパリな勘の鈍い紳士淑女用に。


ちなみにVBで教えてもらったのをJSに直してます。
何がいいのか分からないけどなんとなくJSでやってみようかなとか思ったりして。
--------------------------------------



//選択している物
var oSel = Selection(0);  

//上で取得したoSelの子供を取得。名前とタイプは指定なし。
var oModels = oSel.FindChildren( "", "" );

//シーンのスタートとエンドフレーム取得
oStr = GetValue ("PlayControl.In")
oEnd = GetValue ("PlayControl.Out")

//削除フレーム範囲
oStFlame = oStr - 51
oEnFlame = oEnd + 51

//範囲内キーフレーム削除
DeleteKeys( oModels, "0", oStFlame, "False", "False", "siAnimatedParameters" );
DeleteKeys( oModels, oEnFlame, 999999, "False", "False", "siAnimatedParameters" );



--------------------------------------
多分動く。動くはず…。


とりあえず今の状態だと、選択してるモデル階層下で、
現在のスタートフレーム - エンドフレームの前後50フレーム以外の
キーフレームを削除。って感じなはず。

正しくは0~(スタートフレーム-51)と(エンドフレーム+51)~999999フレームの間。


まぁとりあえず単純なもの作って今の作業だけでも効率化できれば儲けもんってことで。


キャプチャデータ扱う場合はそこそこ使いそうな類のものだし、少しずつ改良していく予定。
スクリプトの勉強のためにもね。

・PPGつけて範囲とか、色々選択できるようにしたい
・エクセルの表から数値を拾ってくるようにもしたい

とりあえず考えてるのはこれくらい。あ~めんどくさそ。

本当に単純で、知ってる人が見たら駄目だこりゃってレベルのものだろうけど、
これだけでも作業効率がかなり上がって嬉しかったのでこれをキッカケに
しょぼいながらもスクリプト勉強しようと思った次第です。


因みに私の助けに答えてくれた友人のブログはこちら↓
http://g-web.s-lines.net/
思いっきり私の実名宛にメモってくれてますw


つづく・・・はず(;・∀・)