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に機能を追加してみる②

GDLオブジェクト

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

ブログ アーカイブ

自己紹介

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

QooQ