2011年6月3日金曜日

ProgressBar : Model Replace

オブジェクトを入れ替えるスクリプトで、その数が1000近くになると、
フリーズしてるのかわからなくなりました。
動いてるかどうかわからなくなるのは不安です。

そこで、現在の進行状況を出す、ProgressBar を導入。
いろいろなところで使えますねぇ。

JScript
//ModelReplace v1.3
//20110602 親を一致 プログレスバーを設定
//20110509 名前を一致化
//20110205 _ 親子付けに対応
//20110111_作成

//使い方
//入れ替えたいオブジェクトを選択、実行。
//ピックセッションになるので、コピー元の"親"をPICK

function main(){
 if(Selection.count ==0){
  return 0}
 var oRoot = ActiveSceneRoot;
 var oSel = Selection;
 
 //ピックセッション
 var oPick = PickObject("SelectObject");
 if(oPick(0)== 0){
  Logmessage("Cansel")
  return 0}
 var oPObj = oPick(2);
 var nColl = XSIFactory.CreateObject("XSI.Collection");

 var oProgressBar = XSIUIToolkit.ProgressBar ;
 
 //プログレスバーの設置
 oProgressBar.Maximum = oSel.Count ;
 oProgressBar.Step = 1;
 oProgressBar.Caption = "RePlace Now!";
 oProgressBar.CancelEnabled = false ;
 oProgressBar.Visible = true;


 for(var i = 0; i < oSel.count; i++){
  var oName = oSel(i).name
  var oParent = oSel(i).Parent3DObject;
  oSel(i).name = "tempname";//一時名前
  var oTrans = oSel(i).kinematics.Global.Transform;
  var newObj = SIDuplicate( "B:" + oPObj);
  if(oParent.Name != newObj(0).Parent3DObject.Name){
   ParentObj( oParent, newObj )
  }
  newObj(0).name = oName;
  newObj(0).kinematics.Global.Transform =oTrans;
  nColl.Add(newObj(0))
  
  //プログレスバーの数値加算
  oProgressBar.Increment() 
 }
 //元のオブジェクトを削除
 DeleteObj(oSel);
 
 //新しいオブジェクトの選択
 SelectObj(nColl);
 
 //プログレスバーのお片づけ
 oProgressBar.Visible = false ;
}
main();

0 件のコメント:

コメントを投稿