第1回 Excelとグラスホッパーの繋げ方

0.はじめに


第1回では、Excelのデータをグラスホッパーに読み込ませ、そのデータでモデリングし、結果として得られた情報をまたエクセルに戻す、ということをやってみたいと思います。今回の学習で必要となる項目は以下の3項目です。

 

1. パラメトリックモデリング入門

2. GhExcelの使い方

3. 文字データの操作

 

 

今回のゴールのイメージです。

 

ほとんどの方が今回初めてグラスホッパーをさわると思いますが、手順に従って進めていけば誰でもゴールに辿り着けます。頑張っていきましょう。実務で使う場合はモデリングしたデータをExcelで出力するか、Excelのデータでモデリングするのか、片道で使われる場合が多いかと思いますが、今回は練習としてExcel→モデリング→Excelという往復をやってみたいと思います。

 

 

1.パラメトリックモデリング入門


 

まず、簡単なパラメトリックモデリングをやってみたいと思います。まずはExcelを使わずに、適当な面を分割してみます。ライノ上で平らな四角形を描いて、これをベースにします。

 

 

 

この四角形をグラスホッパーでGeometryコンポーネントに読み込み、「Boundary」で面を張ります。

 

 

これをパネル分けします。面を分割するには2方向に区切る必要があるため2次元のドメイン(区切る範囲)が必要となります。今回は、1次元のドメインを2つ使うことで2次元のドメインをつくります。1次元のドメインとは、例えば1から5とか、3から11とか、直線で表せるものです。これに対し2次元のドメインは、片方の軸は1から5でもう片方は2から3というように、面的に2つの軸で表します。この2つの軸をUVという言い方をします。

 

 

今回は、分割数に応じて連続したドメインを作りたいので「Divide Domain」を使います。一辺の始点から終点までを0から1として、少数で範囲を区切るイメージです。0から0.2だと、全体の1/5の範囲になります。Iのインプットはデフォルトで0-1のドメインになっているので、何もいれなくても大丈夫です。上の図のように片方(U)は4つのドメイン、もう片方(V)は5つのドメインにするためには、以下のようにコンポーネントを繋げます。

 

 

これの片方をGraftして総当たりで掛け合わせ、「Construct Domain2」に入れると、以下のような2次元のドメインがつくられます。Graftに関しては第0回でお話しましたが、別のページで解説しています)

 

 

 

このUとVで表される2次元のドメインを使って、「Iso Trim」に繋げ、先程つくった面を分割します。ドメインは0-1が基準になっているので、IsoTrimのサーフェスのインプットは「Reparameterize」をします。

 

 

 

上のパネルに表示されたドメインのルールで、下のように面が分割されます。例えば一番左下は、u:{0 to 0.2} v:{0 to 0.25}の面になります。

 

 

これを「Unit Z」と「Extrude」で押し出すと、パネル分けされた立体ができます。20個のパネルに対し1つのベクトル(Z)を入力すると、すべて同じZで押出しが行われます。

 

 

 

UVのパラメータ(分割数)を変えれば、モデルをパラメトリックに動かすことができます。

 

 

ここまでで、パラメトリックモデリングの基本的な方法を学びました。

 

2.GhExcelの使い方


グラスホッパーにはデフォルトではExcelと連携する機能がついていないため、第0回で紹介した「プラグイン」を使います。プラグインを使えば、例えばProcessingやVVVVと接続することもできます。プラグインはPython、C#、VBの3つプログラミングのいずれかで自分で開発することができますが、汎用的なものはインターネット上にオープンソースで上がっており、大抵は無料でダウンロードすることができます。ほとんどのプラグインはグラスホッパー公式サイトに上がっています。

 

今回使用するプラグインは「GhExcel」というものです。サイトからプラグインをダウンロードするにはユーザー登録が必要(メールアドレスだけで登録可)なので、今回は下からダウンロードしてください。

 

 

GhExcelはダウンロードしたファイルをグラスホッパーのカンバス上にドラッグ&ドロップするだけで、簡単にインストールすることができます。(プラグインのインストール方法は様々で、インストーラーを使う方法等があります。)

 

 

無事にインストールされると、タグに「GhExcel」と出て、3つのコンポーネントが増えます。

 

 

 

では、早速インストールしたGhExcelを使ってみましょう。まずライノから一旦離れて、Excelを起動します。Excelファイルの場所が重要になってくるので、今回はわかりやすくデスクトップに置くことにします。「ghexcel.xlsx」という名前で保存します。

 

 

このExcelファイルの中のデータを読み込むわけですが、今回は入門ということで、読み込みやすいような状態でシンプルな数字の羅列を打ちます。

 

 

打ち込んだら一旦保存して、グラスホッパーに移ります。

GhExcelの3つのコンポーネントのうち、「ExcelStaticRead」のコンポーネントを選びます。このコンポーネントは、「Path(ファイルの場所)」、「Connect(読み込みのオン・オフ)」、「Sheet(読み込むシートの番号)」、「Range(範囲)」の4つのインプットがあります。これらを適切に入力すると「Output」にExcelのデータが出てきます。今回必要な入力は、PathとConnectだけで、Sheetはデフォルトの1番、RangeはデフォルトのAllで、そのままで大丈夫です。

 

 

まずPathの入力を見てみましょう。黄色のコンポーネントの名前は「Panel」で、カンバス上でダブルクリックし、「//」と入力すると出てきます。ここにファイルの場所を入力するわけですが、ファイルの場所は先程保存したデスクトップのExcelファイルの上で右クリック→プロパティから確認できます。

 

 

 

