閉じる

GDLスクリプトによるオブジェクトの作り方(中級編)

初級編で作成したカラーボックスに縦横の段数設定を加えてみましょう。
はじめに、知っておくと便利なプログラム制御について紹介します。

0
1.プログラム制御
1)コメント
「!」をスクリプトの前に記述すると、プログラムはその行のスクリプトの実行を無視します。第三者が見ても理解できるように、スクリプトや計算式のコメントを自由に記述することが出来ます。
1
2)フロー制御
例えば、棚板を5分割したい場合は、座標変換とblockコマンドを4回繰り返す必要があります。スクリプトは以下のようになります。
add 0,0,高さ/5
block 幅,奥行,厚さ
add 0,0,高さ/5
block 幅,奥行,厚さ
add 0,0,高さ/5
block 幅,奥行,厚さ
add 0,0,高さ/5
block 幅,奥行,厚さ
2
しかし、段数を固定しない場合はどのようにスクリプトを書けばよいでしょうか?
このような場合にフロー制御を使います。まずは、段数を固定値としてフロー制御を使って書くと以下のようになります。
 
for i=1 to 4
add 0,0,高さ/5
block 幅,奥行,厚さ
next i
 
更に、分割数を変数に入れ替えると
何回でも実行を繰り返すことが可能になります。
 
for i=1 to 分割数の変数
add 0,0,高さ/分割数の変数-1
block 幅,奥行,厚さ
next i
 
3)サブルーチン制御
スクリプトは複雑になっていくと、動作が重たくなるだけでなく、不具合(バグ)も発生しやすくなります。使用するコマンドをサブルーチン化することで、繰り返し記述するスクリプトを単純化でき、不具合が発見しやすくなります。
 
例えば、2種類のblockを書く場合(座標変換は記述していません)
block 幅A,奥行A,高さA
block 幅B,奥行B,高さB
 
となりますが、サブルーチンで書くと
 
gosub 10
gosub 20
end
10:
block 幅A,奥行A,高さA
return
20:
block 幅B,奥行B,高さB
return
 
となります。
※gosubとはラベル番号のついたサブルーチンに行くという宣言です。
※10:や20:はラベルといいます。サブルーチンの場所を差します。
※一番最初のサブルーチンの行の前には必ずendを付けて、本文の終了を宣言します。
※サブルーチンは必ずreturnを付けて元に戻るようにします。
 
更に、パラメータをコマンド毎に定義すると
幅=幅A
奥行=奥行A
高さ=高さA
gosub 10
幅=幅B
奥行=奥行B
高さ=高さB
gosub 10
end
10:
block 幅,奥行,高さ
return
 
となり、blockコマンドは1行のみ、コマンド実行時前にパラメータを宣言するだけなので、間違いを発見しやすくなります。
 
4)条件ステートメント制御
パラメータの変数に、ある条件の数値が代入された場合、変数を指定したり、ラベルの行先を変えたりします。
 
例えば、変数が0の場合は100:を実行、変数が1の場合は200:を実行させたい場合は
以下のようになります。
 
if 変数=0 then 100:
if 変数=1 then 200:
end
100:
コマンド
return
200:
コマンド
return
 
2.カラーボックスのスクリプト(参考)
1)パラメータ
分割に関するパラメータを設定します。「タイプ」は整数に設定します。
3
2)3Dスクリプト(全文)
!パラメータの定義————–
!t_Side:側板サイズ
!t_Tana:棚板サイズ
!m_Side:側板材質
!m_Tana:側板材質
!y_step:縦分割数
!x_step:横分割数
!tateyoko:分割方法 横0 縦1 縦横2
!_x:サブルーチンに代入する変数
!_z:サブルーチンに代入する変数
 
!左板——————–
material m_side
_x=t_side
_z=zzyzx
gosub 10
 
!右板——————–
add a-t_side,0,0
_x=t_side
_z=zzyzx
gosub 10
del 1
 
!下板——————–
material m_tana
add t_side,0,0
_x=a-t_side*2
_z=t_tana
gosub 10
del 1
 
!上板——————–
add t_side,0,zzyzx-t_tana
_x=a-t_side*2
_z=t_tana
gosub 10
del 1
 
!条件式——————
if tateyoko=0 then 100
if tateyoko=1 then 200
!2の場合は横板内の条件式へ
 
!横板——————–
100:
add t_side,0,t_tana/2
y_span=(zzyzx-t_tana*2)/y_step
for i=1 to y_step-1
add 0,0,y_span
_x=a-t_side*2
_z=t_tana
gosub 10
next i
del  y_step
 
!条件式——————
if tateyoko=2 then 200
end
 
!縦板——————–
200:
add t_side/2,0,t_tana
x_span=(a-t_tana*2)/x_step
for i=1 to x_step-1
add x_span,0,0
_x=t_side
_z=zzyzx-t_tana*2
gosub 10
next i
del  x_step
end
 
!サブルーチン—————–
10:
block _x,b,_z
return
 

記事をシェア!
リン・アンド・リンパートナーズ合同会社
1990年 東京電機大学工学部卒業
株式会社CSK入社(現SCSK)、グループ会社の住宅CAD開発会社に転籍
2010年 リン・アンド・リンパートナー合同会社設立
2019年日本工学院八王子専門学校非常勤講師就任
2級建築士、インテリアコーディネーター、住宅性能評価員
ARCHICAD歴 1995年~

コメントを残す

2019 © GRAPHISOFT JAPAN