ArchiCAD GDLを学習 〜椅子①〜

2024年8月19日月曜日

cylind GDL gosub tube 椅子

t f B! P L

ArchiCAD GDLで椅子をつくてみる①

前回までの内容で簡単な机を作成しました。今回は、それに椅子を追加していこうと思います。イメージしているのは、画像のような丸パイプ椅子です。なお、下記のコードはこれまでに作成した机GDLの3Dスクリプトを gosub コマンドを使って少し改変したものです。
丸パイプ椅子イメージ
完成予想図

パラメータリスト
パラメータリスト

3Dスクリプト
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つ並べることが可能です。

GDL練習
gosubで2回"desk"を呼び出す
unid = 1
material mat

gosub "desk"
add width + 0.1, 0, 0
gosub "desk"

end 

"desk":
	~机の3Dスクリプト~(省略)
return

gosub コマンドを使うときは、end コマンドでスクリプトの終わりを定義する必要があります。また、ラベル("desk")を定義した後には、return コマンドを使って、そのラベルの終わりを定義する必要があります。

なお、ラベルは end コマンド以降に定義する必要があるため、順番を間違えないように注意してください。


パイプ椅子の作成とTUBEコマンド

続いて、パイプ椅子を作っていきます。ここから少し複雑になってきますが、慣れてくれば簡単なので、妥協せずに頑張りましょう。まず、条件を整理するために以下のような図を作成しました。

GDL作成のためのイメージ図
条件の整理

これを元にパラメータを新規追加し、コードを書いていくと以下のようになります。
GDL学習パラメータリスト
新規追加パラメータ
"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 
完成イメージ
GDL学習
かなり長くなってしまいましたが、次回はこれを色々細かく調整していこうと思います。


なお、基本的なGDLの学習はこちらの教材がおすすめです!
GDLリファレンスがgraphisoftが用意していますが、初見では理解しづらいので、
簡単にまとめられたやさしく学ぶArchiCAD GDLプログラミングという本で基礎をしっかり学びましょう!


また、ココナラでのサポートサービスも始めましたので、
ご活用いただければと思います。
1日GDL作成やArchiCAD関連の相談のります 自分でGDLを作成している方へ


【お知らせ】
Xのアカウントを作成しましたので、ぜひフォロー頂けると嬉しいです。
アカウントはこちらから⇨https://x.com/BIM_arekore

世界の建設業従事者、BIM推進者と繋がりたいです。よろしくお願いします。

検索

最新記事

多角形GDLに機能を追加してみる②

GDLオブジェクト

UI (1) ユニーク (1) 椅子 (4) 仮囲い (6) (7) 小ネタ (3) 足場 (15) 足場計画 (4) 多角形 (3) 法規 (1) 無償DL (4)

ブログ アーカイブ

自己紹介

自分の写真
GDL作成などBIM活用のお仕事の相談お待ちしております。 #中堅ゼネコン出身 #施工管理職 #生産設計部 #BIM開発部門
ArchiCADのGDLをコスパよく作成します ArchiCADユーザーでGDL作成を外部委託されている方へ

QooQ