この場所の文字列はPCによって違う可能性があるので、自分のファイルの場所を各自確認してください。確認した場所に「\ghexcel.xlsx」と加えればPathは完成です。僕のPC上では、「C:\Users\PC\Desktop\ghexcel.xlsx」となりました。

 

Connectにつながっているのは「Boolean Toggle」というコンポーネントで、これのボタンを押すことで読み込みのオン・オフを切り替えることがでます。(ここでオフ(False)にすると、元のExcelファイルが閉じられてしまうので注意です。Excelのデータを変更した場合、ワイヤーつなぎ直すことで更新するとスムーズです。)

 

PathとConnectに入力すると、OutputのところにExcelのデータが出てきます。これで入力はひとまず完成です。次に、グラスホッパーで作った簡易なデータをExcelに出力してみます。

 

 

パネルを開き、1~5の数字を改行していれていきます。そして、このままではこれらの数字は1つのカタマリとして認識されているので、Panelの上で→クリックをして「Multiline Data」をオンにします。

 

 

 

すると、データは改行に応じて分割され、5つのデータとして認識されるようになります。

 

 

この5つの数字をExcelに出力してみましょう。出力につかうコンポーネントは「ExcelWrite」です。ExcelStaticReadとの違いは1つだけで、「Data」というインプットがあります。ここに今作った5つの数字を繋げます。Pathにはファイル名を少しだけ変えたものを繋ぎ、出力用の新しいファイルが自動でつくられるようにします。

 

 

今回は出力用のファイル名は「ghexcel_2.xlsx」としました。Toggleを押してTrueにすると、新しいファイルがデスクトップ上につくられ、1から5の数字がExcelに出力されます。

 

 

 

ここまでで、Excelとグラスホッパーでデータの入出力をする方法を学びました。

 

 

3.文字データの操作


パラメトリックモデリングとGhExcelのそれぞれの方法を学んだので2つを繋げてみます。先程つくったモデルの押出し距離を、GhExcelから入力した数字に置き換えてみます。

まず読み込んだExcelのデータには「1列目」といったノイズが含まれているので、これを除きます。ここで使うのが「Cull Index」です。

 

 

 

「Cull Index」は各ブランチの指定したインデックス(番号)のアイテムを削除します。インデックスは0から始まります。「1列目」、「2列目」という消したいアイテムは全て0番なので、0を設定します。これにより、5つの数字が4つのブランチそれぞれに入っている状態になります(一番右)。このひとつのパネルに表されるデータ全体のことをツリーと呼びますが、このツリーは、パネルのツリーと同じ構成になっています。

 

 

 

どちらも4つのブランチそれぞれに5つのアイテムが入っているので、2つのツリーを重ね合わせれば、綺麗に20個ずつのデータがマッチして各パネルに対して各ベクトルで押し出しが行われます。

 

 

 

今回は簡単な例として、押し出されたそれぞれのブロックの体積を測定しExcelで表にしたいと思います。

 

まず、体積を測るために「Volume」を使います。

 

 

Volumeコンポーネントは、体積を測ると同時に中心点(C)も出してくれます。体積は小数点が非常に細かく出るので、今回はこれを整数として出力することにします。「int」は入力された値の小数第一位を四捨五入し、整数にします。

 

このデータをExcelに出力したいわけですが、今回は体積を出したので、「体積(mm3)」という文字をExcelのマスに表示させてみます。まず、このまま出力した場合、Excelでは以下のように表示されます。

 

 

つまり、グラスホッパーのブランチと、Excelの列が対応していることがわかります。Excelで一番左上に「体積(mm3)」という文字を入れるためには、新たなブランチを先頭に入れて、インデックス0に「体積(mm3)」という文字データを入れておけば良い、ということです。

ツリーの操作は様々な方法がありますが、今回は「Explode Tree」と「Entwine」を使います。

 

 

Explode Treeは、複数のブランチでできたツリーを分解し1つ1つのブランチを取り出します。Entwineは、複数のブランチを統合し、1つのツリーにします。Entwineで統合するときに、先頭に「体積(mm3)」とパネルに打ち込んだデータを入れれば大丈夫です。ここで、「体積(mm3)」を単なる文字データではなく、5つずつのデータが入ったブランチと同じ階層(つまり、データが入った箱の状態)にするためにGraftを行います。Graftしないと、1つ目のブランチに自動で入ってしまいます。

 

出力データを作ったら、ExcelWriteで出力して終了です。

 

 

 

 

Excelに、モデルから算出した体積データを出力することができました。

全体のコードは ↓ からダウンロードできます。

 

これを応用すると、パラメトリックなモデリングをして、どのように表面積、曲率、部材数が変わるか等、一括でExcelにまとめることができます。

 

 

5.今回のまとめ


第1回は、Excelのデータとグラスホッパーのモデリングを連携させてみました。

 

1.GhExcelの使い方


(1)プラグインのインストール
(2)パスの設定
(3) Multiline Data
(4) Toggleでオン・オフ

 

2.パラメトリックモデリング入門


(1)ドメインとIso Trimで面を分割
(2)Cull Indexでデータ整理
(3)Extrudeで押し出し

 

3.文字データの操作


(1)Volumeで体積を測る
(2)intで四捨五入
(3)Explode TreeとEntwineでデータ整理

 

6.宿題


下の図のように球を分割してできる各面の面積をExcelでまとてください。

分割数は縦6分割、横10分割とします。

 

 

*質問・要望等がありましたら、コメント欄かSlackでお願いします。

Leave a Comment