要访问 CityEngine 中的教程,请单击帮助 > 下载教程和示例...。 在选择教程或示例后,系统会自动下载工程并将其添加到工作空间。
从 shapefile 和地理数据库导入形状
本教程介绍了如何导入 shapefile 和地理数据库。
将 shapefile 导入 CityEngine
- 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。
- 在“文件导航器”中,找到 data/shp_footprints/ 文件夹中的 footprints.shp 文件。
- 将文件拖放到视窗中。
- 使用以米为单位的原始数据导入数据而无需进行投影。
对象属性
CityEngine 通过 shapefile 导入属性。
- 选择单个覆盖区。
分配规则文件并生成模型
现在,您将在导入的覆盖区上生成简单的拉伸。 extrude.cga 规则文件使用高度对象属性将覆盖区拉伸到定义的高度。
- 打开规则文件并找到以下代码:
- 在 3D 视窗中选择所有覆盖区。
- 通过拖放分配规则。
- 或者,打开 footprints_from_shp.cej 文件以查看完成的场景。
attr height = 10
@StartRule
Lot --> extrude(height)
从文件地理数据库导入
从文件地理数据库导入数据与 shapefile 导入相类似。
- 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。 在“文件导航器”中,找到数据文件夹中的文件地理数据库文件夹 footprints.gdb。
- 将 footprints.gdb 文件夹拖到 3D 视窗中。
- 单击完成以导入选定的图层。
注:
.gdb 文件格式在导航器中显示为文件夹。
提供的地理数据库中的数据集与 shapefile 内容相同。 现在,您可以将上述 shapefile 步骤应用于文件地理数据库导入。
导入具有其他 CGA 属性的 PolylineZ 形状
- 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。
- 在“文件导航器”中,找到 data/sphereCity_shp/ 文件夹中的 sphereCity.shp 文件。
- 将文件拖入 3D 视窗。
- 选择以米为单位的原始数据。 通过对数据和场景使用相同的坐标系,导入时不会对数据应用任何重新投影。
属性
此数据集中定义了两个特殊属性:
- 规则文件
- startRule
注:
在 GIS 应用程序中使用此特定语法来定义导入后直接分配的规则文件和初始规则。 通过这种方式,您可以通过不手动分配它们来节省时间。 这是一种特殊的导入行为。
GIS 应用程序中的属性表将类似于以下内容:
- 选择单个形状(球体的一个面)。
现在,您可以直接生成模型。
生成模型
- 在 3D 视窗中选择所有 sphereCity 的形状。
- 生成建筑物。
更改初始规则
更改各个形状的初始规则以更改生成的模型。
- 在 3D 视窗中选择模型。
- 在检查器中,单击“初始规则”选择按钮。
随即显示设置初始规则对话框。
- 在设置初始规则对话框中,选择商业作为新的初始规则。 StartRules(CGA 代码中带有 @StartRule 标记的规则)以粗体显示。
从 OBJ 导入形状
OBJ 导入
- 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。
- 在 data/obj/ 文件夹中找到并选择 pompeii_footprints.obj 文件。
- 右键单击文件,然后选择导入。
随即显示 OBJ 导入对话框。
- 在 OBJ 导入对话框中,取消选中作为静态模型导入。
- 单击完成。
分配规则文件并生成模型
现在,您将在导入的覆盖区上生成简单的拉伸。 extrude.cga 规则文件使用高度对象属性将覆盖区拉伸到定义的高度。
- 在 3D 视窗中选择所有覆盖区。
- 在“文件导航器”中,在工程的规则文件夹中找到 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
- 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。
- 在 data/obj/ 文件夹中找到并选择 Building_1.obj 文件。
- 右键单击文件,然后选择导入。 随即显示 OBJ 对话框。
- 在 OBJ 导入对话框中,取消选中作为静态模型导入。
- 单击完成。
名为 Building_1 的新建形状图层将显示在“场景编辑器”中,并且数据将显示在 3D 视窗中。
写入规则文件
建筑物体积的名称 Building_1 已经定义了其初始规则 Building。 因此,您需要将 Building 作为初始规则。 您需要将导入模型的坐标系与 CityEngine 的 yUp 系统对齐。 这是通过 alignScopeToAxes() CGA 命令完成的。 完成之后,您可以使用组件分割 comp(f) 识别导入体积的不同面。 您将对屋顶面使用顶部选择器,对立面使用侧面选择器。 在此步骤中,您要做的就是为屋顶形状上色,以正确识别面。
Building -->
alignScopeToAxes(y)
comp(f){top : color("#ff0000") Roof. | side : Facade. }
- 在 3D 视窗中选择建筑物形状。
- 在“文件导航器”中,在工程的规则文件夹中找到 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 教程。
使用此规则设置再次生成建筑物。
- 在 3D 视窗中选择建筑物形状。
- 在“文件导航器”中,在工程的规则文件夹中找到 importedVolume_02_facades.cga 文件,并将其拖到 3D 视窗中的选定形状上。 volume_from_obj.cej 场景文件包含已分配了规则文件的导入模型。
将地标导入为形状
如果您已预先建模要在场景中使用的纹理资产,则也可以将其导入。
注:
支持的格式包括 Wavefront .obj、Collada .dae、.kml, 和 .kmz。 (最后两个基本上是具有地理配准的 Collada 文件。)
将 .dae 文件导入 CityEngine
- 通过单击文件 > 新建 > CityEngine > CityEngine 场景打开一个新建场景文件。
- 在 data/dae/ 文件夹中找到并选择 building_0.dae 文件。
- 右键单击文件,然后选择导入。 随即显示 OBJ 导入对话框。
- 在 OBJ 导入对话框中,取消选中作为静态模型导入。
- 单击完成。
将静态模型转换为形状
如果您已导入静态模型并希望继续使用 CGA 代码对其进行处理,则可以将其转换为形状。
要执行此操作,右键单击模型,然后单击将模型转换为形状。
您可以对 CGA 生成的模型执行相同的操作。
应用 CGA 规则
如有必要,可以使用 CGA 规则进一步处理导入的形状。
- 分配 landmark.cga 规则文件。
- 生成模型。 样式管理器对话框显示了用于使用 CGA 规则导入的四个样式选项。
- 可根据需要,打开 landmark_as_shape.cej 以查看完成的场景。