教程 5:导入初始形状

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

从 shapefile 和地理数据库导入形状

本教程介绍了如何导入 shapefile 和地理数据库。

将 shapefile 导入 CityEngine

  1. 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。
  2. 在“文件导航器”中,找到 data/shp_footprints/ 文件夹中的 footprints.shp 文件。
  3. 将文件拖放到视窗中。
  4. 使用以米为单位的原始数据导入数据而无需进行投影。

对象属性

CityEngine 通过 shapefile 导入属性。

  1. 选择单个覆盖区。
  2. 对象属性显示在检查器的对象属性窗格中。
    检查器的“对象属性”窗格

分配规则文件并生成模型

现在,您将在导入的覆盖区上生成简单的拉伸。 extrude.cga 规则文件使用高度对象属性将覆盖区拉伸到定义的高度。

  1. 打开规则文件并找到以下代码:
  2. attr height = 10
    
    @StartRule
    Lot --> extrude(height)
  3. 在 3D 视窗中选择所有覆盖区。
  4. 通过拖放分配规则。
  5. 观察如何生成建筑物。
    已生成建筑物
  6. 或者,打开 footprints_from_shp.cej 文件以查看完成的场景。

从文件地理数据库导入

从文件地理数据库导入数据与 shapefile 导入相类似。

  1. 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。 在“文件导航器”中,找到数据文件夹中的文件地理数据库文件夹 footprints.gdb。
  2. 注:

    .gdb 文件格式在导航器中显示为文件夹。

  3. 将 footprints.gdb 文件夹拖到 3D 视窗中。
  4. 随即将出现一个对话框,允许您从地理数据库中选择要导入的图层。
    导入期间,CityEngine 会提示您选择场景坐标系。 对话框中建议的坐标系取自地理数据库中的数据。
  5. 单击完成以导入选定的图层。

提供的地理数据库中的数据集与 shapefile 内容相同。 现在,您可以将上述 shapefile 步骤应用于文件地理数据库导入。

导入具有其他 CGA 属性的 PolylineZ 形状

  1. 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。
  2. 在“文件导航器”中,找到 data/sphereCity_shp/ 文件夹中的 sphereCity.shp 文件。
  3. 将文件拖入 3D 视窗。
  4. 导入期间,CityEngine 会提示您为 sphereCity.shp 文件选择数据坐标系(shapefile 的投影)。 shapefile 中的数据以米为单位,并且未进行地理配准,因此请选择以米为单位的原始数据
    选择 shapefile 数据坐标系对话框
    sphereCity.shp 文件没有 .prj 文件,因此 CityEngine 还会提示您定义场景坐标系。 选择场景坐标系对话框允许您执行此操作。
  5. 选择以米为单位的原始数据。 通过对数据和场景使用相同的坐标系,导入时不会对数据应用任何重新投影。
    选择场景坐标系对话框
  6. 名为 Shapes sphereCity 的新建形状图层将显示在“场景编辑器”中,并且覆盖面形状在 3D 视窗中可见。
    此 shapefile 数据中的面具有 Z 值,因此将在 CityEngine 中产生 3D 形状。
    在 CityEngine 视窗中显示的 3D 形状

属性

此数据集中定义了两个特殊属性:

  • 规则文件
  • startRule
注:

在 GIS 应用程序中使用此特定语法来定义导入后直接分配的规则文件和初始规则。 通过这种方式,您可以通过不手动分配它们来节省时间。 这是一种特殊的导入行为。

GIS 应用程序中的属性表将类似于以下内容:

属性表的屏幕截图

  1. 选择单个形状(球体的一个面)。
  2. 对象属性显示在检查器的对象属性窗格中。
    导入期间会自动分配规则文件和初始规则。
    规则文件和初始规则对象属性

现在,您可以直接生成模型。

生成模型

  1. 在 3D 视窗中选择所有 sphereCity 的形状。
  2. 生成建筑物。
    已在 3D 视窗中生成建筑物

更改初始规则

更改各个形状的初始规则以更改生成的模型。

  1. 在 3D 视窗中选择模型。
  2. 在检查器中,单击“初始规则”选择按钮。

    随即显示设置初始规则对话框。

  3. 设置初始规则对话框中,选择商业作为新的初始规则。 StartRules(CGA 代码中带有 @StartRule 标记的规则)以粗体显示。
    “设置初始规则”对话框
    已在 3D 视窗中生成建筑物

从 OBJ 导入形状

OBJ 导入

  1. 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。
  2. data/obj/ 文件夹中找到并选择 pompeii_footprints.obj 文件。
  3. 右键单击文件,然后选择导入

    随即显示 OBJ 导入对话框。

  4. OBJ 导入对话框中,取消选中作为静态模型导入
    OBJ 导入对话框
  5. 单击完成
    导入的 OBJ 文件

分配规则文件并生成模型

现在,您将在导入的覆盖区上生成简单的拉伸。 extrude.cga 规则文件使用高度对象属性将覆盖区拉伸到定义的高度。

  1. 在 3D 视窗中选择所有覆盖区。
  2. 在“文件导航器”中,在工程的规则文件夹中找到 extrude.cga 规则文件,并将其拖到 3D 视窗中的选定覆盖面上。
    规则文件会将所有覆盖面拉伸到 10 高度。

