ArchiCAD GDLを学習 〜椅子③〜

2024年8月22日木曜日

GDL get gosub put tube 椅子

t f B! P L

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

今回は、前回前々回で作成した椅子を修正していこうと思います。具体的には、tube コマンドで作ったパイプ椅子の脚を、もっと滑らかに曲げる方法に挑戦してみたいと思います。下の画像を見るとわかるように、現状の tube コマンドの使い方だと角が付いてしまいますし、サインやコサインを使っている部分が煩雑なので、これらを整理していきます。
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_size = 0.01
	pipe_pos = chair_size/2 + 0.03
	pipe_height = chair_height - 0.03
	
	material chair_pipe_mat

	rotz 45
	gosub "chair_pipe"
	rotz 90
	gosub "chair_pipe"
	rotz 90
	gosub "chair_pipe"
	rotz 90
	gosub "chair_pipe"
	del 4


	material chair_mat
	add 0, 0, chair_height - 0.03/2
	cylind 0.03/2, chair_size/2
	del 1

	end
return

"chair_pipe":
	d = pipe_size*4

	tube 2, 4, 1+2+16+32+64,
		0, 0, 900,
		pipe_size, 360, 4000,
		pipe_pos, 0, -1, 0,
		pipe_pos, 0, 0, 0,
		pipe_pos, 0, pipe_height - d, 0,
		pipe_pos, 0, pipe_height, 0
	
	tube 2, 4, 1+2+16+32+64,
		0, 0, 900,
		pipe_size, 360, 4000,
		pipe_pos, 0, pipe_height, 0,
		pipe_pos - d, 0, pipe_height, 0,
		0, 0, pipe_height, 0,
		-1, 0, pipe_height, 0

		add pipe_pos - d, 0, pipe_height - d
		gosub "chair_pipe_corner"
		del 1
return

"chair_pipe_corner":
	div = 8
	put d, 0, -1, 0
	for i = 0 to div
		put d*cos(90*(i/div)), 0, d*sin(90*(i/div)),0
	next i
	put -1, 0 , d, 0

	tube 2, div + 3, 1+2+16+32+64,
		0, 0, 900,
		pipe_size, 360, 4000,
		get((div+3)*4)
return

FOR文、PUTコマンド、GETコマンド

今回のコードでは、下の画像のようにパイプ部分を1、2、3に分けて考えています。どれも tube コマンドで作成していますが、2("chair_pipe_corner" ラベル内)だけは put コマンドと get コマンド、それから for 文を使っています。

for 文は繰り返し処理のコマンドで、i=0 から 9 まで繰り返すことで90度の扇型を分割し、円に近似した多角形を作り、パイプ椅子のコーナー部分を表現しています。通常の tube コマンドの使い方で書くと、座標値を11行分記述しなければなりませんが、put コマンドを使うと内部バッファに値を格納し、get でその値を順番に呼び出すことができます。そのため、for 文を使う場合や頂点数が可変の場合は、put  get を使うことで、さまざまな3D形状コマンドに柔軟に対応できます。

3D形状を分割して考える

もう少し詳しい図を以下に貼り付けてみました。このようなイメージでコードは書かれています。
円弧上の座標

完成したGDLは下の画像のようになります。しっかりと曲線に近い状態で3D形状が作成されています。

このように、座標の計算次第でさまざまな形を作成できるので、ぜひいろいろなアイデアを形にしていきましょう。

PUTコマンド



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


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


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

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


検索

GDLオブジェクト

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

ブログ アーカイブ

自己紹介

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

QooQ