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

2024年12月16日月曜日

acs GDL 多角形

t f B! P L
前回の記事で多角形GDLに各辺の長さを追加してみました。
今回はそれに角度の機能を追加していこうと思います。
下の画像は、頂点に角度を表示し、確認としてArchicadの寸法ツールで角度を測っている様子です。緑の文字と青い文字の数値がしっかり一致していることがわかるかと思います。


角度の表示

角度の計算

今回の角度の求め方は、ベクトルの内積と外積を用いました。
内積の計算でアークコサインより角度を求め、外積で向きを求めています。
そのコードを下記に示します。

マスタースクリプト
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

for i=1 to vertices
	if i=1 then
		i1=vertices
	else
		i1=i-1
	endif

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

	!ベクトルの成分
	ax=x[i2]-x[i]
	ay=y[i2]-y[i]
	bx=x[i1]-x[i]
	by=y[i1]-y[i]

	!内積から角度を求める
	t=acs((ax*bx+ay*by)/(sqr(ax**2+ay**2)*sqr(bx**2+by**2)))

	!外積から向きを求める
	if ax*by-ay*bx >= 0 then
		angle[i]=t
	else
		angle[i]=360 - t
	endif
next i

parameters angle=angle

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]
		hotline2 x[i], y[i], x[after], y[after], unID	:unID=unID+1

		!長さ表示
		text2 (x[after]-x[i])/2+x[i], (y[after]-y[i])/2+y[i], str(length[i]*1000, 5,0)

		!角度表示
		text2 x[i], y[i], str(angle[i], 3, 2)
	endif
next i

動きの確認

今回の機能は下の動画より確認できます。
角度による判定が必要な状況(例えば、入隅出隅判定など)ではこのようなプログラムが必要になったりしますので、是非試してみてください。



今回は以上となります。
最近は、より汎用的な基本プログラムに重点を置いてブログを書いています。
次回も機能を追加していきたいと思います。

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

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


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

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

自己紹介

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

メール

bim.arekore@gmail.com

検索

GDLオブジェクト

ブログ アーカイブ

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

QooQ