目的・趣旨

4辺からなる閉じた曲線の角を丸くする。
簡単にいえば、四角形の角を丸くする。ただしフィレットではなく、3次曲線で再描画する形。

使用したコンポーネント

  1. Params > Geometry > Curve
  2. Params > Input > Panel
  3. Params > Input > Boolean Toggle
  4. Sets > List > Insert Items
  5. Sets > List > List Item
  6. Curve > Spline > Nurbs Curve
  7. Curve > Util > Explode

解説

全体図はこちら
dividecurve
Rhino上で描いた曲線を入力し、最終的に角が丸く閉じた3次曲線を出力するアルゴリズムです。
Divide Curveで分割点を生成し、始点以外の点をNurbs Curveに入れて描画するだけです。
応用すればボロノイパターンにも使えたりする。

実行するとどんな感じの線ができるのかを3枚の画像で見てみましょう。

1.Rhino上の曲線を格納
bandicam 2016-12-22 19-31-30-462
Rhino上に描いた四角形をCurveコンポーネントに格納します。
その曲線は次のExplodeコンポーネントで4つの曲線に分解します。

2.Divide Curveで分割点を生成
bandicam 2016-12-22 19-31-50-396
Divide Curveコンポーネントで1辺あたり3つの点が生成されるように分割します。
分割した3点のうち、始点を除いた2点のみを、List Itemコンポーネントで抜き出します。
これをしないと、四角形の角に点が2つ重複してしまい、Nurbs Curveが失敗します。

さらにもうひとつ注意点として、Nurbs Curveに入れる点群リストはFlattenにしなければいけません。
なので、Insert Itemコンポーネントの出力はFlattenにしています。
Flatten Treeコンポーネントを挟んでも同じことができます。

3.Nurbs Curveで閉じた3次曲線を描画
bandicam 2016-12-22 19-32-16-716
Nurbs Curveで3次曲線を描きます。
閉じた曲線にするために、入力PにはBoolean ToggleでTrueを入れています。

アルゴリズムは以上です。

おわり

bandicam 2016-12-22 19-37-02-806
今回のアルゴリズムは、一度に複数の曲線を入れて処理することはできませんが、
バカ正直にアルゴリズムを複数コピーすれば、それぞれの曲線を処理できます。
これを見るとイメージ的にはボロノイっぽいものができそうですよね。
(実際やるなら、アルゴリズムを書きかえることをおすすめします)

あと、今回は直線のみで構成された四角形を対象に解説しましたが、
bandicam 2016-12-22 19-43-56-991
曲線もいけます。なんなら4辺じゃなくてもいいです。
bandicam 2016-12-22 19-45-20-099
と、これでこの記事は以上です。

追記(16/12/23)
Cull Indexを使えばもっと簡単にリスト操作できることに気づきました。
Cull Index(カル インデックス)


【書籍PR】Grasshopper入門
【書籍PR】Rhinoceros+Grasshopper建築デザイン実践ハンドブック
【書籍PR】AAD Algorithms-Aided Design. Parametric strategies using Grasshopper