Rhino上でもGrasshopper上でも、オブジェクト(線、面限らず)をjoin(結合)する際に、ほんの少しの離隔が原因でjoin出来なかった経験はありませんか?そんな方は御一読を。今回はミリメートル単位空間上に6枚の面で構成された10m角のボックスを1つ用意し、上面だけ0.1mmわざと浮かしたモデルを用意しました。
一般的な精度ではRhino上でもGrasshopper上でもjoinができない状態ですが(Rhinoの単位精度を極端に低くしている場合はjoin出来る事もあります)、C#で扱えるjoinメソッドではしきい値(許容値)を設定する事ができ、これにより「ある指定した値を下回る離隔は全てjoinしても構わない」という命令を与えることができます。既存のjoinコンポーネントにはないもので知っておくと便利です。(GHver0.9.0076時点)
例えば、初期の3D検討などでは丁寧に作るよりも速さを意識するあまり、作り方も荒く隙間ができがちですが、そういった荒いモデルでも強引に閉じたモデルを作る事ができ、体積や面積を測り易くなるかもしれません。もしうまくjoin出来ていない場合、体積の計算にも影響が現れ、上記画像のようにvolumeコンポーネントの計算時間にまで影響が出る事もあるので注意が必要です。
これをC#で書くには以下のようにしますが、まずは入力値の事前設定についてです。
brepやtolはどんな単語に置き換えても構いません。次に書き込むコードについてです。(コンポーネントの黒い帯部分を右クリック→Edit Source・・・を選択)
70行目に1行だけ書き足しています。その他は最初から既に書かれているものです。
A = Brep.JoinBreps(brep, tol);
C#は大文字と小文字を厳密に分けますので、上記に書かれているBrepとbrepは似て非なるものですので注意が必要です。今回は、BrepクラスのJoinBrepsというstaticメソッドを利用しています。
細かな事を言うと色々ありますが、以上の内容で必要な動作はしてくれます。
似たようなもので、CurveJoinについても以下に書きます。C#にて線のjoinを利用したい場合は以下のように書いて下さい。
今回は、カーブをjoinするので、brepではなくcrvと書き換えました。crvの右クリックメニューの型指定にはBrepではなく、Curveを選択して下さい。
ghファイルも添付していますので参考まで。
コメントをするにはログインしてください。