Grasshopperで体積や面積を求めるときの注意点

Grasshopperで体積や面積を求める際に極端に時間が掛かる場合は下記を参照してください。


立方体の体積を計算している例 (計算に6.3秒かかっています)

VolumeコンポーネントやAreaコンポーネントを使う際、極端に計算が重くなった時まず確認して頂きたいのは
①単位系が適切なものか確認する。(Rhinoのツール>オプション 単位から確認できます。)
②データを原点近くに移動する。
の二点です。

(Grasshopperでそれぞれのコンポーネントに要する時間を表示させるには、Display>Canvas Widgets>Profilerにチェックを入れます。そのコンポーネントの計算に必要な時間と全体のアルゴリズムでの計算時間の%が表示されます。)

何故上記の対策が必要かというとGrasshopperで体積を求めるVolumeコンポーネント(Surface>Analysis)は体積だけでなく、重心の位置などの要素(慣性ベクトルのモーメント、回転半径、二次モーメント)も計算します。
(面積を求めるAreaコンポーネント(Surface>Analysis)も同様に面積だけでなく、中心など他の要素も計算します。)

また単位系が適切ではないと、桁数が大きくなり計算に時間が掛かります。(例・10m×10m×10mの建物はミリメートルだと10,000mm×10,000mm×10,000mm と桁数が非常に大きくなります。)
重心や中心なども原点(0,0,0)から計算するので、原点から距離が遠くなるとその分計算に時間が掛かります。(2D図面から読み込む場合などは特に注意ください。)


単位系とオブジェクトを原点近くに修正したもの(計算にかかる時間が2ミリ秒 0.002秒)

補足として、上記の方法でも速度の改善が見られない場合、以下の方法を試してみてください。


C#コンポーネント(Maths>Script)を使用することで、重心などを計算せず体積だけを求めることも可能です。

 

C#コンポーネント内での記述例 C#コンポーネントの入力をBrepに限定

==========================
if(x != null){
A = x.GetVolume();
}
==========================

キャンバスに配置したC#コンポーネントをダブルクリックし、上記の3行を70行目に追加することで使用可能になります。(グレーで表示されている70行目以外の行は、キャンバスに配置した段階で書いてあるものです。入力端子のxの体積をAから出力するという意味です。)
また上記例では、入力情報をBrepに限定してあります。(C#コンポーネントの入力xの上で右クリック>Type hint>Brep にチェックをいれて設定)


C#で体積を計算した例

面積だけを求めたい場合は、上記のGetVolumeの箇所をGetAreaに変えて
========================
if(x != null){
A = x.GetArea();
}
=====================
とすることで、可能になります。


C#で面積を計算した例