要访问 CityEngine 中的教程,请单击帮助 > 下载教程和示例。 在选择教程或示例后,系统会自动下载工程并将其添加到工作空间。

本教程将展示如何从 .csv 文件中导入数据,然后将其用于包含数组的 CGA 代码。
要演示 .csv 文件导入,您将使用相应规则,该规则用于将建筑物分割为多个楼层,并允许为每个楼层分配空间用途。 .csv 文件包含可用空间用途及其颜色和楼层高度的列表。 在 CGA 代码中,可将 .csv 文件中的数据读取到数组中,然后在检查器窗口中使用该数据来驱动规则和相应的 UI。
设置数据
要设置数据,请完成以下步骤:
- 在导航器窗口中展开 Tutorial_21_CSV_Import 教程文件夹。
- 打开 scenes 文件夹中的 Assign_Floor_Usages_01.cej 场景,视窗窗口中将显示 2D 建筑物覆盖区与 3D 建筑物质量:

- 使用 Lot 初始规则将 rules 文件夹中的 Assign_Floor_Usages_01.cga 规则文件分配给 2D 建筑物覆盖区。
- 使用 MassModel 初始规则将 Assign_Floor_Usages_01.cga 规则文件分配给 3D 质量模型。
- 同时选中 2D 建筑物覆盖区与 3D 建筑物质量。
- 在检查器窗口中,单击展开按钮
以查看 floor_usages 数组属性,该属性最初为空。 - 单击添加按钮
以向数组添加元素。 - 单击此按钮 5 次以使用默认用途 Residential Single-Family 创建 5 个楼层。

此时可观察到 3D 建筑物质量模型不会突破原定高度,而基于 2D 覆盖区生成的模型则使用默认用途 Residential Single-Family 成功创建了 5 个楼层。
- 在检查器窗口中右键单击最后一个数组索引元素(行),然后单击删除行以删除多余楼层。

- 在视窗窗口的可见性设置
中取消选中形状,以便更清晰地观察各楼层。
当前场景显示的规则采用默认用途 Residential Single-Family,建筑呈现灰色,默认层高为 2.85 米。

打开 Assign_Floor_Usages_02.cej 场景以参考相同的结果。
从 CSV 文件导入数据
为精确定义这些属性,请通过 CSV 表格填充数组并完成以下步骤:
- 打开 assets 文件夹中的 usages.csv 文件以查看空间用途数据:

第一列将列出空间用途,下一列包含每种用途的颜色和楼层高度。 此文件使用逗号和新的行分隔符格式化。 许多其他常用分隔符(包括逗号、分号、制表符和空格)也同样有效。
- 在 CGA 编辑器窗口中打开 Assign_Floor_Usages_01.cga 规则文件。
- 要从 usages.csv 文件中读取数据,请在 Constants 和 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 x 3,对应于数据文件中的行数和列数。 nRows 函数将返回数组中的行数。
- 重新定义 usages 属性并将其设置为数据数组的第一列:
@Hidden attr usages = usages_data[0:numUsages-1,0]方括号用于访问数组元素的子集。 在方括号内,将首先列出行,然后列出列。 0:numUsages-1 将返回从 0 到 14 的所有行。 逗号后的 0 表示第一列。 数组索引从 0 开始。
- 按 Ctrl+S 以保存 CGA 文件。
- 单击生成
或按 Ctrl+G,以在视窗窗口中生成模型。 - 在检查器窗口中,单击 floor_usages 数组中的每个元素,然后从下拉菜单中选择用途以更改每个楼层的用途。
- 与以下配置相匹配:
- 0 = 零售
- 1 = 办公室
- 2 = 多户型住宅
- 3 = 多户型住宅
该列表中的值来自 .csv 文件中的 usages 数组。 将在 CGA 规则文件中的属性定义上方的 @Enum 注记中定义此关系。
@Enum(valuesAttr=usages) attr floor_usages = stringArray()请参考 Assign_Floor_Usages_02.cga。
- 定义常量以存储其他两列的数据:
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 规则中,将两次出现的 default_color 替换为以下代码:
getUsageColor(floor_usages[floorInd]) - 按 Ctrl+Shift+S 以保存所有文件。
- 选择形状。
- 生成模型。

现在,该规则将使用已导入的 .csv 文件中的数据,根据每个楼层的指定用途来确定每个楼层的楼层高度和颜色。
创建仪表盘
要创建仪表盘以可视化每个用途的总建筑面积 (GFA),请完成以下步骤:
- 确保已打开 Assign_Floor_Usages_01.cej 场景。
- 再次打开 Assign_Floor_Usages_01.cga 规则文件。
- 修复报表,以便其使用相应的颜色来报告用途。 在 FloorMass 规则中,将 usages[0] 替换为以下代码:
floor_usages[floorInd] - 单击窗口 > 仪表盘。
- 单击添加图表
。 - 在图标和标题下,输入 GFA By Usage。
- 在报表下,单击 GFA:
- 在单位下,输入 sqm。
- 保留剩余输入的默认值,然后单击添加卡片以完成。

打开 Assign_Floor_Usages_03.cej 场景和 Assign_Floor_Usages_03.cga 规则文件以查看最终结果。
在本教程中,您学习了如何执行以下操作:
- 向属性添加数组数据。
- 从 .csv 文件导入数据以与 CGA 文件一起用于定义模型中的楼层数据,例如用途和颜色。
- 创建一个仪表盘以显示每种用途的 GFA。
要继续学习 CityEngine,请参阅完整的 CityEngine 教程目录。