Grasshopperでチェーン構造のバッグをつくる【その5】

By 11/05/2017 All posts, Tips
[:ja]前回のつづきになります。
前回、三角ピースのエッジに穴を開けて棒をつけたので今回は、その部分を繋ぐチェーンを作っていきます。

チェーンをモデリングする前に、まずチェーンを配置するための平面を作ります。
イメージはこんな感じです↓
隣接する三角メッシュの角度の平均をとった平面を、各エッジに対して垂直に配置します。

↓図の部分まで戻ります。
これら3つのコンポーネントは、オリジナルのメッシュを点とエッジに分解したものになります。
3つのコンポーネントを複製します。

次に、List Itemコンポーネントを選択します。

List Itemコンポーネントを4つ複製し、それぞれのi(Index)に、0,1,2,3を入力します。
これらのList ItemコンポーネントExplodeコンポーネントVに接続します。

Surface→Freeform→4Point Surfaceコンポーネントを選択します。
このコンポーネントは、3つもしくは、4つのコーナーポイントから面を作成します。(今回は、三角メッシュなので、先ほどのList itemコンポーネントの4番目はなくても面は作成されます)

図のようにList Itemコンポーネントを接続します。
これで三角メッシュがすべて三角の面(サーフェース)に変換されました。

4Point SurfaceコンポーネントBakeします。

分かりやすくするためにレイヤーを分けます。

次に、サーフェースを利用して、隣接した2つのメッシュの平均角度の平面を作っていきます。
まず、Surfaceコンポーネントを選択します。

次に、Curveコンポーネントを選択します。

次に、Surfaceコンポーネントを複製します。
この2つのSurfaceコンポーネントに隣接する三角サーフェースを入力し、Curveコンポーネントに隣接するエッジを入力します。

Surfaceコンポーネントを右クリックして、Set one Surfaceで任意のサーフェースを選択します。
同じようにもう一つのSurfaceコンポーネントにサーフェースを入力します。
この時、1番目に選択したサーフェースに隣接するサーフェースを選択します。

次に、Curveコンポーネントを右クリックして、Set one Curveで隣接するエッジを選択します。

↓こんな感じになりました。

次に、Surface→Analysis→Areaコンポーネントを選択します。
このコンポーネントは、Brepmesh等の面積を評価します。
AreaコンポーネントAは面積、Cはエリアの中心を出力します。

↓図のようにそれぞれのSurfaceコンポーネントに接続します。

次に、Curve→Analysis→Point On Curveコンポーネントを選択します。
このコンポーネントは、線上の入力した数値の位置に点を出力します。
今回は中点が欲しいので0.50と入力します。

次に、Pointコンポーネントを選択し、Point On Curveコンポーネントに接続します。

↓図のように、三角形の中心点と隣接するエッジの中点が出力できました。

次に、Vector→Vector→Vector 2Ptコンポーネントを選択します。
このコンポーネントは、ABに入力された2点間のベクトルを作成します。

↓図のように接続します。

接続してもベクトルは画面上に表示されないので、Display→Vector→Vector Displayコンポーネントを選択します。

↓図のように接続します。
Vに接続した各Vector 2PtコンポーネントV(Vector)が、エッジの中点を起点に出力されています。

次に、Vector→Vector→Unit Vectorコンポーネントを選択します。
このコンポーネントは、ベクトルを分類します。

Unit Vectorコンポーネントを複製し、↓図のように接続します。

次に、Vector→Vector→Amplitudeコンポーネントを選択します。
このコンポーネントは、ベクトルの長さを設定します。
デフォルトでは長さは1.0になっています。
とりあえずこのままにしておきます。

Amplitudeコンポーネントを複製し、↓図のように接続します。

次に、Vector→Vector→Reversコンポーネントを選択します。
このコンポーネントは、ベクトルの方向(+-)を反対にします。

↓図のように接続します。
Vector Displayコンポーネントに接続してみると、ベクトルの向きが反対になっているのが分かります。

次に、Maths→Operators→Aditionコンポーネントを選択します。
このコンポーネントは、ABの足し算を行います。

↓図のように接続します。
エッジの中点からベクトルに沿って1.0mmの距離に点が配置されました。

Aditionコンポーネントをそれぞれ複製し、AmplitudeコンポーネントVと接続します。

