【集中講座】Grasshopper: 点群データ CSVのインポート・エクスポートについて

Grasshopperでデータを扱う際、Panelコンポーネントに値を入力するのではなく、既にある点座標のデータ(CSV、TSV)や表形式でまとめたデータを読み込んで処理したい時があります。そんな時は、下記の手順を参照いただけたらと思います。


〇CSVデータのインポートについて 簡単な例
下記のような座標が入力されたCSVデータを、Grasshopperに読み込み点として作成してみたいと思います。

読み込む際に使用するコンポーネントは、下記のようになります。[File Path]でCSVファイルのパスを指定し、
[Read File]で実際にファイルを読み込み、読み込んだ座標を[Point]で点データとして作成します。

パスを指定する際は、[File Path]の上で右クリックし、[Select one existing file]を実行し、読み込みたいCSVを指定します。
この例では、Cドライブのtempフォルダの test.csvを指定しています。


〇CSVデータのインポートについて 応用例
次に下記のような、座標以外のデータも含まれたCSVを読み込んで、点を作成してみたいと思います。
この例では、座標値の上にX-Value、Y-Value・・といった一行と、data、別の値・・という一列が座標値以外に加わっています。

こういった形で複雑なデータの場合は、リストやテキストを修正し座標値のみ取り出します。
まず同様の手順で、[File Path]でパスを指定し、[Read File]でファイルを読み込みます。
ただし、ここでは一行目が必要ないので、[Cull Index]で最初の行にあたるインデックスの0番を削除しています。

次にX座標、Y座標、Z座標、別の値と順に並んでいるので、[Text Split]を使いカンマ(,)の前後でテキストデータを分割します。
分割されたデータは階層に分かれ、XYZ別の値の順にインデックスの0,1,2,3と並びます。

 [Text Split]から出力された値を、[List Item]を使いそれぞれ[Construct Point]のXYZの入力端子につなぐことで
点を作成できます。
[List Item]はコンポーネントに近づくことで + – のマークが現れ、押すことで端子の数を増減できます。
ここではiに0が入力されているので、+1からは1が、+2からは2のインデックスに該当するデータを出力できます。
  

またここでは、CSV(Comma Separated Value)を例に扱いましたが、TSV(Tab Separated Values)の場合は、
カンマではなくタブで値が分かれているため、[Text Split]の分割に指定する値をタブにすることで、
同様のアルゴリズムが作成できます。


〇CSVデータのエクスポートについて
次に作成したデータを、CSVに書き出してみたいと思います。
書き出す方法は、[Panel]の上で、右クリック > Stream Contensを実行し、ファイル名と拡張子を決め保存します。

ただこの例では、座標を[Panel]につないだ際、座標値が{    }で囲まれる形で記述されています。
座標値のみ出力したい場合は、座標値の前後の{ }を削除する必要があります。
[Replace Text]はFindに入れたテキストをReplaceに入力したテキストに置き換える働きをします。
この理屈を二度使って[Replace Text]で{ }をそれぞれブランク(何もないデータ)に置き換えることで{}を削除しています。

こうした形でテキストを修正すると、一番最後の[Panel]を右クリック>Stream Contents から
座標値のみをCSVで出力することができます。
テキスト・リストの操作を含めて、望んだ書式を作ることで、使いやすいデータとして出力することができます。

~2020 スキルアップ集中講座TOP~