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でのモデリングスキルは確実にワンランクアップしますよ。

広告