目的・趣旨
4辺からなる閉じた曲線の角を丸くする。簡単にいえば、四角形の角を丸くする。ただしフィレットではなく、3次曲線で再描画する形。
使用したコンポーネント
- Params > Geometry > Curve
- Params > Input > Panel
- Params > Input > Boolean Toggle
- Sets > List > Insert Items
- Sets > List > List Item
- Curve > Spline > Nurbs Curve
- Curve > Util > Explode
解説
全体図はこちらRhino上で描いた曲線を入力し、最終的に角が丸く閉じた3次曲線を出力するアルゴリズムです。
Divide Curveで分割点を生成し、始点以外の点をNurbs Curveに入れて描画するだけです。
応用すればボロノイパターンにも使えたりする。
実行するとどんな感じの線ができるのかを3枚の画像で見てみましょう。
1.Rhino上の曲線を格納
Rhino上に描いた四角形をCurveコンポーネントに格納します。
その曲線は次のExplodeコンポーネントで4つの曲線に分解します。
2.Divide Curveで分割点を生成
Divide Curveコンポーネントで1辺あたり3つの点が生成されるように分割します。
分割した3点のうち、始点を除いた2点のみを、List Itemコンポーネントで抜き出します。
これをしないと、四角形の角に点が2つ重複してしまい、Nurbs Curveが失敗します。
さらにもうひとつ注意点として、Nurbs Curveに入れる点群リストはFlattenにしなければいけません。
なので、Insert Itemコンポーネントの出力はFlattenにしています。
Flatten Treeコンポーネントを挟んでも同じことができます。
3.Nurbs Curveで閉じた3次曲線を描画
Nurbs Curveで3次曲線を描きます。
閉じた曲線にするために、入力PにはBoolean ToggleでTrueを入れています。
アルゴリズムは以上です。
おわり
今回のアルゴリズムは、一度に複数の曲線を入れて処理することはできませんが、
バカ正直にアルゴリズムを複数コピーすれば、それぞれの曲線を処理できます。
これを見るとイメージ的にはボロノイっぽいものができそうですよね。
(実際やるなら、アルゴリズムを書きかえることをおすすめします)
あと、今回は直線のみで構成された四角形を対象に解説しましたが、
曲線もいけます。なんなら4辺じゃなくてもいいです。
と、これでこの記事は以上です。
追記(16/12/23)
Cull Indexを使えばもっと簡単にリスト操作できることに気づきました。
Cull Index(カル インデックス)
【書籍PR】Grasshopper入門
【書籍PR】Rhinoceros+Grasshopper建築デザイン実践ハンドブック
【書籍PR】AAD Algorithms-Aided Design. Parametric strategies using Grasshopper
コメント