Grasshopperでリストの分割についてお探しですね。
広告
Grasshopperのリスト操作を理解しよう:Split List・Dispatch・Merge・Weaveの使い分け
Grasshopperでパラメトリックモデリングをしていると、必ずぶつかる壁があります。
それが「リストの操作」です。
特に、リストを分けるための「Split List」と「Dispatch」、そしてリストをまとめるための「Merge」と「Weave」は、見た目の結果が似ていることもあって、初心者のうちは「どれを使えばいいの?」と混乱しがちです。
この記事では、これらのコンポーネントの違いと、実際のモデリングでどう使い分ければいいかを、できるだけわかりやすく解説していきます。
正しいコンポーネントを選べるようになると、プログラムが読みやすくなるだけでなく、複雑な形も作りやすくなりますよ。
なぜリスト操作の使い分けが大切なの?
Grasshopperでは、点や線、サーフェスといった図形はすべて「リスト」という形で管理されています。
このリストをうまく操れるかどうかが、パラメトリックデザインの質を大きく左右するんです。
モデリングをしていると、「特定の要素だけ取り出して加工して、また元に戻す」という作業がよく出てきます。
このとき、リストの分割と結合の仕組みをちゃんと理解していないと、データの構造が崩れてしまって、エラーが出たり思わぬ形ができてしまったりします。
リスト操作で大事なのは、単に「分ける・くっつける」という結果だけじゃなくて、**「どんなルールで処理するか」**というプロセスなんです。
たとえば、データの順番(インデックス)を基準にするのか、それとも形の大きさや位置といった条件を基準にするのか。
この違いによって、選ぶべきコンポーネントが変わってきます。
適当なコンポーネントで無理やりデータを合わせることもできなくはないですが、そうすると後からパラメーターを変えたときに壊れやすい、もろいプログラムになってしまいます。
だからこそ、それぞれのコンポーネントが持つ「ルール」の特徴を理解して、目的に合ったものを選ぶことが大切なんです。
Split ListとDispatch、MergeとWeaveは、それぞれペアのような関係になっています。
「順番(インデックス)による物理的な位置を重視するか」「条件判定による論理的な関係を重視するか」。
この視点を持つだけで、Grasshopperのリスト操作がぐっとわかりやすくなりますよ。
リストを分ける:Split ListとDispatchの違い
データを2つのグループに分けるときによく使うのが「Split List」と「Dispatch」ですが、この2つの使い分けはとてもシンプルです。
**Split List**は、リストの中の「特定の順番(インデックス)」を境目にして、物理的に前と後ろの2つに切り分けるコンポーネントです。
たとえば、0から9までの10個のアイテムがあるリストで、インデックス3を指定してSplit Listを使うと、「0〜2」と「3〜9」という2つのリストに分かれます。
順番そのものに意味があるデータや、最初から決まった数の要素を取り出したいときに便利です。
一方、**Dispatch**は、順番ではなく「条件(True/False)」に基づいてデータを2つのルートに振り分けるコンポーネントです。
リストの各要素に対して、条件を満たしているか(True)、満たしていないか(False)というパターンを与えて、Trueのものは出力A、Falseのものは出力Bから取り出します。
たとえば、「カーブの長さが一定以上かどうか」とか「ポイントのZ座標が特定の値より大きいか」といった、変動する条件で要素を選びたいときにDispatchが活躍します。
使い分けのポイントは**「分ける基準が固定か変動か」**です。
あらかじめインデックスがわかっていて、単純にリストを前半と後半に分けたいだけなら、Split Listを使うのがスマートです。
でも、パラメーターの変更によって分けたい要素の数や位置が変わるようなケースでは、Larger Thanなどの条件判定と組み合わせてDispatchを使う必要があります。
「基準がインデックスか条件か」を意識するだけで、どちらを使えばいいか迷わなくなるはずです。
リストをまとめる:MergeとWeaveの違い
分けたリストに別々の処理をした後、また1つのリストにまとめるときに使うのが「Merge」と「Weave」です。
**Merge**は、複数のデータを単純に順番につなぎ合わせるコンポーネントです。
入力端子の順番(D1、D2、D3…)に従って、D1のリストの後ろにD2のリストがくっついて、その後ろにD3が続く、という形で1つのリストを作ります。
処理の流れをそのまま素直にまとめたいときに向いています。
対して**Weave**は、複数のリストから要素を「編み込む」ように交互に結合していくコンポーネントです。
Weaveの最大の特徴は、入力したパターン(インデックスの指定)に従って、どの入力端子からデータを取るかを1つずつ決められる点です。
たとえば、パターンに「0, 1, 0, 1」と入力すると、入力端子0と入力端子1のリストから、順番に1つずつ要素を取り出して新しいリストを作ります。
別々に作った点を順番につないで1本の連続したポリラインを作りたいときなど、データの並び順が最終的な形に直結する場面でとても便利です。
この2つを使い分ける基準は**「最終的なリストの並び順をどうコントロールしたいか」**です。
Split Listで単に前後で分けたデータを元の順番に戻したい場合や、別々の要素をひとまとめにして同じ処理に流し込みたいだけなら、Mergeを使います。
でも、DispatchでTrueとFalseに振り分けたデータを別々に加工して、また元の順番通りに並べ直したい場合は、Dispatchで使ったのと同じTrue/Falseパターンを使ってWeaveで結合するのが正解です。
目的に合った結合方法を選ぶことで、思い通りのデータの流れを作ることができます。
分割と結合を組み合わせた実践テクニック
ここまでの知識を使うと、Grasshopperでもっと高度で柔軟なモデリングができるようになります。
分割と結合のコンポーネントは、単体で使うより組み合わせて使うことで本領を発揮します。
よくある実践例として、こんなシナリオを考えてみましょう。
ランダムに配置された複数のパネルのうち、特定の面積を超えるものだけを抽出して違う厚みを持たせ、最終的に1つのシステムとして統合する、というモデリングです。
**① 面積の計算と条件判定で分割**
まず各パネルの面積を計算して、基準値と比較してTrue/Falseのパターンを作ります。
これを「Dispatch」につなぐことで、基準を満たすパネルと満たさないパネルに論理的に分けます。
**② 個別の加工処理**
True側のパネルには厚みを増す押し出し処理を加えて、False側のパネルには薄いフレームを付けるといった、別々の加工をします。
**③ パターンの再利用で結合**
個別に加工した2つのパネル群を、ただの「Merge」で結合すると、大きなパネルが前半、小さなパネルが後半に偏ったリストになってしまいます。
そこで「Weave」を使って、Dispatchで使ったのと同じTrue/Falseパターンを入力することで、完全に元の並び順を保ったまま1つのリストに編み直せます。
このように、**DispatchとWeaveをセットで使う**「条件による分岐と統合」は、Grasshopperで最もスマートなデータの流れの作り方の1つです。
一方で、たとえば直線の両端の点だけを特別な処理に回したい場合は、Split List(またはList Itemでインデックス指定)で両端を物理的に取り出して、加工後にMergeでリストの末尾に追加する、といった方法が適しています。
目的の形に合わせて「インデックス操作」と「条件判定操作」のどちらが最適かを見極めて、リストの分割と結合を使いこなしてください。
これらを自在にコントロールできるようになれば、Grasshopperでのモデリングスキルは確実にワンランクアップしますよ。
広告
