[:ja]このGrasshopperでチェーン構造のバッグをつくるシリーズも中盤です。
だと思います。。
前回メッシュをBrepに変換出来たので、今回は、三角ピースをチェーンで繋げるためのジョイント部分をつくっていきます。
まず、最初の方に作成したMesh Exprodeコンポーネントのところまで戻ります。
このコンポーネントで、ベースとなるメッシュを分解しました。
一つ一つの三角メッシュが格納されている状態です。
次に、Sets>>List>>List Itemコンポーネントを選択します。
↓図のように接続します。
すると、一つの三角メッシュが現れました。
これは、List Itemコンポーネントのi(Index)にデフォルトで0が入力されているため、0項目のメッシュが抽出されたということです。
次に、weaverbird’s Face Polylineコンポーネントを選択します。
↓図のように接続します。
これで、一つの三角メッシュのアウトラインが取れました。
次に、Curve>>Util>>Explodeコンポーネントを選択し、三角形のアウトラインを3本の線に分解します。
次に、List Itemコンポーネントを3つ複製し、右クリックして、それぞれのi(Index)に0、1、2を入力します。
3本の線を1本づつ識別させるためです。
ここから、この3本の線を利用してジョイント等を配置する平面を作っていきます。
↓図に描くとこんな感じです。
面ABCに平行で、それぞれの線分に対してY軸が垂直に交わる平面を、各線分の中点に配置していきます。
そして、作成した各平面にBrepを置いてブール演算で削ったり、ひっつけたりするといった感じです。
まず、Curve>>Analysis>>Polygon Centerコンポーネントを選択します。
このコンポーネントは、ポリラインの中点を抽出します。
次に、先ほど三角形の各線を識別させるために作ったList Itemコンポーネント3つを複製し、Polygon Centerコンポーネントに接続します。
これで、各中点も識別できるようになりました。
次に、Vector>>Plane>>Construct Planeコンポーネントを選択します。
このコンポーネントは、原点とX、Y軸から平面を出力します。
図で描いたように、三角形の面と平行した平面が欲しいので、原点を各線の中点として、任意の2辺をConstruct PlaneコンポーネントのX、Yに割り当てます。
(三角形は任意の2辺がわかれば面が出せるので)
↓図のように接続すると、原点が中点で、線分に対してy軸が垂直に交わる平面が出来ました。
↓図のように接続して、すべての辺に対して平面を出力します。
次に、Transform>>Euclidean>>Orientコンポーネントを選択します。
このコンポーネントは、Aのソースとなる平面(デフォルトではワールド平面)にあるGのオブジェクトをBのターゲット平面に配置します。
↓図のように接続します。
これで、ターゲットが先ほど作成した各平面になります。
Aのソースとなる平面は、デフォルトのままでワールド平面にします。
ちょっとテストしてみます。
ワールド平面の原点に図のような立方体を作成してみました。
BrepコンポーネントをOrientコンポーネントのGに接続し、右クリックからSet one Brepを選びます。
先ほど作成した立方体を選択します。
↓問題なく配置されました。
とりあえず一つ出来たので、これをすべての三角メッシュに反映していきます。
最初の方に作ったList Itemコンポーネントまで戻ります。
このList Itemコンポーネントは、i(Index)がデフォルトの0のまま使用していたので、出力された三角形が一つでした。
List Itemコンポーネントを右クリックして、Set Multiple Integersを選びます。
複数の数値を入力できるウィンドウが現れるので、こちらに数値を入力していきます。
PanelコンポーネントでMesh Exprodeコンポーネントを調べてみると、0〜172項目、合計173個の三角メッシュがありました。
先ほどのSet Multiple Integersに0〜172まで入力します。
(Excelとかで連番作ってペーストすると楽です)
↓こんな感じなりました。
↓立方体を配置するとこんな感じです。
↓とりあえずBakeしてみました。
ベースになる平面が出来たので、これを使って三角ピースのフチを切り取ったり、穴を作ったりなど色々出来るようになりました。
次回は、実際にジョイントパーツを作っていこうと思います。[:en]今日は、前回モデリングしたお皿をベースにGrasshopperを使ってボロノイ化させていきます。
STEP.02【お皿をGrasshopperに読み込ませる】
まず、Rhinocerosを開いて、Grasshopperを立ち上げます。
次に、FileからNew Documentを選択して新規ファイルを作ります。
ParamsタブのGeometry内のBrepコンポーネントを選択します。
Brepコンポーネントはサーフェースやポリサーフェース等を格納するコンポーネントです。読み方分かんなかったんですが、偉い人たちはびーれっぷと言っていました。
Brepコンポーネントにお皿を読み込ませます。
右クリックして、Set one Brepを選択します。
Rhinocerosの画面に切り替わるので、お皿を選択します。
選択すると、こんな画面になるかと思います。
見づらいので、一旦ここでお皿のモデルは非表示にします。
(オブジェクトを非表示ツールを使用します)
お皿モデルが消えて、赤い半透明のものが残りました。
この赤いものは、先ほどのBrepコンポーネントがお皿のモデルを格納したということです。
このBrepを元にボロノイ化させていきます。
次に、Vevtor→Grid→Populate Geometryコンポーネントを選択します。
(何もない部分をダブルクリックするとショートカットの検索ウィンドウが現れます。下記画像参照)
先ほどのBrepの右端と、Populate GeometryのGを繋げます。
すると、点がたくさん現れました。
このPopulate Geometryコンポーネントは、先ほど指定したBrepの形状をジオメトリとして取得し、ランダムに点を発生させます。
点の数を調整してみましょう。
Number Sliderコンポーネントでスライダーを作成します。
ダブルクリックでショートカットを表示させ、任意の数字を打つと
自動的にNumber Sliderコンポーネントが作成されます。
スライダーを2つ作成し、それぞれPopulate Geometryコンポーネントの
NとSに繋ぎます。
すると、自動的にスライダーの名前がCountとSeedに変わりました。
Countは、発生させる点の数、Seedは乱数生成の元となる値です。(僕は難しいことは分からないのでランダム具合と呼びます)
少しスライダーをいじってみます。
Countを87、Seedを4にしてみました。
点の数が変わりましたね。
Seedはいじってもらうと分かるのですが、ランダム具合が変わります。
とりあえずここは、Countを15、Seedを4にしておきます。
次に、Params→Geometry→Pointコンポーネントを使います。
Populate GeometryコンポーネントとPointコンポーネントを繋げます。
Pointコンポーネントは点を格納するコンポーネントです。
Params→Input→Panelコンポーネントを使うと、先ほどの点群の座標値が分かります。
Countを15にしたので15個分です。
このPanelは確認用で、今回はあまり関係ないので消します。
次は、この15個の点をもとにボロノイ分割をします。
Mesh→Triangulation→Voronoi 3Dコンポーネントを選択します。
先ほどのPointコンポーネントをVoronoi 3DコンポーネントのPに繋げると
ボロノイ分割されました!
15の点を母点としたボロノイです。
(スライダーのCount、Seedを変更するとここのボロノイ分割も変わります。)
でも、なんか勝手に立方体出来てますね。
これは、先ほどの15の点を持つ最大外形の立方体です。
ボロノイ分割するための母点は入力されましたが、まだどれくらいの範囲を分割するかのボリュームが入力されていません。
そこで、Params→Geometry→Boxコンポーネントでボリュームを指定してあげます。
Boxコンポーネントを右クリックして、Set one Boxを選択します。
すると立方体作成モードに切り替わるので、3点を指定して立方体をつくります。
ここでポイントですが、お皿(Brep)の大きさよりも大きい立方体をつくります。(後述します)
こんな感じになりました。
立方体が出来たら、BoxコンポーネントをVoronoi 3DコンポーネントのBに繋げます。
気持ち悪い模様になりました。
これは、Boxコンポーネントが格納した立方体とVoronoi 3Dコンポーネントが格納した立方体が重なっている状態です。
見づらいので、Boxコンポーネントを右クリックして、Previewを消しましょう。
気持ち悪いのが消えましたね。
これでボロノイ分割するための母点と、ボリュームが指定されました。
なんかそれっぽくなってきましたね!
今日はこのへんで、、
[:]