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

GDLオブジェクト

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

ブログ アーカイブ

自己紹介

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

QooQ