• 検索結果がありません。

MeshLabは,3Dデータ(objデータなど)を読み込んでレイトレーシングで表示・編集す

るソフトウェアである。レイトレーシングで 3Dグラフィクスを描くには,Cinderellaと親 和性の高い Cindy3D を利用するのがよいが,MeshLabを使うメリットは3Dプリンタ用の STLファイルを出力できることである。また,KeTCindyで描いた3Dの図がレイトレーシ ングでどのようになるのかを見ることも比較的簡単にできる。

  MeshLab との連携は,KeTCindy から Obj 形式のデータを書き出すことで行う。

Mkobj**() 関数でデータを作り,Mkviewobj() 関数で MeshLab を呼び出して表示を行 う。

 なお,Mkviewobj() 関数で MeshLab を呼び出して表示を行う場合,これを Draw ス ロットに書くと頻繁に呼び出しが行われるため非効率となる。そこで,if(1==0,・・・) で・・・の部分にMeshLabの呼び出し関係のスクリプトを書いて,実際に呼び出すときに

if(1==1,・・・)とする方法と,呼び出し関係のスクリプトを関数化してボタンに割り当てる

方法がある。ketcindyパッケージに含まれるsample にボタンをつけたものがある。

 なお,3Dであるので,Initialization スロットに

  Ketinit();   Ketinit3d(); を記述しておく。

関数  Mkobjcmd(name,式,option)

機能  厚みを持たない曲面のobjファイルのためのコマンドを作成する 説明  オプションは [分割数1,分割数2,表側の方向の指定]

表側の方向は,変数に対して,右手系の方向が”+”

作成されるデータは”oc”+name のファイル名の obj データである。この名称は,

Mkviewobj() で用いる。(以下,Mkobj**()関数では同様)

【例】:サドル面

  fd=[ "z=x^2-y^2", "x=[-1,1]","y=[-1,1]"," "];

  Sf3data("1",fd);

  Windispg();

  Mkobjcmd("1",fd,[40,40,"-"]);

  Meshlab():=(

   Mkviewobj("saddle",oc1, ["m","v"]);

  );

このうち,Sf3data("1",fd); はCinderellaの画面に表示するためであって,なく てもよい。次図で,左が option +の場合,右が - の場合である。

 ⇒関数一覧 関数  Mkobjcrvcmd(name,PD,option)

機能  空間曲線(直線)のobjファイルのためのコマンドを作成

説明  オプションは [太さ,断面の形状(正多角形)の辺の数,断面の正面]

曲線は紐のようなもので表す。その断面は正多角形で,デフォルトは正 6 角形であ る。断面の正面は”xy”,”yz”,”zx”のいずれかで指定する。太くなった時に形状の差が 現れる。

例 太さ0.03で螺旋を描く

 Spacecurve("1","[(6*pi-t)/(6*pi)*cos(t),(6*pi-t)/(6*pi)*sin(t),0.1*t]",   "t=[0,6*pi]",["Num=200"]);

 Windispg();

 Mkobjcrvcmd("1","sc3d1",[0.03]);

 Meshlab():=(

 Mkviewobj("spiral",oc1,["m","v"]);

 );

Mkobjcrvcmd("1","sc3d1",[0.1,8,"yz"]); としたのが下図右。

 ⇒関数一覧 関数  Mkobjnrm(name,式)

機能  法線ベクトルのデータを作成

説明  式は曲面を表す式。これに対し,法線ベクトルを表す式を求める。

関数  Mkobjplatecmd(name,面データ,options) 機能  面を描く

説明  面データを渡して面を描く。

options は,面の厚みの指定。厚みは中心線に対し,両側につけることができる。

たとえば,[0.05] はプラス側に 0.05 の厚み,[0.05,-0.04] はマイナス側にも0.04の厚 みをつける。

【例】三角形のプレートを描く

 Xyzax3data("","x=[-5,5]","y=[-5,5]","z=[-5,5]");

 p1=[2,0,0];

 p2=[0,2,0];

 p3=[0,0,2];

 plane=[[p1,p2,p3],[[1,2,3]]];

 Mkobjplatecmd("1",plane,[0.05]);

 Mkobjcrvcmd("2","ax3d");

 Mkviewobj("plane",Concatcmd([oc1,oc2]),["m","v"]);

      

関数  Mkobjpolycmd(name,PD,options) 機能  多面体を描く

説明  VertexEdgeFace() の戻り値を PDとして渡して多面体を描く。

関数  Mkobjsymbcmd(PD, 実数,実数,ベクトル, ベクトル) 機能  文字等のobjデータのためのコマンドを作成

説明  引数のPDを描く。第2引数は大きさ,第3引数は回転角,第4引数は正面方向の ベクトル,第5引数はPDの中心の位置。

PDは,平面の描画コマンドによるプロットデータが使える。また,PD に半角アル ファベットを文字として与えることができる。この場合,文字は n,p,q,r,t,x,y,zで,該 当するフォントが data フォルダの fontF フォルダに用意されている。この中にない フォントは使えない。 

【例】軸の名前 x,y,z を表示し,円を描く。

円は Circledata(); でプロットデータを作成する。

関数  Mkobjthickcmd(name,式)

機能  厚みを持つ曲面のobjファイルのためのコマンドを作成

説明  オプションは [分割数 1,分割数 2,厚み,表側の方向の指定,条件] 表側の方向 は,変数に対して,右手系の方向が”+”。厚みを持つため,nsew のそれぞれについ て,”+n+s-e-w” のように指定する。

条件として,"Assume(R>0)" をつけると,Rが0以下になるための不具合を回避でき る。

また,”ratsimp”をつけると有理関数について,”trigsimp”をつけると三角関数につい て,処理を速くすることができる。なお,この関数はMaximaを使うので,Maxima をインストールしていることが前提。

【例】回転放物線  fd=[

 "z=(x^2+y^2)",

 "x=R*cos(T)","y=R*sin(T)",  "R=[0,2]","T=[0,2*pi]","e"

 ];

 Mkobjthickcmd("1",fd,[40,40,0.2,"+n+s-e-w+","assume(R>0)"]);

 Mkviewobj("pala",oc1,["m","v","Wait=5"]);

      

関数  Mkviewobj(name,PD, options)

機能  objファイルを作成。optionにより MeshLabを立ち上げて表示する。

説明  第2引数に複数のプロットデータを与えるときは,Concatcmd() により1つにまと める。オプションは

 ”m”または”make”  データを作る(指定しない場合もデータがなければ作る)

 ”v”または”view”  MeshLabを立ち上げて表示する

 ”W=n”       作成するための待ち時間。n秒。これを過ぎると終了する

 ”Unit=mm”    Setunitlen()と連動して3Dプリンタの数値の単位をmmで指定する    3Dプリンターがインチで認識する場合は ”Unit=in” とする。

 ⇒関数一覧