前回は、はじめてDynamoを使用し球を作成しました。
今回は、Excelからデータを読み込み、その値をもとに球のジオメトリを作成してみたいと思います。
読み込むExcel
読み込むのは、上記のExcelです。
位置を指定するXYZと、半径を指定するRの値の一覧表です。
Excelデータを読み込むプログラムの作成
Excelデータを読み込むプログラムを作成します。
読みんだデータをもとに、球のジオメトリを作成しますが、前回作成したデータを流用します。
ImportExport-Data-ImportExcel
のノードを追加します。
ノードが追加されました。
ImportExcelは、Inputとして
- file
- sheetName
- readAsStrings
- showExcel
が必要です。
ImportExport-File System-File Path
ノードを追加します。
File Pathノードの「参照」をクリックして、読み込むExcelのパスを指定します。
Excelのパスが指定されました。
続いて、「sheetName」を指定します。
シート名は固定なので、作業スペースでダブルクリックし、Code Blockを追加します。
値をシート名の「座標」と指定しました。
readAsStrings:Excelのデータを文字列として読み込む
に関しては、座標値なのでいいえ。
showExcel:Excelを開く
に関しては、開く必要はないのでいいえを指定します。
上記2つはBoolean型のため、
Input-Basic-Boolean
より、Booleanノードを2つ追加します。
ImportExcelに必要なInputが揃ったので、ノードを接続します。
接続したところ、警告が表示されました。
一つ目の引数「file」の型が、System.IO.FileInfoのところ、Stirng型で入力されていることが原因のようです。
File Pathノードの後に、
ImportExport-File System-File From Path
を追加します。
File From Pathノードにより、Stirng型からSystem.IO.FileInfo型になり、警告が消えました。
これで、Excelからデータを読み込むプログラムが完了しました。
配列を整形するプログラムの作成
Excelから読み込んだデータは、配列として入力されます。
読み込んだ座標データをもとに球を作成するわけですが、処理しやすいように配列を整形します。
読み込んだデータは上記のようになっています。
まず、タイトル行が不要なため、配列を1行削除する処理を追加します。
List-Modify-DropItems
ノードを追加します。
DropItemsノードは、Inputとして配列と削除する行数が必要です。
Code Blockを追加して、削除する行数として1を指定します。
ノードを接続します。
不要だったタイトル行が削除されていることがわかります。
引き続き、処理がしやすいように配列の行と列を入れ替えます。
List-Organize-Transpose
ノードを追加します。
Transposeノードに接続することで、座標データの列と行の入れ替えが完了しました。
これで、配列の整形は完了です。
読み込んだデータをもとに、球のジオメトリを作成するプログラム
データの準備が完了したので、読み込んだデータをもとに球のジオメトリを作成するプログラムに接続します。
前回使用したプログラムを流用します。
前回、ByCenterPointRadiusの入力値であるradius(半径)はNumber Sliderを使用しましたが、今回は数値を読み込むため、Code Blockに変更しておきます。
XYZ値とR値を配列から抜き出します。
Code Blockの値を、
- X:IN[1]
- Y:IN[2]
- Z:IN[3]
- R:IN[4]
とそれぞれ変更します。
変更すると、球が複数作成されました。
Excelから取得した配列をもとに、座標値と半径が指定された球ジオメトリが作成されます。
今回作成したDynamoプログラム
作成したDynamoプログラムは以下の通りです。
今回はここまでとします。