GH Basics GH Tutorial Grasshopper Objects

【Grasshopper Tutorial】 Hexagon Pattern

今回は六角形を上画像の様に4パターンのオブジェクトを作成しランダムに配置するチュートリアルを作成しました。
難易度は、初級程度ですがデータ構造の理解は必要です。是非挑戦してみてください。テキストですと中々理解が難しいかもしれません、こちらのチュートリアルは動画化してますので難しいと感じたら以下のリンクから動画で確認してみてください。

概要

上画像がコードの全体像です。大まかな流れは以下となります。

  1. 正六角形の作成
  2. パターン1つ目作成
  3. パターン2つ目作成
  4. パターン3つ目作成
  5. パターン4つ目作成
  6. 配置箇所作成
  7. 配置箇所をランダムにグループ化
  8. 配置箇所に向かうベクトルの作成
  9. 4つのパターンを配置箇所に移動
  10. 完成

正六角形の作成

  1. ややめんどくさい方法で正六角形を作成していきます。「Line SDLコンポーネント」でXY平面にX方向に向かって長さ1000のLineを作成します。
  2. 「Rotateコンポーネント」で作成したLineをπ/3 (60度)回転させます。
  3. 作成した2本のラインをそれぞれ「End Pointsコンポーネント」で終点を取得します。
  4. 「Lineコンポーネント」で取得した終点を直線で結びます。
  5. 3本の直線を「Join Curvesコンポーネント」で結合します。正三角形ができたかと思います。
  6. 「Boundary Surfacesコンポーネント」で作成した正三角形にサーフェイスを張ります。
  7. 作成した正三角形のサーフェイスを回転させて正六角形を生成していきます。「Rotateコンポーネント」に正三角形を接続します。
  8. 「Seriseコンポーネント」で回転角のリストを作成します。入力端子Nにπ/3 (60度), 入力端子Cに6を入力し、「0, 60, 120, 180. 240, 300」のリストができました。
  9. 「Rotateコンポーネント」の入力端子Aに接続します。正六角形の完成です。

パターン1つ目作成

  1. それではパターンを1つ作成していきます。「Areaコンポーネント」で正六角形を生成する6つ正三角形の中心点を取得します。
  2. 「Moveコンポーネント」で取得した中心点をZ方向に100移動させます。
  3. 「Extrude Pointコンポーネント」で6つの正三角形を移動させた6つの点に向かって押し出します。上画像の様に、正三角形を底面とした正三角錐を6つ組み合わせたようなパターンが1つ完成しました。

パターン2つ目作成

  1. 「Deconstruct Brepコンポーネント」で作成した1つ目のパターンを分解し、分解後のサーフェイスを取得します。「正三角錐を分解した4面×6個で24面サーフェイスが取得できてます。
  2. 底面の正三角形以外の3面の中心点をZ方向に100移動させ、その点に向かって各面を押し出すことで、2つ目のパターンを作成していきます。「Areaコンポーネント」で取得したサーフェイスの中心点を取得します。
  3. リストから底面の正三角形を消去します。「Sort Listコンポーネント」で取得したサーフェイスを面積の小さい順に並べ替えます。入力端子Kに「Deconstruct Brepコンポーネント」の出力端子Fを、入力端子Aに「Areaコンポーネント」の出力端子Aを接続します。
  4. 底面の正三角形は他の3面と比べて明らかに面積が最大なので、「Cull Indexコンポーネント」でリストの最後の値を消去します。インデックスに「-1」を接続します。
  5. 「Areaコンポーネント」で取得した各サーフェイスの中心点からも、底面の正三角形の中心点を消去します。「Sort Listコンポーネント」を新たに用意し、入力端子Kに「Areaコンポーネント」で取得した面積を、入力端子Aに中心点を入力します。
  6. 「Cull Indexコンポーネント」でリストの最後の値を消去します。正三角錐の底面の中心点が消去されたリストが取得できました。
  7. 取得した中心点のリストを「Moveコンポーネント」でZ方向に100移動させます。
  8. 「Extrude Pointコンポーネント」で各サーフェイスを移動させた点に向かって押し出します。パターン2つ目が完成しました。

パターン3つ目作成

  1. 3つ目パターンは2つ目と処理が同じなのでコピペで作成します。2つ目のパターンを作成した時の「Deconstruct Brepコンポーネント」「Extrude Pointコンポーネント」までを複製します。
  2. 前項の「Extrude Pointコンポーネント」の出力端子から得られる2つ目のパターンを、複製した「Deconstruct Brepコンポーネント」に接続します。これで3つ目のパターンが完成です。
  3. 「Brepコンポーネント」を使用し、2つ目のパターン・3つ目のパターンをそれぞれ取得しておきます。「Extrude Pointコンポーネント」に「Brepコンポーネント」をそれぞれ接続します。後々のためにそれぞれ「Graft」しておきます。
  1. 同じ処理をそれぞれ「Cluster」しパッケージ化しておきます。「Deconstruct Brepコンポーネント」「Extrude Pointコンポーネント」をそれぞれ選択し、右クリックでメニューを開き「Cluster」を選択します。
  2. 上画像の様にコードがすっきりしました。1つ目のパターンも「Brepコンポーネント」で取得しておきましょう。

パターン4つ目作成

  1. 4つ目のパターンを作成します。「Integerコンポーネント」で一番最初にLineを作成した時の1000を取得します。
  2. 「Polygonコンポーネント」で正六角形を作成します。
  3. 「Areaコンポーネント」で正六角形の中心点を取得します。
  4. 「Moveコンポーネント」で取得した中心点をZ方向に100移動させます。
  5. 「Extrude Pointコンポーネント」で取得した中心点に向かって、正六角形を押し出します。4つ目のパターン完成です。
  6. 「Brepコンポーネント」で4つ目のパターンも取得しておきましょう。

配置箇所作成

  1. 作成した4つのパターンを配置する点を作成していきます。「Planeコンポーネント」で最初に配置したXY平面を取得します。
  2. 「Integerコンポーネント」で最初に設定した1000を取得します。
  3. 「Hexagonalコンポーネント」で六角形グリッドを作成します。入力端子Pに取得したXY平面を、入力端子Sに取得した1000を、Ex, EyにはX・Y方向のグリッドの数を入力します、今回は[ 40, 10 ]を入力しています。
  4. 「Hexagonalコンポーネント」の出力端子Pから六角形グリッドの中心点が取得できます。出力端子を「Flatten」しておきます。

配置箇所をランダムにグループ化

  1. 取得した400点を100点ずつランダムに4グループに分けていきます。「Jitterコンポーネント」「Hexagonalコンポーネント」の出力端子Pに接続してリストをランダムに並べ替えます。
  2. 「List Lengthコンポーネント」Hexagonalコンポーネントの出力端子Pから点の総数を取得します。
  3. Divisionコンポーネント」で取得した総数を4で割ります。
  4. 「Partitionコンポーネント」でランダムに並べ替えたリストを4分割していきます。入力端子Lに「Jitterコンポーネント」の出力端子を、入力端子Sに「Divisionコンポーネント」の出力端子を接続します。
  5. 「Explode Treeコンポーネント」で4グループに分けた点のリストをそれぞれ切り出していきます。「Explode Treeコンポーネント」の出力端子付近で拡大すると、「+」「ー」マークが出てきますので、「+」を押して出力端子4つにします。
  6. 「Explode Treeコンポーネント」の各出力端子からランダムにグループ分けした点のリストが取得できました。

配置箇所に向かうベクトルを作成

  1. 各配置点に向かうベクトルを作成します。「Pointコンポーネント」で、最初に「Construct Pointコンポーネント」で設置した点(0,0,0)を取得していきます。
  2. 「Vector2Ptコンポーネント」を4つ用意し、点(0,0,0)から各点に向かうベクトルを作成します。

4つのパターンを配置箇所に移動

  1. 4つのパターンを各配置点に移動させていきます。「Moveコンポーネント」を4つ用意し、入力端子Gに作成した4つのパターンをそれぞれ入力します。
  2. 「Moveコンポーネント」の入力端子Tには先ほど作成したベクトルをそれぞれ接続します。移動が完了しました。
  3. 「Custom Previewコンポーネント」「Colour Swatchコンポーネント」で色付けします。

完成

以上になります。データ構造を理解できていれば簡単かもしれませんが、理解できていないと途中で混乱してしまうかもしれません。「Panelコンポーネント」などでデータの中身を確認しながら実装してみてください。また、こちらのチュートリアルは動画化しているので、難しいと感じたら是非動画で確認してみてください。

【参考文献】

  • Grasshopper Docs : https://grasshopperdocs.com/
  • AppliCraft : https://www.applicraft.com/

-GH Basics, GH Tutorial, Grasshopper, Objects