前回の記事で多角形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推進者と繋がりたいです。よろしくお願いします。
0 件のコメント:
コメントを投稿
何でも気軽にコメントください。