Grasshopperでは、データをフォルダの様に階層化して管理しています。望んだアルゴリズムを作成するには、データの階層構造を任意の形に修正する必要があります。通常データの階層を修正する場合には、Graft,Flatten,Simplifyを使います。
この3種類はコンポーネントの端子の上で右クリックから設定することで、端子ごとにデータ階層を変更することができます。詳細は下記リンクを参照ください。
https://www.applicraft.com/tips/rhinoceros/graft_flatten_simplify/
またこの3種類以外の階層を変更するコンポーネントは下記リンクを参照ください。
https://www.applicraft.com/ghcp_sets/
ただしこういった通常のコンポーネントだけでは、変更に対応しきれない場合があります。そうした時に階層の変更内容を直接記述することができるPath Mapperコンポーネントというものがあります。
Path Mapperコンポーネントについて
Path Mapperは Sets > Tree の中にあります。
Path Mapperはキャンバスに置いた時点では、「!」マークが表示され何も動作しない状態になっています。コンポーネントをダブルクリックし、開いたエディタに内容を記述することで、入力データの階層を変更することができます。
左側の「Source」に元の階層を、右側の「Target」に修正後の階層構造を記述します。
初期状態
ダブルクリックで開いたEditor
Sourceに{A;B;C}、Targetに{A}と書いてみます(ここでは階層の表示を、上から順にABC・・と書きます)。
この記述では{A;B;C}を{A}に変更するので、BとCに相当する階層を使用しないことになり、{A}だけが残ります(下図)。
{1;0;1},{1;0;2},{1;0;3}のうち、Aに該当する{1}だけが残るので、出力された階層は{1}になっている
このように元の階層の値を使ったり、直接0や1という様に階層の値を書き込むことで、入力する階層を変更できます。また階層だけでなくインデックスの番号を使用することもできます。
階層内の記述は{}で、インデックスの記述は()で記述します。
階層名とインデックス
またPath Mapperコンポーネントの上を右クリックするとオプションが表示されますので、任意のオプションを選ぶことで、記述内容の編集が可能です(「Mapping Editor」を押すとダブルクリックしたのと同様の記述ダイアログが起動)。
右クリックの特定の記述オプション
Path Mapperの記述例
■ {A;B;C}→{0}
出力階層を{0}に、階層の分岐を無くす“Flatten”と同様の考え方。(Create Flatten Mapping)
■ {A;B;C}(i)→{A;B;C;i}
出力階層の末尾に(i)インデックスを足す、“Graft”と同様の考え方。(Create Graft Mapping)
■ {A;B;C;D}→{A;B;C}
末端の階層を使用せず、削除する。”Graft”の反対の効果。(Create Trim Mapping)
■ {A;B}(i)→{i4}
インデックス値を4毎に分割する。“Partition List”の様な効果。
注)階層の分割を行う場合は「」と入力(下記の表記に置きかわる)。
■ {A;B;C}(i)→{i}
インデックスの値毎に階層をまとめ直す。0番のインデックスを{0}に、1番のインデックスを{1}に集める形。
“Flip Matrix”の様な効果。
■ {A;B;C}(i)→{A;B;C}(item_count -1 -i)
階層はそのままでインデックス値を反転したもの。“Reverse List”の様な効果。(Create Reverse Mapping)
■ {A;B;C}→{path_index}
入力した階層を上から順に{0}、{1}・・と番号を付けていく。(Create Renumber Mapping)
■ 四則演算などの計算式
+-*/や^(階乗)なども使用可能。
Path Mapperの注意点
Path Mapperは上記の内容を組み合わせることで、詳細な階層の変更ができますが、入力情報の階層が変わると記述内容も変更する必要があります(例:下図の下側は、{A;B}を{A;B;C}に変更する必要あり)。
Path Mapperはメリットとして詳細な設定ができる分、入力情報の変化に対応しきれず小回りに欠ける点があります。
SetsタブのTreeの中には階層を修正するコンポーネントが他にもいくつかあるので、修正が容易なものは既存のコンポーネントから選び、より高度な修正をしたい場合はPath Mapperコンポーネントを使用頂けたらと思います。
https://www.applicraft.com/ghcp_sets/