図のようにPointコンポーネントと接続すると、サーフェースに沿った点と、それに反転した点がそれぞれ出力されました。

次に、Curve→Analysis→Point in Curveコンポーネントを選択します。
このコンポーネントは、閉じられた曲線に格納された点を調べます。
今回の場合は、この三角のサーフェース上にある点か、そうでないかを調べます。

次に、Surface→Analysis→Deconstruct Brepコンポーネントを選択します。
このコンポーネントは、Brepの構成要素を分解します。
このコンポーネントで、Point in Curveコンポーネントに必要な線を取得します。

↓図のように接続します。
これで一つの三角サーフェースの要素が分解されました。

次に、Curve→Util→Join Curvesコンポーネントを選択します。
このコンポーネントで、分解されたエッジを繋げ閉じた曲線(三角形)にします。

↓図のように接続します。

Panelコンポーネントで調べてみると↓図のようになります。
Point in CurveコンポーネントR0項目21項目0という数字がありますが、0と表示されている項目は曲線の外に、2と表示されている項目は曲線内にあるという意味です。

次に、Sets→List→Sort Listコンポーネントを選択します。
このコンポーネントは、入力されたリストを大きい順に並べ替えます。
Aには、Kに入力されたデータと同じ数値のリストを入力すると、Kと同様に並べ替えられ出力されます。

↓図のように接続します。

List ItemコンポーネントSort ListコンポーネントAに接続します。

List Itemコンポーネントi(index)はデフォルトで0なので、0項目の曲線外の点が選択されました。

↓もう一方のPointコンポーネントにも同様にコンポーネントを接続していきます。

次に、Curve→Division→Perp Framesコンポーネントを選択します。
このコンポーネントは、線上に等間隔に法線に沿った平面を作成します。

Curveコンポーネントと接続します。
平面が現れました。

Perp FramesコンポーネントNを右クリックして、Set Integer2を入力します。
このNは分割数でこの数値で平面の数が変わります。

↓図のようになりました。

List Itemコンポーネントを選択します。
この3つの平面の真ん中の平面が欲しいので、index1を入力します。

真ん中の平面が選択されました。

次に、Vector→Point→Pull Pointコンポーネントを選択します。
このコンポーネントは、Gに入力したジオメトリに点をプル投影します。

Pull PointコンポーネントPに曲線外の点、Gに今作成した真ん中の平面を入力します。

同様に、もう片方の曲線外の点にも接続します。

次に、Vector 2Ptコンポーネントを選択します。

↓図のようにBPull Pointコンポーネントから出力された点、Aにエッジの中点を入力します。
同様にもう一つのPull Pointコンポーネントにも接続します。

Unit Vectorコンポーネントを選択します。

↓図のようにそれぞれのVector 2PtコンポーネントVに接続します。

2つのUnit VectorコンポーネントAdditionコンポーネントで繋ぎます。

Vector Displayコンポーネントで確認してみると、2つのベクトルの平均値のベクトルが出来ました。

↓だいたいの流れになります。
エッジの中点から各エリアの中心点に向かったベクトルを作成して、そのベクトルを逆方向にする。

中点と逆方向のベクトルを足して点を追加。
エリア外の点を選択。

エリア外の点をエッジに対して垂直な平面にプル投影して

平面上で足し算をして、平均値のベクトルを割り出す。といった感じです。

次に、Vevtor→Plane→Plane Normalコンポーネントを選択します。
このコンポーネントは、ベクトルに垂直な平面を出力します。

Plane NormalコンポーネントOにエッジの中点、Zに先ほど作成したベクトルを接続します。
ベクトルに対して垂直な平面は出力されましたが、XY方向の角度がおかしいです。

Vevtor→Plane→Align Planeコンポーネントを選択します。

Align PlaneコンポーネントPに先ほど作成した平面を接続し、Dに最初に作成したCurveコンポーネントを接続します。
これで平面の向きがエッジと揃いました。

あとは、前回の記事同様にOrientコンポーネントを使いBrepを配置してみます。

↓配置出来ました。

次回は、この平面を利用してモデリングしたチェーンを配置していきます。[:en]今日は、前回モデリングしたお皿をベースにGrasshopperを使ってボロノイ化させていきます。

