要访问 CityEngine 中的教程,请单击帮助 > 下载教程和示例。 在选择教程或示例后,系统会自动下载工程并将其添加到工作空间。
本教程将展示如何从 CSV 文件中导入数据,然后将其用于包含数组的 CGA 代码。
要演示 CSV 文件导入,您将使用相应规则,该规则用于将建筑物分割为多个楼层,并允许为每个楼层分配空间用途。 CSV 文件包含可用空间用途及其颜色和楼层高度的列表。 在 CGA 代码中,可将 CSV 文件中的数据读取到数组中,然后在检查器中使用该数据来驱动规则和相应的 UI。
设置示例
- 打开 Assign_Floor_Usages_01.cej 场景。
- 使用 Lot 初始规则将 Assign_Floor_Usages_01.cga 规则文件分配给 2D 建筑物覆盖区。
- 使用 MassModel 初始规则将 Assign_Floor_Usages_01.cga 规则文件分配给 3D 质量模型。
- 同时选择两个形状。
- 在检查器中,单击展开按钮 以展开 floor_usages 数组属性,该属性最初为空。
- 单击添加按钮 以向数组添加元素。 单击此按钮 4 次以使用默认用途 Residential Single-Family 创建 4 个楼层。
如果需要删除行,请右键单击每个元素一侧的灰色数组索引,然后单击删除行。
此规则将应用于 2D 建筑物覆盖区(左)和 3D 质量模型(右)。 在此初始状态下,该规则将具有分配给每个楼层的默认用途、颜色和楼层高度。
从 CSV 文件中导入数据
要从 CSV 文件中导入数据,请完成以下步骤:
- 打开 Assign_Floor_Usages_02.cej 场景。
- 打开 Assign_Floor_Usages_02.cga 规则文件。
- 查看 /assets/usages.csv 下的 CSV 文件中存储的空间用途数据。
第一列将列出空间用途,下一列包含每种用途的颜色和楼层高度。 将使用逗号和新的行分隔符对此文件进行格式化,但许多常用分隔符(包括逗号、分号、制表符和空格)也同样有效。 Excel 文件如下所示:
- 要从 CSV 文件中读取数据,请在常量和函数部分中的 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 属性并将其设置为数据数组的第一列。 方括号用于访问数组元素的子集。 在方括号内,将首先列出行,然后列出列。 0:numUsages-1 将返回从 0 到 14 的所有行。 逗号后的 0 表示第一列。 数组索引从 0 开始。
@Hidden attr usages = usages_data[0:numUsages-1,0]
- 在检查器中,单击 floor_usages 数组中的每个元素,然后从下拉菜单中选择用途以更改每个楼层的用途。 该列表中的值来自 CSV 文件中的 usages 数组。 将在属性定义上方的 @Enum 注记中定义此关系。
@Enum(valuesAttr=usages) attr floor_usages = stringArray()
- 定义常量以存储其他两列的数据。 可以在 usages 定义下方添加这些行。 floatArray 函数可将字符串数组转换为浮点数组。
const colors = usages_data[0:numUsages-1,1] const floor_heights = floatArray(usages_data[0:numUsages-1,2])
- 编写函数以获取给定用途的颜色或楼层高度。
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+S 以保存 CGA 规则文件。
- 选择形状。
- 单击生成。
现在,该规则将使用已导入 CSV 文件中的数据,根据所指定每个楼层的用途来确定每个楼层的楼层高度和颜色。
创建仪表盘
要创建仪表盘,请完成以下步骤:
- 修复报表,以便其使用相应的颜色来报告用途。 在 FloorMass 规则中,将 usages[0] 替换为以下代码:
floor_usages[floorInd]
- 保存 CGA 规则文件并再次生成模型。
- 创建仪表盘卡片以可视化每个用途的总建筑面积 (GFA)。
- 单击窗口 > 仪表盘。
- 单击添加图表。
- 单击条形图。
- 在图标和标题下,键入 GFA By Usage。
- 在报表下,单击 GFA.*。
- 在单位下,键入 sqm。
- 单击添加卡片以完成操作。