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

前回のつづきになります。

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

前回のつづきになります。 前回、三角ピースのエッジに穴を開けて棒をつけたので今回は、その部分を繋ぐチェーンを作っていきます。

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

↓図の部分まで戻ります。

これら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 を配置してみます。

↓配置出来ました。

次回は、この平面を利用してモデリングしたチェーンを配置していきます。

Blog一覧へ戻る