archicad GDLで断面形状を呼び出してみる

2025年5月13日火曜日

request 小ネタ 断面形状

t f B! P L
いちいち形状の座標値をGDLで記述するのって面倒臭くないですか??
下の画像はtubeコマンドを使用した例ですが、これをみてもどんな形状を表しているのか分からないと思います。そこでもっと簡単に形状を管理できないか考えていました。

tubeコマンドの実装例

そもそもArchicadには断面形状マネージャーという便利な機能があるじゃないかと思い、GDLで断面形状を呼び出す方法を探しました。
意外と簡単に実装できましたので、今回はそれを共有できればと思います。まずは以下のスクリプトを確認してみてください。

マスタースクリプト
dim geom_info[]

n = REQUEST ("Profile_components",  profile_index, _nComp,_componentTypes)
n = REQUEST ("Profile_default_geometry", profile_index,geom_info)


num_x = _nComp + 1
num_y = _nComp + 2
num_s = _nComp + 5

for i=1 to _nComp
	n = REQUEST{4} ("Profile_component_info", profile_index, i, "gs_profile_bmat",_bmat)	!!!構成要素の材質
	n = REQUEST{4} ("Profile_component_info", profile_index, i, "gs_profile_outlinepen",_pen)	

	for j=1 to geom_info[i]
		PUT geom_info[num_x], geom_info[num_y], geom_info[num_s]
		num_x = num_x + 5
		num_y = num_y + 5
		num_s = num_s + 5
	next j

	put pos[1][1] - (pos[2][1]-pos[1][1])	, pos[1][2] - (pos[2][2]-pos[1][2])	, pos[1][3] - (pos[2][3]-pos[1][3])	,0
	put pos[1][1]							, pos[1][2]							, pos[1][3] 						,0
	put pos[2][1]							, pos[2][2]							, pos[2][3] 						,0
	put pos[2][1] + (pos[2][1]-pos[1][1])	, pos[2][2] + (pos[2][2]-pos[1][2])	, pos[2][3] + (pos[2][3]-pos[1][3])	,0

	BUILDING_MATERIAL _bmat,_pen,1,1
	tube geom_info[i], 4, 1+2+16+32, get(NSP)

next i

hotspot 0			,pos[1][2]	,pos[1][3]	,unID,pos[1][1],1+128 :unID=unID+1		!BASE
hotspot pos[1][1]	,pos[1][2]	,pos[1][3]	,unID,pos[1][1],2	 	:unID=unID+1	!MOVE
hotspot -1			,pos[1][2]	,pos[1][3]	,unID,pos[1][1],3		:unID=unID+1	!REF

hotspot pos[1][1]	,0			,pos[1][3]	,unID,pos[1][2],1+128 :unID=unID+1		!BASE
hotspot pos[1][1]	,pos[1][2]	,pos[1][3]	,unID,pos[1][2],2	 	:unID=unID+1	!MOVE
hotspot pos[1][1]	,-1			,pos[1][3]	,unID,pos[1][2],3		:unID=unID+1	!REF

hotspot pos[1][1]	,pos[1][2]	,0			,unID,pos[1][3],1+128 :unID=unID+1		!BASE
hotspot pos[1][1]	,pos[1][2]	,pos[1][3]	,unID,pos[1][3],2	 	:unID=unID+1	!MOVE
hotspot pos[1][1]	,pos[1][2]	,-1			,unID,pos[1][3],3		:unID=unID+1	!REF

hotspot 0			,pos[2][2]	,pos[2][3]	,unID,pos[2][1],1+128 :unID=unID+1		!BASE
hotspot pos[2][1]	,pos[2][2]	,pos[2][3]	,unID,pos[2][1],2	 	:unID=unID+1	!MOVE
hotspot -1			,pos[2][2]	,pos[2][3]	,unID,pos[2][1],3		:unID=unID+1	!REF

hotspot pos[2][1]	,0			,pos[2][3]	,unID,pos[2][2],1+128 :unID=unID+1		!BASE
hotspot pos[2][1]	,pos[2][2]	,pos[2][3]	,unID,pos[2][2],2	 	:unID=unID+1	!MOVE
hotspot pos[2][1]	,-1			,pos[2][3]	,unID,pos[2][2],3		:unID=unID+1	!REF

hotspot pos[2][1]	,pos[2][2]	,0			,unID,pos[2][3],1+128 :unID=unID+1		!BASE
hotspot pos[2][1]	,pos[2][2]	,pos[2][3]	,unID,pos[2][3],2	 	:unID=unID+1	!MOVE
hotspot pos[2][1]	,pos[2][2]	,-1			,unID,pos[2][3],3		:unID=unID+1	!REF

profile_components

3行目のようにRequestコマンドを用いて、第一パラメータに"profile_components"という文字列を指定し、第二パラメータに断面形状の名前もしくはインデックスを指定すると、断面形状の総数及び、構成要素のタイプを取得できます。(リファレンスではこの構成要素をコンポーネントと表現しています。)
断面形状の総数とは、下の画像のように数えることができます。下の場合は砕石、捨てコン、基礎コンの3つから構成されているので、総数は3となります。
断面形状
断面形状の構成

また、構成要素のタイプとは、躯体・仕上げ・その他のいずれかを断面形状マネージャーから設定したものになります。

profile_default_geometry

続いて4行目では、第一パラメータに"profile_default_geometry"を指定しています。このリクエストは断面形状の形状データを返してます。返ってくるデータは配列形式で、各コンポーネントの頂点数、頂点座標、輪郭の表示設定や、追加ステータスコードなどが含まれています。やや複雑ですが、上記のスクリプトを参考にしてどのようなデータ構成になっているのかを確認してみてください。

Profile_component_info

このリクエストは、各コンポーネントの属性値を返してくれるものです。属性値とはビルディングマテリアルや材質、ペン設定などです。上記スクリプトではビルディングマテリアルとペン設定をリクエストしています。
その他についてはリファレンスで確認できますので、気になる方はそちらをご確認いただければと思います。

まとめ

これらの情報を用いて、putコマンドやgetコマンド、tubeコマンドで形状を作成したものが以下の画像になります。
断面形状
GDLで断面形状を呼び出し

任意の2点にhotspotを追加して、自由にコントロールできるようにしてみました。
ちなみにパラメータタイプを断面形状にしておけば、好きな断面形状に変更可能です。
便利ですので是非試していただければと思います。

パラメータタイプ
パラメータタイプの設定

今回は以上となります。

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

Xのアカウントもありますので、ぜひフォロー頂けると嬉しいです。
アカウントはこちらから⇨https://x.com/BIM_arekore

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


自己紹介

自分の写真
普段はBIM界隈で働いております。皆さんに役立つ情報を提供できればと思っております。BIMマネやBIMオペ、開発、プログラミング、BIMコンサル、技術営業等様々な業務をおこなっております。 #施工管理 #生産設計 #BIM開発 #ソフトウェアベンダー #ArchiCAD API #GDL #ArchiCAD python #Revit API #Dynamo

メール

bim.arekore@gmail.com

検索

最新記事

archicad GDLで断面形状を呼び出してみる

GDLオブジェクト

ブログ アーカイブ

ArchiCADのGDLをコスパよく作成します ArchiCADユーザーでGDL作成を外部委託されている方へ

QooQ