ArchiCAD GDLで椅子をつくてみる①
gosub
コマンドを使って少し改変したものです。unid = 1 material mat gosub "desk" end "desk": !脚1 block leg_size, leg_size, height - thin !脚2 add width - leg_size, 0, 0 block leg_size, leg_size, height - thin del 1 !脚3 add width - leg_size, depth - leg_size, 0 block leg_size, leg_size, height - thin del 1 !脚4 add 0, depth - leg_size, 0 block leg_size, leg_size, height - thin del 1 !天板 add 0, 0, height - thin block width, depth, thin del 1 !ホットスポット hotspot 0, 0, 0 hotspot width, 0, 0 hotspot 0, depth, 0 hotspot width, depth, 0 !ピンクのホットスポット unid = 1 hotspot 0, depth/2, height, unid, width, 1+128 :unid = unid+1 hotspot width, depth/2, height, unid, width, 2 :unid = unid+1 hotspot -1, depth/2, height, unid, width, 3 :unid = unid+1 hotspot width/2, 0, height, unid, depth, 1+128 :unid = unid+1 hotspot width/2, depth, height, unid, depth, 2 :unid = unid+1 hotspot width/2, -1, height, unid, depth, 3 :unid = unid+1 return
values "width" 0.9, 1.2, 1.5 values "depth" 0.6, 0.8, 1.0 parameters height = 0.8
GOSUBコマンド
gosub
コマンドは、プログラム内で繰り返し使用されるコードブロックを別の場所にまとめて記述し、その部分を何度も呼び出す際に使用されます。コードが複雑になりそうなときに、よく使います。
例えば、同じ机を2つ並べて配置したい場合、机のコードをもう一度書くと、コードが長くなり管理が難しくなります。そこで、gosub
コマンドを使ってまとめておくことで、簡潔に処理できます。下記のようなコードで、机を2つ並べることが可能です。
unid = 1 material mat gosub "desk" add width + 0.1, 0, 0 gosub "desk" end "desk": ~机の3Dスクリプト~(省略) return
gosub
コマンドを使うときは、end
コマンドでスクリプトの終わりを定義する必要があります。また、ラベル("desk")を定義した後には、return
コマンドを使って、そのラベルの終わりを定義する必要があります。
なお、ラベルは end
コマンド以降に定義する必要があるため、順番を間違えないように注意してください。
パイプ椅子の作成とTUBEコマンド
新規追加パラメータ |
"chair": pipe_size = 0.01 pipe_pos = chair_size/2 + 0.03 pipe_height = chair_height - 0.03 !脚の作成 material chair_pipe_mat gosub "chair_pipe" rotz 90 gosub "chair_pipe" !座面の作成 material chair_mat add 0, 0, chair_height - 0.03/2 cylind 0.03/2, chair_size/2 del 1 end return "chair_pipe": tube 2, 6, 1+2+16+32+64, 0, 0, 900, pipe_size, 360, 4000, pipe_pos*cos(45), pipe_pos*cos(45), -1, 0, pipe_pos*cos(45), pipe_pos*cos(45), 0, 0, pipe_pos*cos(45), pipe_pos*cos(45), pipe_height, 0, pipe_pos*cos(225), pipe_pos*cos(225), pipe_height, 0, pipe_pos*cos(225), pipe_pos*cos(225), 0, 0, pipe_pos*cos(225), pipe_pos*cos(225), -1, 0 return
まずは、"chair_pipe" ラベルを作り、この中で脚の形を作っていきます。今回は tube
コマンドを使って門型を一つ作成します。tube
の詳しい使い方については GDLリファレンスに記載されていますが、簡単に説明すると、断面形状の多角形座標とパスの座標を定義して3D形状を生成するコマンドです。なお、断面形状に曲線を使いたい場合は、追加ステータスコードを使用します。
今回の椅子の脚は円柱を門型に加工したような形なので、追加ステータスコードを使っています。詳しくはリファレンスに記載されていますが、簡単に触れると、900
と書いてある行で中心座標を定義し、4000
と書いてある行で半径と角度を定義しています。また、コサインやサインの計算も使えるので、覚えておくと便利です。
次に、"chair" ラベルを作り、この中で "chair_pipe" ラベルを2回呼び出します。2回目は rotz
コマンドで座標系を90度回転させるので、4本の足が出来上がります。その後、cylind
コマンドで座面を作成します。cylind
コマンドは半径と高さを定義して円柱形状を作るコマンドです。add
コマンドで椅子の高さまで移動させてから cylind
を呼び出すことで、椅子のような形が完成します。
最後に、"chair" ラベルを "desk" の後に呼び出せば完成です。(以下のように)
unid = 1 material mat gosub "desk" add chair_pos[1], chair_pos[2], 0 !後で椅子の位置を自由に動かせるようにchair_posというパラメータを定義しておく gosub "chair" !←ここに追加 end
0 件のコメント:
コメントを投稿
何でも気軽にコメントください。