Grasshopperでアルゴリズムを組んだ際、意図しない形でアルゴリズムが働くことがあります。そういった時、多くの場合はデータ構造が正しく作られていないことが原因となります。ここではGrasshopperを使用するために欠かすことのできない、”データ構造の仕組みと働き方の基礎知識”を解説いたします。
以下、順を追って確認してみたいと思います。
[Line]は、始点となるAから、終点となるBまで線を作成してくれるコンポーネントです。
[Point]の上で右クリックし、[Set One Point]で各々にRhinoの点1つずつ読み込んでみます。
読み込んだ点同士に線が作成されます。Rhinoデータの読み込みに関しては、下記リンクを参照ください。
https://www.applicraft.com/tips/rhinoceros/gh_set_internalise/
次に[Point]の上で右クリックし、[Set Multiple Points]で各々にRhinoの点2つずつ読み込んでみます。
読み込んだ点同士にそれぞれ線が作成されました。
では左側の点は変更せずに、右側の点だけRhinoの点を4つ読み込んでみます。
そうすると下図の楔型のような形で線が作成されました。
これはあるルールにより、コンポーネントが処理されているからになります。
下は、動画で撮った例です。
どうしてこういう形で線が引かれたか、そのルールとは、
・データのインデックス(並び)順に、コンポーネントの処理が行われる
・データの数が異なり、足りなくなった時は、最後のデータが代わりに処理をされる
というものになります。
インデックスとは?
インデックスとは、出席番号のようにデータごとにそれぞれ割り振られる番号になります。また出席番号であれば1から始まりますが、Grasshopperでは一般的なプログラムと同じように0番からで始まり、昇順で増えていきます。下記例では、A,B,Cの3つのデータそれぞれに、0,1,2番のインデックスが割り振られています。
データの中身は、[Panel]コンポーネントに接続することで、確認できます。
ルールを踏まえて下記の例を確認してみたいと思います。下の例では、左側に2つの点、右側に4つの点を[Line]につないでいます。その時、0-0、1-1、2-2と線を作成し、左側の点の3に対応する点が無いので、最後の点2が代わりに働き2-3に線が、同様の理屈で2-4に線が作成されます。
Rhino上に点の座標にインデックスの番号を表示したいときは、[Point List]を使いPointsに表示したい点を、Sizeに表示したい大きさを入力することで表示できます。
アイテムの数が不確定の場合も同様になります。
インデックスの順に線が作成され、足りなくなった場合は最後のインデックスが代わりに働きます。
[Series]で等差数列(同じ数だけ離れた複数の値)で、X方向に任意の数だけ増やした例です。
データの数に関係なく、データが足りなくなった場合は、最後のデータが代わりに働いているのが分かります。
これは、Grasshopperで単数のデータの一般的な働き方となります。
そのため、下記のようにデータの数が異なる足し算などする時には注意が必要です。
データの数が異なるので0+2、5+4が行われた後に、
Bに入力された最後の4が足りないデータの代わりをして足し算が行われるため、
10+0、15+0ではなく、10+4、15+4も行われます。
またあまり無い例かも知れませんが、入力端子が3つ以上の時も同様の理屈になります。
文字列を結合する[Concatenate]を使った例。
端子の数が3つの場合も同様にインデックスの順に働き、データの数が足りない場合、最後のデータが代わりに働きます。
そのため、この場合のインデックスの組み合わせとしては、0-0-0、1-1-1、1-2-2、1-3-2 となります。
実際のモデリングに近い例も見てみます。
点座標が5つ、半径値が3つある時、[Circle]で円を作成した例。
考え方は同様なので、0番の点に0.5Rの円を、1番の点に1Rの円を、2番、3番、4番の点に2Rの円が作成されます。
そのまま作成した円を、[Extrude]でZ方向に押し出した例。
押し出し量は4つなので、考え方は同様に、0番の円を1、1番の円を3、2番の円を5、3番と4番の円をZ方向に7、押し出しています。
この[データの働き方 – 基礎]でご紹介したことは、Grasshopperを使う上で必ず出てくるデータの働き方となります。
[Panel]はデータの中身を確認することができるため、おそらくGrasshopperで一番使用頻度が高いコンポーネントだと思われます。アルゴリズムがうまく働かなかった際は、作成されているgh定義ファイルに、[Panel]をつないで確認いただけたらと思います。
また次回更新予定の[データの働き方_応用]と併せて、ご理解いただけたらと思います。
補足:アイテムの数が変わってしまう時に、[Shortest List]などを使い、
あらかじめ少ないデータ数に合わせてデータ数を合わせる方法もあります。