project2
コマンドを使用して2Dへの投影方法を学習しました。今回は、この project2
コマンドの発展形について見ていこうと思います。たとえば、下の画像のように、切断するレベルを指定して2Dに表現する場合を考えてみます。unid = 1 material mat add 0, 0, cutZ cutplane del 1 gosub "desk" if dis_chair then hotspot 0, chair_pos[2], chair_height, unid, chair_pos[1], 1+128 :unid = unid+1 hotspot chair_pos[1], chair_pos[2], chair_height, unid, chair_pos[1], 2 :unid = unid+1 hotspot -1, chair_pos[2], chair_height, unid, chair_pos[1], 3 :unid = unid+1 hotspot chair_pos[1], 0 , chair_height, unid, chair_pos[2], 1+128 :unid = unid+1 hotspot chair_pos[1], chair_pos[2], chair_height, unid, chair_pos[2], 2 :unid = unid+1 hotspot chair_pos[1], -1 , chair_height, unid, chair_pos[2], 3 :unid = unid+1 add chair_pos[1], chair_pos[2], 0 gosub "chair" endif cutend end
PROJECT2 3,270,3
if GLOB_VIEW_TYPE = 2 then cutZ = cutElevation else cutZ = height + 1 endif
Project2{3}コマンドとCutPlane
3Dスクリプトを見ると、cutplane
コマンドが使用されています。これは、切断面を作成し、その切断された部分を削除するためのコマンドです。cutplane
~ cutend
の間に記述されているものが切断の対象となるため、この場合は "desk" と "chair"(詳細は過去の記事を参照)が切断されます。
cutplane
にはさまざまな使い方があり、任意の平面を切断面に設定できますが、今回の書き方では X-Y 平面が切断面となり、それより上の部分が切断されるようになっています。切断位置は add
コマンドを使い、cutZ
という変数でコントロールしています。この変数はマスタースクリプトで定義されています。
グローバル変数
マスタースクリプトでは、GLOB_VIEW_TYPE
というグローバル変数を使用し、現在のビューが平面図かどうかを if
文で分岐させています。平面図(GLOB_VIEW_TYPE = 2
)の場合、cutZ = cutElevation
(これは新たに追加したパラメータ)とすることで、切断位置を自由に変更できるようにしています。一方、平面図以外のビューの場合は、cutZ = height + 1
として机の高さよりも上に切断面が位置するようにし、3D形状に影響が出ないように制御しています。
このようにコントロールすることで、3D形状はそのまま維持しつつ、2D表示の際に切断面を自由に調整できます。これにより、図面化する際の表現力を向上させる GDL を作成することが可能です。
完成イメージ |
0 件のコメント:
コメントを投稿
何でも気軽にコメントください。