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” とする。
⇒関数一覧