教程 3:地图控点

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

最终生成的建筑物场景

由于城市庞大而复杂,并且包含大量的形状和对象,因此难以同时控制一座建筑物的属性。 在本教程中,您将学习如何使用地图来控制城市的外观。

在 Inspector 中探索 CGA 参数

首先,您将在 Inspector 中查看 CGA 规则参数。

  1. Navigator 中打开 /scenes/ 文件夹中的 mapcontrolTutorial_01.cej 场景:
    包含地图和形状的场景
  2. 选择一个形状。

    当您在 Inspector 中探索形状时,可以看到尚未为该形状分配规则参数。

    未分配规则的形状

  3. 右键单击 Scene Editor 中的 Streetnetwork 图层并单击选择对象
  4. 接下来,您将为所选形状分配构建规则。

    可以通过多种方法将规则文件分配给形状。 执行以下操作之一:

    • 单击工具栏上的分配规则文件工具 分配规则
    • 单击 Inspector 中的分配按钮。
    • 单击主菜单中的形状 > 分配规则文件

    随即出现分配规则文件对话框。

  5. 单击 simpleBuildingShells_01.cga 规则,然后单击打开

    “分配规则文件”对话框

  6. 再次选择一个形状。
  7. 展开规则部分以查看规则属性。

    高度属性现在已分配给形状。

    Inspector 窗口显示了属性

  8. 单击规则文件链接以在 CGA 编辑器中打开 simpleBuildingShells_01.cga 规则文件。

    // height value
    attr height = 80

    height 属性用于定义建筑物的高度。

  9. 单击生成按钮 生成 (Ctrl+G) 以生成所选形状。
  10. 将高度值从 80 更改为 150

    高度为 150 的模型

    您为建筑物设置的高度值现在将覆盖规则参数。 所有其他形状仍将使用该规则中定义的高度值。

    打开 mapcontrolTutorial_02.cej 场景以查看场景的示例。

添加映射以控制高度

在本部分中,您将添加颜色映射以控制建筑物的高度参数。

  1. 如果尚未打开 mapcontrolTutorial_02.cej 场景,请将其打开。
  2. 选择建筑物周围的一些形状,然后单击生成按钮 生成 (Ctrl+G)。

    生成的建筑物

    所有建筑物的高度均为 80 米。 可以通过添加天际线来改善建筑物的外观。 但是,与在第一部分中手动设置 CGA 形状属性不同,您将使用以下红色天际线地图来控制建筑物的高度。

    红色高度地图
    高度的红色通道地图
    地形图
    地形图

    天际线地图上的红色通道表示该区域中建筑物的高度。 在对天际线地图和地形图进行比较时,可以看出在湖泊拐角附近形成了天际线。 城市的左上角还存在第二个中心。

  3. 通过单击主菜单中的图层 > 新建地图图层来创建地图图层。

    您也可以右键单击 Scene Editor 并单击新建 > 新建地图图层

  4. 选择映射并单击下一步
  5. 单击浏览并选择 /maps/ 文件夹中的 skylineMap.png 文件。
  6. 尺寸框更改为 3000 X 3000,并确保位置框设置为 0
  7. 取消选择保持比例按钮 保持比例 并确保对齐按钮 对齐位置 设置为中心。

    “映射”设置

  8. 右键单击映射部分并单击添加行

    映射对话框

  9. 单击属性框并将该属性命名为 skylineValue
  10. 通道设置为下拉列表中的 red 通道。
  11. 最小值设置为 20 并将最大值设置为 200

    这意味着建筑物高度应在 20(0% 红色)和 200(100% 红色)米之间变化。

    映射对话框

  12. 单击完成以创建地图图层。
  13. Inspector 中将新地图图层命名为 Skyline Map

    现在,可以使用天际线地图来控制规则 height 参数。

将天际线高度连接到地图