STEP.02【お皿をGrasshopperに読み込ませる】

まず、Rhinocerosを開いて、Grasshopperを立ち上げます。

次に、FileからNew Documentを選択して新規ファイルを作ります。

112

ParamsタブのGeometry内のBrepコンポーネントを選択します。

21

Brepコンポーネントはサーフェースやポリサーフェース等を格納するコンポーネントです。読み方分かんなかったんですが、偉い人たちはびーれっぷと言っていました。

Brepコンポーネントにお皿を読み込ませます。

右クリックして、Set one Brepを選択します。

32

Rhinocerosの画面に切り替わるので、お皿を選択します。

42

52

選択すると、こんな画面になるかと思います。

見づらいので、一旦ここでお皿のモデルは非表示にします。

(オブジェクトを非表示ツールを使用します)

61

お皿モデルが消えて、赤い半透明のものが残りました。

この赤いものは、先ほどのBrepコンポーネントがお皿のモデルを格納したということです。

このBrepを元にボロノイ化させていきます。

次に、Vevtor→Grid→Populate Geometryコンポーネントを選択します。

(何もない部分をダブルクリックするとショートカットの検索ウィンドウが現れます。下記画像参照)

71

先ほどのBrepの右端と、Populate GeometryGを繋げます。

81

すると、点がたくさん現れました。

このPopulate Geometryコンポーネントは、先ほど指定したBrepの形状をジオメトリとして取得し、ランダムに点を発生させます。

点の数を調整してみましょう。

Number Sliderコンポーネントでスライダーを作成します。

ダブルクリックでショートカットを表示させ、任意の数字を打つと

自動的にNumber Sliderコンポーネントが作成されます。

92

スライダーを2つ作成し、それぞれPopulate Geometryコンポーネント

NSに繋ぎます。

すると、自動的にスライダーの名前がCountSeedに変わりました。

Countは、発生させる点の数、Seedは乱数生成の元となる値です。(僕は難しいことは分からないのでランダム具合と呼びます)

102

少しスライダーをいじってみます。

113

Countを87、Seedを4にしてみました。

点の数が変わりましたね。

Seedはいじってもらうと分かるのですが、ランダム具合が変わります。

とりあえずここは、Count15Seed4にしておきます。

次に、Params→Geometry→Pointコンポーネントを使います。

121

Populate GeometryコンポーネントPointコンポーネントを繋げます。

Pointコンポーネントは点を格納するコンポーネントです。

131

Params→Input→Panelコンポーネントを使うと、先ほどの点群の座標値が分かります。

1_14

151

Countを15にしたので15個分です。

このPanelは確認用で、今回はあまり関係ないので消します。

次は、この15個の点をもとにボロノイ分割をします。

Mesh→Triangulation→Voronoi 3Dコンポーネントを選択します。

161

先ほどのPointコンポーネントVoronoi 3DコンポーネントPに繋げると

171

ボロノイ分割されました!

15の点を母点としたボロノイです。

(スライダーのCountSeedを変更するとここのボロノイ分割も変わります。)

でも、なんか勝手に立方体出来てますね。

これは、先ほどの15の点を持つ最大外形の立方体です。

ボロノイ分割するための母点は入力されましたが、まだどれくらいの範囲を分割するかのボリュームが入力されていません。

そこで、Params→Geometry→Boxコンポーネントでボリュームを指定してあげます。

181

Boxコンポーネントを右クリックして、Set one Boxを選択します。

191

すると立方体作成モードに切り替わるので、3点を指定して立方体をつくります。

ここでポイントですが、お皿(Brep)の大きさよりも大きい立方体をつくります。(後述します)

20

211

22-2

こんな感じになりました。

立方体が出来たら、BoxコンポーネントVoronoi 3DコンポーネントBに繋げます。

23

気持ち悪い模様になりました。

これは、Boxコンポーネントが格納した立方体とVoronoi 3Dコンポーネントが格納した立方体が重なっている状態です。

見づらいので、Boxコンポーネントを右クリックして、Previewを消しましょう。

2_1_24

25

気持ち悪いのが消えましたね。

これでボロノイ分割するための母点と、ボリュームが指定されました。

なんかそれっぽくなってきましたね!

今日はこのへんで、、

 [:]

Leave a Reply

CAPTCHA