形状与静态模型

OBJ 和 Collada DAE 文件可以导入为形状或静态模型,如下所示:

  • 形状 - 用作 CGA 生成的基础。 典型示例是覆盖面数据。
  • 静态模型 - 导入后可以缩放、旋转和平移,但不能使用 CGA 进行进一步处理。 典型示例是地标模型。

可根据需要,打开 footprints_from_obj.cej 以查看完成的场景。

导入体积

将体积导入为形状

在某些情况下,在外部应用程序中为体积进行建模比使用 CGA 语法对其进行描述更加容易。 本部分显示如何将原始建筑物体积(Maya 建模)导入 CityEngine,以及如何使用 CGA 规则对其立面进行优化。

下图中的建筑物体积是使用 Maya 中的常规方法进行建模的,并导出为 .obj 文件:

建筑物体积模型

注:
可以使用 .shp、.gdb 或 .dae (Collada) 文件中的多面体数据而不是 OBJ 数据来应用类似的工作流。

将 .obj 文件导入 CityEngine

  1. 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。
  2. data/obj/ 文件夹中找到并选择 Building_1.obj 文件。
  3. 右键单击文件,然后选择导入
    随即显示 OBJ 对话框。
  4. OBJ 导入对话框中,取消选中作为静态模型导入
  5. 单击完成
    OBJ 导入对话框

    名为 Building_1 的新建形状图层将显示在“场景编辑器”中,并且数据将显示在 3D 视窗中。

    3D 视窗中的 Building_1

写入规则文件

建筑物体积的名称 Building_1 已经定义了其初始规则 Building。 因此,您需要将 Building 作为初始规则。 您需要将导入模型的坐标系与 CityEngine 的 yUp 系统对齐。 这是通过 alignScopeToAxes() CGA 命令完成的。 完成之后,您可以使用组件分割 comp(f) 识别导入体积的不同面。 您将对屋顶面使用顶部选择器,对立面使用侧面选择器。 在此步骤中,您要做的就是为屋顶形状上色,以正确识别面。

Building -->
	alignScopeToAxes(y)
	comp(f){top : color("#ff0000") Roof. | side : Facade. }
  1. 在 3D 视窗中选择建筑物形状。
  2. 在“文件导航器”中,在工程的规则文件夹中找到 importedVolume_01_markFaces.cga 文件,并将其拖到 3D 视窗中的选定形状上。
    使用简单的规则来生成导入的建筑物体积以识别面。 红色:顶面(屋顶);灰色:侧面(立面):
    已生成导入建筑物体积

正确识别面后,您可以继续规则设置。 由于这些面是在 CityEngine 外部建模的,因此它们的方向并不一定是您进行规则操作所需的方式。 对于立面规则,从 alignScopeToGeometry(zUp, any, world.lowest) 命令开始。 通过此操作,将立面形状的范围对齐到其最低边缘,并且 z 朝外。 这样可确保您在所有立面上使用相同方向的范围进行操作。

Facade -->  
alignScopeToGeometry(zUp, any, world.lowest)
split(y){3.5 : Groundfloor | {~3 : Floor}* }

importedVolume_02_facades.cga 规则文件具有一组规则,可为建筑物的立面添加更多详细信息。 有关写入 CGA 规则的帮助,请参阅 ShapeGrammar 教程

使用此规则设置再次生成建筑物。

  1. 在 3D 视窗中选择建筑物形状。
  2. 在“文件导航器”中,在工程的规则文件夹中找到 importedVolume_02_facades.cga 文件,并将其拖到 3D 视窗中的选定形状上。
    volume_from_obj.cej 场景文件包含已分配了规则文件的导入模型。
    已导入分配了规则文件的模型

将地标导入为形状

如果您已预先建模要在场景中使用的纹理资产,则也可以将其导入。

注:

支持的格式包括 Wavefront .obj、Collada .dae、.kml, 和 .kmz。 (最后两个基本上是具有地理配准的 Collada 文件。)

将 .dae 文件导入 CityEngine

  1. 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。
  2. data/dae/ 文件夹中找到并选择 building_0.dae 文件。
  3. 右键单击文件,然后选择导入
    随即显示 OBJ 导入对话框。
  4. OBJ 导入对话框中,取消选中作为静态模型导入
  5. 单击完成
  6. 名为 building_0 的新建形状图层将显示在“场景编辑器”中,
    “场景编辑器”中的 building_0

将静态模型转换为形状

如果您已导入静态模型并希望继续使用 CGA 代码对其进行处理,则可以将其转换为形状。

要执行此操作,右键单击模型,然后单击将模型转换为形状

您可以对 CGA 生成的模型执行相同的操作。

应用 CGA 规则

如有必要,可以使用 CGA 规则进一步处理导入的形状。

  1. 分配 landmark.cga 规则文件。
  2. 生成模型。
    样式管理器对话框显示了用于使用 CGA 规则导入的四个样式选项。
    Landmark.cga 的“样式管理器”对话框
  3. 可根据需要,打开 landmark_as_shape.cej 以查看完成的场景。