立体(body)


body [クラス]


  :super   cascaded-coords 

:slots (faces edges vertices model-vertices box convexp evertedp csg)


3次元形状を定義する。


:magnify rate [メソッド]

このbodyのサイズをrateで変更する。拡大は,csgリストの中に 記録される。


:translate-vertices vector [メソッド]

モデルの頂点を相対移動する。vectorはローカル座標系で与えられなければならない。 変換はcsgリストに記録される。


:rotate-vertices angle axis [メソッド]

モデルの頂点をaxis軸回りにangleラジアン回転させる。 回転はcsgリストに記録される。


:reset-model-vertices [メソッド]


:newcoords rot &optional pos [メソッド]
座標系をrotposを用いて変更する。 posが省略された時はnewrotにはcoordinatesのインスタンスを与える。


:vertices [メソッド]
このbodyのすべての頂点のリストを返す。


:edges [メソッド]
このbodyのすべてのエッジのリストを返す。


:faces [メソッド]
このbodyを構成するすべての面のリストを返す。


:box [メソッド]
このbodybounding-boxを返す。


:Euler [メソッド]
このbodyのオイラー数を計算する。これは, faces+vertices$ -$edges$ -$2$ -$holesである。 これは,$ -$2ringsと等しくなるべきである。


:perimeter [メソッド]
すべてのエッジの長さの合計を返す。


:volume &optional (reference-point #f(0 0 0)) [メソッド]
このbodyの体積を返す。


:centroid &optional (point #f(0 0 0) [メソッド]
このbodyが均質な立体と仮定し,重心の位置を返す。


:possibly-interfering-faces box [メソッド]


:common-box body [メソッド]
このbodyと他のbodyの共通な最小のboxを返す。 もし,2つのbodyが干渉しているならば,その交差部分は この共通boxの中に存在するはずである。


:insidep point [メソッド]
もし,pointがこのbodyに属するなら,:insideを返す。 もし,pointがこのbodyの表面上にある場合,:borderを返す。 そうでなければ,:outsideを返す。


:intersect-face face [メソッド]

もし,このbodyの面とfaceの間に干渉がある場合,Tを返す。


:intersectp body [メソッド]
このbodyと他のbodyとの間の交差部分を返す。


:evert [メソッド]
すべての面とエッジの方向を反転させる。 そのため,このbodyの内部は外部になる。


:faces-intersect-with-point-vector point direction [メソッド]
pointからdirectionの方向に伸びるベクトルと交差する面をすべて集める。


:distance target [メソッド]
targetは,実数ベクトルあるいは平面オブジェクトである。 :distanceメソッドは,targetから最も近い面を見つけ, その面と距離のリストを返す。


:csg [メソッド]
bodyが構築された履歴であるcsgスロットを返す。


:primitive-body [メソッド]
このbodyを構築する基本bodyのリストを返す。


:primitive-body-p [メソッド]
もし,このbody[*] 節で示される関数の内の1つから作られた基本bodyであるなら,Tを返す。


:creation-form [メソッド]
このbodyを作るためのLisp表現を返す。


:body-type [メソッド]
もし,このbodyが基本bodyあるいはこのbodyの表現が複雑(に構成された) bodyなら,作成パラメータのリストを返す。


:primitive-groups [メソッド]
2つの要素をもつリストを返す。 最初の要素は,このbodyを構成するために追加(body+)された基本body のリストである。次の要素は,差し引かれた基本bodyのリストである。


:get-face body &optional face id [メソッド]
bodyは,このbodyを構成しているbodyのインスタンスであり, 基本body型の1つである。例えば,:cube, :prism, :cone, :solid-of-resolutionなどか あるいはNILである。 もし,faceidも与えられないならば,bodyに一致する面をすべて返す。 もし,faceが与えられたなら,その上にフィルターが実行される。 faceは,:top,:bottom:sideの内の1つでなければならない。 (send abody :get-face :cylinder :top)は,abodyを構成する円柱の上面すべてを返す。 もし,face:sideなら,idで番号付けされた面を取り出すことができる。 (send abody nil :side 2)は,idが0から始まるため,abodyを構成する bodyの側面から3番目の面をすべて返す。


:init &key :faces :edges :vertices [メソッド]
:facesよりこのbodyを初期化する。 :facesは,必要な引き数である。 :faces,:edges:verticesは完全な立体モデルを定義するために 矛盾のない関係を持っていなければならないので,矛盾した引き数でこのメソッドを 呼び出すことは,意味の無いことである。 bodyを作るために,[*]節で書いている基本bodyの作成関数と [*]節のbody合成関数を使用する。


:constraint b [メソッド]
このbodybに接触しているとき, このbodyの拘束を返す。このメソッドの詳細な説明は[*]節を参照すること。


2016-04-05