はじめに
Mayaでは正二十面体がプリミティブで用意されている。これをベースに、切頂二十面体をつくるMELスクリプトを書いた。
MELスクリプト
頂点を全選択し、ベベルをすればいいのだが、UIからでは、入力できる有効桁数の関係で、1/3がちゃんと反映されたかわからず、精度が気になるので、スクリプトで小数点以下を多めに入力する。
code.mel
polyPlatonic;
select -r pPlatonic1.vtx[0:11] ;
polyChamferVtx 1 0.3333333333333333333333 0;
一応、精度を確認するために、てきとうな六角形の辺の長さを計算してみる。
MELの画面では、頂点座標が結構な12桁表示されるが、コンポーネントエディタでは、小数点以下3桁までしか表示してくれない。心配なので、オブジェクトを大きくスケールして、確認する。カメラもそれに合わせて、クリップ範囲を調整する。その状態で、適当な面の6辺の長さを計算する。
code.mel
{
polyPlatonic;
scale -r 1000000 1000000 1000000;
select -r persp ;
setAttr "perspShape.farClipPlane" 10000000;
setAttr "perspShape.nearClipPlane" 100;
select -r pPlatonic1.vtx[0:11] ;
polyChamferVtx 1 0.3333333333333333333333 0;
$v1 = `pointPosition pPlatonic1.vtx[40]`;
$v2 = `pointPosition pPlatonic1.vtx[41]`;
$v3 = `pointPosition pPlatonic1.vtx[53]`;
$v4 = `pointPosition pPlatonic1.vtx[52]`;
$v5 = `pointPosition pPlatonic1.vtx[51]`;
$v6 = `pointPosition pPlatonic1.vtx[50]`;
vector $v = <<$v1[0] - $v6[0], $v1[1] - $v6[1], $v1[2] - $v6[2]>>;
float $d = `mag $v`;
print($d);
}
辺の長さの違いを比較
40to41 : 350487.375683
41to53 : 350487.440757
53to52 : 350487.387556
52to51 : 350487.45018
51to50 : 350487.353366
50to40 : 350487.447236
6桁はあってる。計算の何処かの過程で、floatになってるのかな。