見出し画像

【Grasshopper】Recordコンポーネントのクセの話

RhinocerosのプラグインであるGrasshopperはデータを入力して、アルゴリズムで作られたオブジェクトをライノに「焼きつける」ことができます。

その中に、複数のデータリストを入力した順番にスタックできる”Data Recorder(Rec)”コンポーネントがデフォルトで搭載されています。
入力したデータリストが出力側で順番にスタックされ、コンポーネントの右側にある「×」ボタンを押すとリストが全てリセットされ、左側の「●」ボタンを押すとコンポーネントのオン/オフが出来るシンプルな仕様のものです。

デフォルトのData Recorder(Rec)コンポーネント

このコンポーネントとは別に、Sasquatchというプラグインにも”Record Data(Record)”というコンポーネントがあります。

SasquatchのRecord Data(Record)コンポーネント

これは、デフォルトのオン/オフ機能とリセット機能がそれぞれBool値で入力できるようになっています。また、F端子にBool値を入れることで、予めリストを空にしておくか、今現在接続されているD端子のデータをデフォルトで保存しておくかを選択することができます。

Sasquatchの方が大きなプログラムを組む場合にボタンを押しに行く手間が少なく、機能が多い分、デフォルトよりもこちらを使っている方もいるかもしれませんが、これらのコンポーネントはレコード時の挙動が少し異なります。

次の動画はIntegerのリストをそれぞれレコードして、その挙動を比較したものです。

まず、”Data Recorder(Rec)”は、リストを入力した順番にインデックスの末尾にデータをつけ足していくようにレコードしていきます。
最初に入力したデータリストD1 = { {0}, N=10 }であれば、出力されるリストのインデックス番号は0~9となり、次に入力されるデータリストD2はインデックス番号が10から順番に付与されます。
対して、”Record Data(Record)”は初期設定で出力にグラフトが掛けられているため、同様にD1,D2のリストを入力すると、インデックスの順番が異なることに気が付きます。
動画内では、D1 = { {0}, N=10 }であったものがコンポーネント内で一度、
{ {i}, N=1 | i=0~10 }として各ブランチに振り分けられた後に、Flattenで再度元のデータ系に戻されている流れになります。

次はStringのリストを入力した場合の挙動です。

インデックスの順番は先ほどのIntegerの場合と同様ですが、データリスト全体の長さが異なることに気づいたかと思います。
よく見てみると、Mar-4とMar-5の文字列が消えてしまっているようです。
これは入力される複数のリストの長さが異なると、短いリストの長さに合わせて、先にレコードされていたリストの末尾のインデックスが消されてしまうようです。
試しにリストの長さを揃えてレコードをしてみた結果が次の画像です。

入力するリストの長さをどちらもN=10に揃えた場合

こちらは出力したリストの長さがどちらもN=20で揃っています。

機能面ではSasquatchのレコードコンポーネントの方が使い勝手が良い場面が多いかと思いますが、直近2年はプラグインの更新が無いようですので、使用上は出力に問題が無いか十分に注意が必要のようです。

-------------------------------------------------------------------------------------
SHIRAKU Inc-会社概要
仕事のご依頼
建築Tシャツ
Rhinoceros7-購入
-------------------------------------------------------------------------------------