チュートリアル 21: CSV のインポート
チュートリアル データ
チュートリアル データは、[Help] メニュー → [Download Tutorials and Examples…] を選択し、[CityEngine Tutorial] からダウンロードできます。

概要
このチュートリアルでは、CSV ファイルからデータをインポートし、配列を使用して CGA コードで利用する方法を学習します。 CSV ファイルをインポートするには、建物をフロア毎に分割し、各フロアにスペース使用用途を割り当てられるルールを使用します。CSV ファイルには、使用可能な用途の一覧と、その色、およびフロアの高さが含まれています。CGA コードでは、この CSV ファイルのデータが配列に読み込まれ、[Inspector] ウィンドウでルールと対応する UI を動作させるために使用されます。
Part 1: データのセットアップ
データをセットアップするには、次の手順を実行します。
- [Navigator] ウィンドウで Tutorial_21_CSV_Import チュートリアル フォルダーを展開します。
- scenes フォルダー内の Assign_Floor_Usages_01.cej シーンを開きます。すると、2D の建物フットプリントと 3D の建物ボリュームが [Viewport] ウィンドウに表示されます。

- rule フォルダーにある Assign_Floor_Usages_01.cga ルール ファイルを Lot スタート ルールを使って 2D 建物フットプリントに割り当てます。
- Assign_Floor_Usages_01.cga ルール ファイルを、MassModel スタート ルールを使って 3D マス モデルに割り当てます。
- 2D 建物フットプリントと 3D 建物マス モデルの両方を選択します。
- [Inspector] ウィンドウで [Expand] ボタンをクリックし、最初は空になっている floor_usages 配列属性を表示します。[Add] ボタンが表示され、配列に要素を追加できるようになります。
- [Add] ボタンを 5 回クリックして、デフォルトの用途「Residential Single-Family」を持つ 5 つのフロアを作成します。

3D 建物マスは、元のモデルで事前に定義された高さを超えないことに気付くでしょう。一方、2D フットプリントから生成されたモデルは、デフォルトの用途である「Residential Single-Family」を持つ 5 つのフロアを作成します。
- [Inspector] ウィンドウで、最後の配列インデックス要素 (行) を右クリックし、[Delete row] をクリックして、余分なフロアを削除します。

- [Viewport] ウィンドウの Visibility settings で、[Shapes] のチェックを外すと、各フロアをより明確に見ることができます。

現在のシーンでは、デフォルトの用途が「Residential Single-Family」のルールが適用されており、建物はグレーの色で表示され、フロアの高さはデフォルトで 2.85 m になっています。

Assign_Floor_Usages_02.cej シーンを開き、同じ結果を参照します。
Part 2: CSV ファイルからデータをインポート
これらの属性をより明確に定義するために、CSV テーブルを使用して配列を入力し、次の手順を実行します。
- assets フォルダー内の usages.csv ファイルを開き、空間用途データを表示します。

