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

2024年12月13日金曜日

define GDL sqr 多角形

t f B! P L
前回の記事で多角形GDLというものを作成してみました。
今回はそれに機能を追加していこうと思います。

線の長さ表示

下の画像のように書く線に長さを表示したいと思います。
lengthという配列の長さパラメータを用意し、マスタースクリプトで計算します。

長さ表示機能


長さの計算は三平方の定理で求めますが、sqrという平方根を返してくれるコマンドを使用しています。afterは基本i+1を意味しているが、最後の辺だけは、最後の頂点と最初の頂点から計算するので、if文でコントロールしています。

マスタースクリプト
for i=1 to vertices
	x[i]=x[i]
	y[i]=y[i]	
next i

for i=1 to vertices
	if i=vertices then
		after=1
	else
		after=i+1
	endif
	length[i]=sqr((x[after]-x[i])**2+(y[after]-y[i])**2)
next i

parameters \
x=x,
y=y,
length=length


2Dスクリプトでは、define styleで文字のフォントやサイズ、配置位置などを定義し、
text2コマンドで長さを表示させています。
表示させる位置は、各辺の中心にくるように座標計算しています。
長さはstrコマンドを使って、長さタイプの値を文字列タイプに変換することで、text2コマンドで使うことができます。


2Dスクリプト
DEFINE STYLE "test" "New York", 2, 5, 0
SET STYLE "test"

unID=1

for i=1 to vertices
	hotspot2 0	 , y[i], unID, x[i], 1+128	:unID=unID+1
	hotspot2 x[i], y[i], unID, x[i], 2		:unID=unID+1
	hotspot2 -1	 , y[i], unID, x[i], 3		:unID=unID+1

	hotspot2 x[i], 0   , unID, y[i], 1+128	:unID=unID+1
	hotspot2 x[i], y[i], unID, y[i], 2		:unID=unID+1
	hotspot2 x[i], -1  , unID, y[i], 3		:unID=unID+1

	if i=vertices then
		after=1
	else
		after=i+1
	endif

	if sqr((x[after]-x[i])**2+(y[after]-y[i])**2)>0 then
		line2 x[i], y[i], x[after], y[after]
		text2 (x[after]-x[i])/2+x[i], (y[after]-y[i])/2+y[i], str(length[i]*1000, 5,0)
	endif
next i

今回は以上になります。
このような仕組みは、様々な部分に応用できそうですね!
次回も機能を追加していきたいと思います。

なお、基本的な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