接下来,您需要将 skylineValue 属性连接到建筑物。

  1. 选择 Streetnetwork 图层中的所有形状。
  2. Inspector 中的 height 属性旁边,单击下拉菜单并选择连接属性

    连接属性

    随即出现属性连接编辑器对话框。

  3. 单击图层属性,然后选择新的 Skyline Map 图层和 skylineValue(Layer attribute) 属性。

    “属性连接编辑器”对话框

    有关详细信息,请参阅使用连接编辑器映射属性

  4. 单击确定
  5. 选择单个地块并查看其属性。

    height 属性值现在已连接到天际线地图

    已连接 Height 值

  6. 选择海湾周围的一些形状并生成建筑物。

    海湾周围的建筑物

    天际线的外观有所改善,但您可以通过修改 CGA 规则对其进行改进。

  7. 打开 simpleBuildingShells_02.cga 规则文件并找到以下函数:

    // calc height with variation
    getHeight(area) = 
    	case area > 600 : rand(0,40)+height
    	case area > 200 : rand(0,40)+height/2
    	else: rand(15,30)

    此功能不是将天际线地图中的高度值直接映射到建筑物高度,而是仅在大面积地块上创建高层建筑物并向建筑物添加随机性。 有关 CGA 的详细信息,请参阅基础形状语法教程。

  8. Scene Editor 中选择 Streetnetwork 图层。
  9. simpleBuildingShells_02.cga 规则拖动到所选形状上。

    注:

    将规则文件拖到形状上时,将自动生成模型。

    结果场景

使用土地利用类型控制地图

现在,您将学习如何使用颜色映射来控制每个建筑物的土地利用类型。 您将使用的地图按颜色对土地利用类型进行分类:红色为工业,蓝色为商业,绿色为住宅。

土地利用地图
土地利用地图
地形图
湖泊的地形图

  1. 打开 mapcontrolTutorial_03.cej 场景。
  2. Scene Editor 中关闭 Skyline Map 图层。
  3. 打开 simpleBuildingShells_03.cga 规则文件。

    在创建下一个地图图层之前,请找到规则中列出的属性。 在地图图层中创建图层属性时,您将使用相同的名称。

    // land use types
    attr t_industrial = 0
    attr t_commercial = 0
    attr t_residential = 0

  4. 单击图层 > 新建地图图层以创建地图图层。
  5. 选择映射并单击下一步
  6. 单击浏览并选择 areatypes.png
  7. 尺寸框更改为 3000 x 3000,并确保位置框设置为 0
  8. 取消选择保持比例按钮 保持比例 并确保对齐按钮 对齐位置 设置为中心。
  9. 属性下,添加与规则中相同命名的映射属性,并将通道框设置为红色、蓝色和绿色。

    映射属性

    保留默认的最小值和最大值 01

  10. 单击完成以创建地图图层。
  11. Inspector 中将图层命名为 LandUse Map
  12. 选择新的地图图层,然后单击 Inspector 中的图层属性

    Inspector 窗口显示了图层属性

  13. 选择 Streetnetwork 图层。
  14. 分配 simpleBuildingShells_03.cga 规则文件。

    该规则自动将图层属性连接到 LandUse Map

    Inspector 窗口显示了土地利用参数

  15. 在生成建筑物之前,请查看 simpleBuildingShells_03.cga 规则文件。 找到颜色声明和 landuseTypeColor 函数:

    土地利用的颜色类型:

    // color declarations
    red = "#ffaaaa"
    green = "#aaffaa"
    blue = "#aaaaff"
    white = "#ffffff"

    土地利用函数:

    // Functions
    landuseTypeColor = 
    	case t_industrial > t_commercial && t_industrial > t_residential : red
    	case t_commercial > t_industrial && t_commercial > t_residential : blue
    	case t_residential > t_industrial && t_residential > t_commercial : green
    	else : white

    此函数将分析来自土地利用地图的值,并相应地返回颜色。 如果来自地图的颜色通道值大于其他通道的值,则将返回相应的土地利用颜色。 Lot 规则将使用 color(landuseTypeColor) 操作:

    Lot -->
    	// prepare building ground size and pivot orientation
    	case geometry.isConcave : color(landuseTypeColor)LotSub(getHeight(geometry.area))	
    	else : color(landuseTypeColor) s('.8,'1,'.8) center(xz) LotSub(getHeight(geometry.area))

    color(landuseTypeColor) 操作将调用土地利用颜色函数,并且颜色将应用于生成的建筑物。

  16. 在场景中生成所有建筑物。

    最终生成的建筑物场景

    mapcontrolTutorial_04.cej 场景显示了最终场景。

在本教程中,您探索了将 CGA 规则应用于形状、使用地图控制高度以及使用三色映射按土地利用类型来控制建筑物的颜色。

要继续学习 CityEngine,请参阅完整的 CityEngine 教程目录