2005年04月28日

左右対称モデリングに便利なスクリプト

左半分を削除してミラーコピーするスクリプトと、軸のセンターに近いポイントを0にそろえるスクリプト

ミラーコピーするスクリプトは、「/* 入力パネル」の行を削除するか、頭にスラッシュを追加して「//* 入力パネル」にして、コメントアウトしてある部分を元に戻せば入力パネルが開くようになる

 

/**************************************

左半分(backビューで)を削除して
ミラー複製をしてから中央のポイントを
結合するモデラースクリプト

***************************************/

@script modeler
@name EZMirror
@version 2.3

main
{
 axis = X;
 offset = 0.0;
 doMerge = true;
 
 /* 入力パネル
 axisType = @X,Y,Z@;
 reqbegin("EZ Mirror");
 ctl_1 = ctlchoice("MirrorAxis",1,@"X","Y","Z"@);
 ctl_2 = ctlnumber("Offset",0.0);
 ctl_3 = ctlcheckbox("Merge center points", true);
 return if !reqpost();
 axis = axisType[getvalue(ctl_1)];
 offset = getvalue(ctl_2);
 doMerge = (getvalue(ctl_3) ? true : false);
 reqend();
 //*/
 
 bb = boundingbox();
 bb[2].x = 0.0;
 //ボリューム選択するには
 //選択モードを「USER」に
 selmode(USER);
 selpolygon(CLEAR);
 selpolygon(SET,VOLEXCL,bb[1],bb[2]);
 delete();
 mirror(axis,offset);
 
 if(doMerge)
 {
  bb[1].x = 0.0;
  selpoint(SET,VOLUME,bb[1],bb[2]);
  mergepoints();
 }
}

/**************************************

軸のセンターに近いポイントを
0にそろえるモデラースクリプト

***************************************/

@script modeler
@name NearToCenter
@version 2.3

main
{
 reqbegin("Near to Center");
 ctl_1 = ctlchoice("Axis",1,@"X","Y","Z"@);
 ctl_2 = ctlnumber("Distance(m)",0.001);
 return if !reqpost();
 axis = getvalue(ctl_1);
 d = getvalue(ctl_2);
 reqend();
 
 bb = boundingbox();
 if(axis == 1){
  bb[1].x = -d;
  bb[2].x = d;
 }else if(axis == 2){
  bb[1].y = -d;
  bb[2].y = d;
 }else{
  bb[1].z = -d;
  bb[2].z = d;
 }
 selmode(USER);
 selpoint(CLEAR);
 selpoint(SET,VOLUME,bb[1],bb[2]);
 
 numPnts = editbegin();
 for(i=1;i<=numPnts;i++)
 {
  pos = pointinfo(points[i]);
  if(axis == 1) pos.x = 0.0;
  else if(axis == 2) pos.y = 0.0;
  else pos.z = 0.0;
  pointmove(points[i],pos);
 }
 editend();
}

posted by toka at 13:54| Comment(0) | TrackBack(0) | LScript | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。