投稿日:2021-12-09
#Grasshopper
#Basic
Grasshopper においてデータツリーの理解は必須ですが、それらをしっかり操作できなければ意味がありません。学び始めの方で、データツリー操作に悩まされた方もいるかと思います。データツリーに関するコンポーネントはたくさんありますが、今回はそれらを1つ1つ解説していこうと思います。自分のための備忘録でもありますが、忘れたらこの記事を見ればいいという状態を目指して書いていこうと思います。また、逐次アップデートもしていきますので是非ご参考にしてください。
ブランチ内の値を個別のブランチに格納。
コンポーネントを使用しなくても、Graft したい出力端子 or 入力端子の上で右クリックでメニューを出し、Graft することもできる。
不要な階層を消去してくれるコンポーネント。
コンポーネントを使用しなくても、 Simplify したい出力端子 or 入力端子の上で右クリックでメニューを出し、 Simplify することもできる。
各ブランチの中に入っている値を、1 つのブランチにまとめる。コンポーネントを使用すれば、出力後のブランチの Path を指定することもできる。指定しなければデフォルトで 0 となる。
コンポーネントを使用しなくても、 Flatten したい出力端子 or 入力端子の上で右クリックでメニューを出し、 Flatten することもできる。
入力端子 Tree に接続したデータを、入力端子 Guide に接続したデータと同じ構造に変換する。
入力されたデータのうち、Minimum に入力された値~ Maximum に入力された値の個数のブランチを抽出する。
画像の例だと、ブランチ内の値の数量が、「Minimum 2~ Maximum 3」の範囲内のブランチを抽出しているので、{0;0;0}と{1;0;0}が抽出されており、値が4つある{2;0;0}は出力されていない。
入力されたデータから、Depth に入力される値分の階層を、深い階層から順番に取り除く。
画像の例だと、取り除く階層を「1」としているため、1階層分消去されている。
また、消去後に Path が同じになるデータはまとめられる。
リストから「null / Invalid / Empty」なデータを取り除く。
画像は1枚目は null を取り除いた例。
更に Remove Empty も True にすることで、2 枚目の画像の様に空のブランチが取り除かれる。
入力したデータの Path・値の個数・ブランチの個数を出力する。
入力した Tree を結合する。
コンポーネント下が「Flatten」だと入力したツリーごとに「Flatten」してから結合する。
「Graft」だと、「Flatten」せずに結合する。
「Flatten」上で右クリックを押してメニューを出し、「Flatten Inputs」のチェックを外すと「Graft」になる。
入力した Tree をブランチごとに分解する。
データ構造を、ブランチの数と入力されている値の数を入れ替えるように変更する。
画像の例だと、「ブランチが 2 つ、各ブランチに値が 3 つ」⇒「ブランチが3つ、各ブランチに値が2つ」に変更している。
行列の行と列を入れ替えるイメージ。
入力した Tree を結合し Path の順番通りに並べ替える。
同じパス同士のデータは結合される。
画像の例では、D1 に Path{1}, D2・D3 に Path{0}が入力されているが、{0}⇒{1}の順番に並べ替えられており、更に D2・D3 に入力されたデータは、同じ Path{0}なので結合されている。
入力端子 Tree に与えられたデータと、入力端子 Guide に与えられたデータの構造が一致している場合、入力端子 Guide の Path で入力端子 Tree のデータを出力する。
入力したデータを、指定したデータ構造に変換する。
コンポーネント上でダブルクリックし、エディターから Source・Target それぞれにデータ構造を入力し、Source に入力したデータ構造から Target に入力したデータ構造に変換する。
画像の例だと、入力されたデータが「{0;0;0},{0;0;1}, {0;0;2}」なので{a;b;c}と入力、Target に{a}と入力することで、画像の様な出力結果が得られる。
入力したデータの階層を、指定した数だけ減らす。
正の値を入力すると、深い階層から順番に減らしていく(Param Viewer でいうと、中心から順番に)
負の値を入力すると、浅い階層から順番に減らしていく (Param Viewer でいうと、先端から順番に)
入力されたデータを指定した Path で切り取る。
Positive から切り取ったデータが出力され、Negative から切り取られたデータ以外が出力される。
Gate に入力された値と、同じ値の入力値を出力する。
画像の例だと、0 番に「円サーフェイス」1 番に「四角形サーフェイス」2 番に「楕円形サーフェイス」が入力されており、Gate に 0 を入力しているので、「円サーフェイス」が出力されている。
Stream に入力されたデータを、Gate に入力された数字の Target 端子から出力する。
左画像上の例だと、Strem に入力された「Hello Grasshopper!!」を Gate に1と入力することで Target1 から出力する。
また、左画像下の例で、Gate に Bool 値(True/False)を入力すると、「False」のときは Target 0から、「True」のとき Target 1から出力される。
入力されたリストを指定した Offset 量で Offset した時に、オフセット前とオフセット後の組み合わせと取得できるコンポーネントです。
簡単に言うと、ブランチとリストを同時にオフセットできるコンポーネントとなります。
ややこしいので上画像を例に説明します。
続いて「Relative Items コンポーネント」ですが、「Relative Item コンポーネント」が理解できれば、さほど難しくはないかと思います。
入力されたデータから、指定した Path のデータを抽出する。
コンポーネント下「Maintain」だと Path をそのままの状態で抽出し、「Renumber」にすると Path を振りなおす。
「Maintain」の上で右クリックを押し、Maintain Paths のチェックを外すと「Renumber」になる。
入力されたデータから、指定した Path / Index の値を抽出する。
画像の例だと、Tree に入力したデータから、Path{1}/ index[1,2]の値を抽出することで、[4,5]という値を抽出している。
入力された数字から Path を生成する。
画像上の例だと、「0,1,2」を入力することで、Path{0;1;2}が生成される。
画像下の例だと、「0,1,2」をそれぞれブランチに格納して Construct Branch することで、Path{0}, {1}, {2}を取得している。
入力した Path を値に分解。
入力された Path と、Mask に入力された Path が一致するかどうかを Bool 値で出力する。
入力したデータに対して、Search に入力した Path のデータを検索し、Replace に入力した Path に置き換える。
また、出力結果は Path の順番に並べ替えられる。
以上になります。中にはややこしいコンポーネントあるかと思いますが、使いこなしてデータ操作に悩まないようにしましょう!
こちらの記事は随時更新していこうと思います。実用例など加えていけたらと思ってます。
【参考文献】