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

本教程将展示如何从 CSV 文件中导入数据,然后将其用于包含数组的 CGA 代码。

要演示 CSV 文件导入,您将使用相应规则,该规则用于将建筑物分割为多个楼层,并允许为每个楼层分配空间用途。 CSV 文件包含可用空间用途及其颜色和楼层高度的列表。 在 CGA 代码中,可将 CSV 文件中的数据读取到数组中,然后在检查器中使用该数据来驱动规则和相应的 UI。

设置示例

  1. 打开 Assign_Floor_Usages_01.cej 场景。
  2. 使用 Lot 初始规则将 Assign_Floor_Usages_01.cga 规则文件分配给 2D 建筑物覆盖区。
  3. 使用 MassModel 初始规则将 Assign_Floor_Usages_01.cga 规则文件分配给 3D 质量模型。
  4. 同时选择两个形状。
  5. 检查器中,单击展开按钮 GUID-6C8E52D9-7A91-4BB6-B106-D31DC6DDD037-web 以展开 floor_usages 数组属性,该属性最初为空。
  6. 单击添加按钮 GUID-2804164E-3BA3-4ECC-9521-07AA24971680-web 以向数组添加元素。 单击此按钮 4 次以使用默认用途 Residential Single-Family 创建 4 个楼层。

    GUID-1058BA22-E09E-4B99-9441-DE19A93F39C7-web

    如果需要删除行,请右键单击每个元素一侧的灰色数组索引,然后单击删除行

    GUID-C4007EFB-4985-4F20-838F-A68F355FB783-web

    此规则将应用于 2D 建筑物覆盖区(左)和 3D 质量模型(右)。 在此初始状态下,该规则将具有分配给每个楼层的默认用途、颜色和楼层高度。

    GUID-0F1A4145-4DCB-4464-A96E-3C77846F3D7D-web

从 CSV 文件中导入数据

要从 CSV 文件中导入数据,请完成以下步骤:

  1. 打开 Assign_Floor_Usages_02.cej 场景。
  2. 打开 Assign_Floor_Usages_02.cga 规则文件。
  3. 查看 /assets/usages.csv 下的 CSV 文件中存储的空间用途数据。

    第一列将列出空间用途,下一列包含每种用途的颜色和楼层高度。 将使用逗号和新的行分隔符对此文件进行格式化,但许多常用分隔符(包括逗号、分号、制表符和空格)也同样有效。 Excel 文件如下所示:

    GUID-15A8B152-780A-42E2-B04E-A1A4C9043BA5-web

  4. 要从 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 函数将返回数组中的行数。

  5. 重新定义 usages 属性并将其设置为数据数组的第一列。 方括号用于访问数组元素的子集。 在方括号内,将首先列出行,然后列出列。 0:numUsages-1 将返回从 0 到 14 的所有行。 逗号后的 0 表示第一列。 数组索引从 0 开始。
    @Hidden
    attr usages = usages_data[0:numUsages-1,0]

     

  6. 检查器中,单击 floor_usages 数组中的每个元素,然后从下拉菜单中选择用途以更改每个楼层的用途。 该列表中的值来自 CSV 文件中的 usages 数组。 将在属性定义上方的 @Enum 注记中定义此关系。
    @Enum(valuesAttr=usages)
    attr floor_usages = stringArray()

     

    GUID-294AB412-4D78-4806-8D37-24F30C90D2C7-web

  7. 定义常量以存储其他两列的数据。 可以在 usages 定义下方添加这些行。 floatArray 函数可将字符串数组转换为浮点数组。
    const colors = usages_data[0:numUsages-1,1]
    const floor_heights = floatArray(usages_data[0:numUsages-1,2])

     

  8. 编写函数以获取给定用途的颜色或楼层高度。
    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]

     

  9. 可以使用该数据以获取每种用途的正确楼层高度。 在 CreateFloorFloorMass 和 SplitMassModel 规则中,将 default_floor_height 替换为以下代码:
    getFloorHeight(floor_usages[floorInd])

     

  10. 可以使用该数据,根据每个楼层的用途对其进行着色。 在 FloorMass 规则中,将两次出现的 default_color 替换为以下代码:
    getUsageColor(floor_usages[floorInd])

     

  11. 按 Ctrl+S 以保存 CGA 规则文件。
  12. 选择形状。
  13. 单击生成
    GUID-85AEF08F-ABEB-4596-AE65-3E6B0AEB975F-web
    GUID-49902CA8-8EBF-4D3E-BFF3-D043D3CC56B3-web

    现在,该规则将使用已导入 CSV 文件中的数据,根据所指定每个楼层的用途来确定每个楼层的楼层高度和颜色。

创建仪表盘

要创建仪表盘,请完成以下步骤:

  1. 修复报表,以便其使用相应的颜色来报告用途。 在 FloorMass 规则中,将 usages[0] 替换为以下代码:
    floor_usages[floorInd]

     

  2. 保存 CGA 规则文件并再次生成模型。
  3. 创建仪表盘卡片以可视化每个用途的总建筑面积 (GFA)。
    1. 单击窗口 > 仪表盘
    2. 单击添加图表
    3. 单击条形图
    4. 图标和标题下,键入 GFA By Usage
    5. 报表下,单击 GFA.*
    6. 单位下,键入 sqm
    7. 单击添加卡片以完成操作。
    GUID-A8F0390F-5481-497F-8691-4404788E42F2-web
    GUID-2D477F37-8A3F-499A-8226-272B1FBDF69A-web