Grasshopperでジオメトリの面積を出す際に使われるAreaコンポーネント。
例えば大量のパネルの面積計算をする際に、C#コンポーネントで1行のコードを書いたオリジナルAreaコンポーネントを利用すると、従来のものを利用するよりもグッと速い計算時間を実現できます。試しに、1300枚程度のパネルを計算してみました。
上から既存のもの(Area)、Python(アドオン)で書いたもの(Py_Area)、C#で書いたもの(C#_Area)、それぞれで計算したものを並べています。面積計算結果は全て同じですが計算速度について、C#_Areaが他に比べ10倍ほど速い結果になりました。(これとは別にシンプルな平面を同じように試してみたところ、同様にC#_Areaが他より2~3倍程度速い結果が出ました。)
要因としては、既存のAreaは面積計算と一緒に各面のの中心点を求める計算も同時にしており、この計算に時間が掛かっています。Py_Areaも同様に副産物的に他のパラメータを同時計算している事が計算時間の要因かと考えられます。
C#_Areaの書き方を説明します。まずは、以下の画像のように事前に型の設定をします。
その後、C#コンポーネントのメニュー(黒い帯部分を右クリック→Edit Source・・・を選択)からコードエディタを開き、以下のように1行書き込む事で計算が機能します。(70行目以外のコードはあらかじめ記述されています。)
"A = geo.getArea();"について、
geoは計算対象(インプットしたデータが格納されています)、
geoの後ろのドットは言葉で例えると格助詞の“の”に該当するもの、
getArea()は面積を計算するためのコード(メソッド)、
最後のセミコロンは句点のようなもので、C#では一つの文を書いた後はセミコロンで区切る必要があります。あまり難しく考えず、そういうものだと思っておけば良いでしょう。
A= としているのは「計算結果をアウトプットAに出力(代入)します」、と理解して頂くと良いでしょうか。これを書かないと、計算はしているのにコンポーネントの出力側にデータが表示されませんので注意が必要です。
補足知識として、以下のようにコードを書き足すとgeoに何かが繋がっている時のみ計算させる事が出来ます。(なくても動作はしてくれます。)
これは、「もし、geoの中身がnull(空っぽ、何もない)ではない場合(!=はノットイコールの意味)のみ、{}内の計算をしなさい。」という意味になります。今回、{}内には先ほどのA = geo.getArea();を記述しています。
コメントをするにはログインしてください。