最初の列には空間用途が一覧表示され、次の列には各用途に対応する色とフロアの高さが含まれています。 このファイルは、カンマと改行によって区切られています。その他、カンマ・セミコロン・タブ・スペースなど多くの一般的な区切り文字も使用できます。
次に、このテーブルの情報を使って配列を入力します。
- [CGA Editor] ウィンドウで Assign_Floor_Usages_01.cga ルール ファイルを開きます。
- usages.csv ファイルからデータを読み込むために、Constants and Functions セクション内の default_floor_height の定義の後に 次のコードを追加します。
// read usages data from csv file
const usages_filename = "usages.csv"
const usages_data = readStringTable(usages_filename)
const numUsages = nRows(usages_data)readStringTable 関数は CSV ファイルのデータを読み込み、文字列配列として返し、usages_data に格納します。この配列のサイズは 15 × 3 で、これはデータファイルの行数と列数に対応しています。 nRows 関数は配列の行数を返します。
- usages 属性を再定義し、データ配列の 1 列目 (用途名) を設定します。
@Hidden
attr usages = usages_data[0:numUsages-1, 0]括弧 [ ] 内は「行、列」を意味します。 0:numUsages-1 は 0〜14 行すべてを選択しており、0 は最初の列を表します。 配列インデックスは 0 から始まります。
- Ctrl+S で CGA ファイルを保存します。
- [Generate] (Ctrl+G) をクリックして [Viewport] ウィンドウにモデルを生成します。
次に、それぞれの建物を個別に選択し、[Inspector] ウィンドウでフロア用途を更新します。
- [Inspector] ウィンドウで floor_usages 配列の各要素を選択し、ドロップダウンから用途を選択します。
- 次の構成に合わせて設定してください。
- 0 = Retail
- 1 = Office
- 2 = Residential Multi-Family
- 3 = Residential Multi-Family
リスト内の値は、CSV ファイルの usages 配列から読み込まれています。 この関係は、CGA ルール ファイル内の属性定義の上にある @Enum アノテーションで指定されています。
@Enum(valuesAttr=usages)
attr floor_usages = stringArray()参考として Assign_Floor_Usages_02.cga を確認してください。
- 残りの 2 つの列 (色、フロア高さ) を格納する定数を定義します。
const colors = usages_data[0:numUsages-1, 1]
const floor_heights = floatArray(usages_data[0:numUsages-1, 2])これらの行は @Hidden セクション内の usages 定義の下に追加します。 floatArray 関数は、文字列配列を浮動小数点配列に変換します。
- 指定した用途に応じた色またはフロア高さを取得する関数を作成します。
getUsageColor(usage) = _getUsageColorFromIndex(findFirst(usages, usage))
_getUsageColorFromIndex(usageInd) =
case usageInd==-1: default_color
else: colors[usageInd]
getFloorHeight(usage) = _getFloorHeightFromIndex(findFirst(usages, usage))
_getFloorHeightFromIndex(usageInd) =
case usageInd==-1: default_floor_height
else: floor_heights[usageInd]- 各用途に対して適切なフロア高さを取得するために、データを使用します。 CreateFloor、FloorMass、SplitMassModel の各ルール内にある default_floor_height を、次のコードに置き換えます。
getFloorHeight(floor_usages[floorInd])- 用途に応じて各フロアに色を付けるために、データを使用します。 FloorMass ルール内にある 2 か所の default_color を、次のコードに置き換えます。
getUsageColor(floor_usages[floorInd])- Ctrl+Shift+S を押してすべてのファイルを保存します。
- シェープを選択します。
- モデルを生成します。

このルールは、インポートした CSV ファイルのデータを使用して、 各フロアに指定された用途に応じたフロアの高さと色を決定するようになりました。
Part 3: ダッシュボードの作成
各用途ごとの延べ床面積 (GFA) を可視化するダッシュボードを作成するには、次の手順を実行します:
- Assign_Floor_Usages_01.cej シーンが開いていることを確認します。
- Assign_Floor_Usages_01.cga ルール ファイルを再度開きます。
- レポートが用途とその対応する色を正しくレポートするように修正します。FloorMass ルール内の usages[0] を、次のコードに置き換えます。
floor_usages[floorInd]- [Window] → Dashboard をクリックします。
- [Add a Chart] をクリックします。
- Icon & Title の欄に GFA By Usage と入力します。
- Report で GFA をクリックします。
- Unit に sqm と入力します。
- 残りの入力項目は既定値のままにして、[Add Card] をクリックして完了します。

Assign_Floor_Usages_03.cej シーンと Assign_Floor_Usages_03.cga ルール ファイルを開き、最終結果を確認します。
このチュートリアルでは、以下のことを学習しました。
- 属性に配列データを追加する方法
- CSV ファイルからデータをインポートし、用途や色など、モデル内のフロアデータを CGA ファイルで定義する方法
- 各用途ごとの GFA を表示するダッシュボードを作成する方法