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

↓配置出来ました。

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

Leave A Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA