STUDIO TAMA


thumbnail

投稿日:2021-12-09

【Grasshopper Basics】 データツリーに関するコンポーネントまとめ

  • #Grasshopper

  • #Basic

Grasshopper においてデータツリーの理解は必須ですが、それらをしっかり操作できなければ意味がありません。学び始めの方で、データツリー操作に悩まされた方もいるかと思います。データツリーに関するコンポーネントはたくさんありますが、今回はそれらを1つ1つ解説していこうと思います。自分のための備忘録でもありますが、忘れたらこの記事を見ればいいという状態を目指して書いていこうと思います。また、逐次アップデートもしていきますので是非ご参考にしてください。

Graft Tree

thumbnail

ブランチ内の値を個別のブランチに格納。

コンポーネントを使用しなくても、Graft したい出力端子 or 入力端子の上で右クリックでメニューを出し、Graft することもできる。

Simplify Tree

thumbnail

不要な階層を消去してくれるコンポーネント。

コンポーネントを使用しなくても、 Simplify したい出力端子 or 入力端子の上で右クリックでメニューを出し、 Simplify することもできる。

Flatten Tree

thumbnail

各ブランチの中に入っている値を、1 つのブランチにまとめる。コンポーネントを使用すれば、出力後のブランチの Path を指定することもできる。指定しなければデフォルトで 0 となる。

コンポーネントを使用しなくても、 Flatten したい出力端子 or 入力端子の上で右クリックでメニューを出し、 Flatten することもできる。

Unflatten Tree

thumbnail

入力端子 Tree に接続したデータを、入力端子 Guide に接続したデータと同じ構造に変換する。

Prune Tree

thumbnail

入力されたデータのうち、Minimum に入力された値~ Maximum に入力された値の個数のブランチを抽出する。

画像の例だと、ブランチ内の値の数量が、「Minimum 2~ Maximum 3」の範囲内のブランチを抽出しているので、{0;0;0}と{1;0;0}が抽出されており、値が4つある{2;0;0}は出力されていない。

Trim Tree

thumbnail

入力されたデータから、Depth に入力される値分の階層を、深い階層から順番に取り除く。

画像の例だと、取り除く階層を「1」としているため、1階層分消去されている。

また、消去後に Path が同じになるデータはまとめられる。

Clean Tree

thumbnail
thumbnail

リストから「null / Invalid / Empty」なデータを取り除く。

画像は1枚目は null を取り除いた例。

更に Remove Empty も True にすることで、2 枚目の画像の様に空のブランチが取り除かれる。

Tree Statistic

thumbnail

入力したデータの Path・値の個数・ブランチの個数を出力する。

Entwine

thumbnail
thumbnail

入力した Tree を結合する。

コンポーネント下が「Flatten」だと入力したツリーごとに「Flatten」してから結合する。

「Graft」だと、「Flatten」せずに結合する。

「Flatten」上で右クリックを押してメニューを出し、「Flatten Inputs」のチェックを外すと「Graft」になる。

Explode Tree

thumbnail

入力した Tree をブランチごとに分解する。

Flip Matrix

thumbnail

データ構造を、ブランチの数と入力されている値の数を入れ替えるように変更する。

画像の例だと、「ブランチが 2 つ、各ブランチに値が 3 つ」⇒「ブランチが3つ、各ブランチに値が2つ」に変更している。

行列の行と列を入れ替えるイメージ。

Merge

thumbnail

入力した Tree を結合し Path の順番通りに並べ替える。

同じパス同士のデータは結合される。

画像の例では、D1 に Path{1}, D2・D3 に Path{0}が入力されているが、{0}⇒{1}の順番に並べ替えられており、更に D2・D3 に入力されたデータは、同じ Path{0}なので結合されている。

Match Tree

thumbnail

入力端子 Tree に与えられたデータと、入力端子 Guide に与えられたデータの構造が一致している場合、入力端子 Guide の Path で入力端子 Tree のデータを出力する。

Path Mapper

thumbnail

入力したデータを、指定したデータ構造に変換する。

コンポーネント上でダブルクリックし、エディターから Source・Target それぞれにデータ構造を入力し、Source に入力したデータ構造から Target に入力したデータ構造に変換する。

画像の例だと、入力されたデータが「{0;0;0},{0;0;1}, {0;0;2}」なので{a;b;c}と入力、Target に{a}と入力することで、画像の様な出力結果が得られる。

Shift Paths

thumbnail

入力したデータの階層を、指定した数だけ減らす。

正の値を入力すると、深い階層から順番に減らしていく(Param Viewer でいうと、中心から順番に)

負の値を入力すると、浅い階層から順番に減らしていく (Param Viewer でいうと、先端から順番に)

Split Tree

thumbnail

入力されたデータを指定した Path で切り取る。

Positive から切り取ったデータが出力され、Negative から切り取られたデータ以外が出力される。

Stream Filter

thumbnail

Gate に入力された値と、同じ値の入力値を出力する。

画像の例だと、0 番に「円サーフェイス」1 番に「四角形サーフェイス」2 番に「楕円形サーフェイス」が入力されており、Gate に 0 を入力しているので、「円サーフェイス」が出力されている。

Stream Gate

thumbnail

Stream に入力されたデータを、Gate に入力された数字の Target 端子から出力する。

左画像上の例だと、Strem に入力された「Hello Grasshopper!!」を Gate に1と入力することで Target1 から出力する。

また、左画像下の例で、Gate に Bool 値(True/False)を入力すると、「False」のときは Target 0から、「True」のとき Target 1から出力される。

Relative Item

thumbnail

入力されたリストを指定した Offset 量で Offset した時に、オフセット前とオフセット後の組み合わせと取得できるコンポーネントです。

簡単に言うと、ブランチとリストを同時にオフセットできるコンポーネントとなります。

ややこしいので上画像を例に説明します。

  1. 上画像の様に4点 × 4点のグリッドがあり、縦方向の4点が同じブランチの値となっております。Panel コンポーネントでデータの中身を見てみると{0;0;0}{0;0;3}まで4ブランチあり、各ブランチに index03 まで 4 つの点が格納されているのがわかります。
  2. このデータを「Relative Item コンポーネント」に接続します。
  3. Offset に入力する値は、{ブランチをどれだけ offse させるか}(インデックスをどれだけオフセットさせるか)の形で入力します。上画像では{0;0;1}(0)で入力しているので、1ブランチ分オフセットし、値はオフセットさせないように設定してます。
  4. 出力端子「Item A」「Item B」からは、ItemB からオフセット後のデータが取得でき、それに対する元々のデータが ItemA から取得できます。
thumbnail
  1. 上画像で ItemA の 1 列目{0;0;0}は{0;0;1}(0)移動させると、ItemB の 1 列目{0;0;0} (元々のリストだと{0;0;1})になります。
  2. 元々のリストで 4 列目{0;0;3}は{0;0;1}(0)オフセットさせたとき、対応するデータがないので、ItemA に出力されていません。
thumbnail
  1. 次にインデックスもオフセットしてみます。{0;0;1}(1)だけオフセットします。
  2. 上画像の赤で囲った点が ItemA、それに対してオフセットした ItemB が水色で囲った範囲になります。
  3. 赤枠の範囲外の点は、{0;0;1}(1)オフセットすると元々の値に該当するデータがないので、出力されません。

Relative Items

thumbnail

続いて「Relative Items コンポーネント」ですが、「Relative Item コンポーネント」が理解できれば、さほど難しくはないかと思います。

  1. 上画像で、データ TreeA(赤枠内の点)、データ TreeB(水色枠内の点)があります。これらをそれぞれ「Relative Items コンポーネント」に接続します。
  2. オフセット量を{0;0;1}(0) ⇒ ブランチ1、インデックス 0 のオフセットとします。
  3. TreeA を TreeB に対応させて、{0;0;1}(0)だけオフセットさせると、ItemA が ItemB にオフセットすることになります。
thumbnail
  1. 今度は Index もオフセットします。{0;0;1}(1)だけオフセットすると上画像の様に ItemA は ItemB となります。

Tree Branch

thumbnail

入力されたデータから、指定した Path のデータを抽出する。

コンポーネント下「Maintain」だと Path をそのままの状態で抽出し、「Renumber」にすると Path を振りなおす。

「Maintain」の上で右クリックを押し、Maintain Paths のチェックを外すと「Renumber」になる。

Tree Item

thumbnail

入力されたデータから、指定した Path / Index の値を抽出する。

画像の例だと、Tree に入力したデータから、Path{1}/ index[1,2]の値を抽出することで、[4,5]という値を抽出している。

Construct Path

thumbnail

入力された数字から Path を生成する。

画像上の例だと、「0,1,2」を入力することで、Path{0;1;2}が生成される。

画像下の例だと、「0,1,2」をそれぞれブランチに格納して Construct Branch することで、Path{0}, {1}, {2}を取得している。

Deconstruct Path

thumbnail

入力した Path を値に分解。

Path Compare

thumbnail

入力された Path と、Mask に入力された Path が一致するかどうかを Bool 値で出力する。

Replace Paths

thumbnail

入力したデータに対して、Search に入力した Path のデータを検索し、Replace に入力した Path に置き換える。

また、出力結果は Path の順番に並べ替えられる。

以上になります。中にはややこしいコンポーネントあるかと思いますが、使いこなしてデータ操作に悩まないようにしましょう!


こちらの記事は随時更新していこうと思います。実用例など加えていけたらと思ってます。

【参考文献】

  • AppliCraft : https://www.applicraft.com/
  • Grasshopper ALGORITHMIC MODELING FOR RHINO  : https://www.grasshopper3d.com/
目 次