基于 CityEngine 规则转换要素 (3D Analyst)

需要 3D Analyst 许可。

摘要

按照在 ArcGIS CityEngine 中创作的规则基于现有 2D 和 3D 输入要素生成 3D 几何。

使用情况

  • 输入要素可以是点、面或多面体。 应该为 CityEngine 规则包文件 (.rpk) 中的 @StartRule 指定预期的输入要素类型:对于点,该类型为 @InPoint 注记;对于面,该类型为 @InPolygon;对于多面体要素,该类型为 @InMesh。 如果 @StartRule 未使用其中任何一种要素类型进行注释,系统将假设该要素类型为面。 如果输入了异常的几何类型,将会发生错误。

  • 输入要素可以是按程序符号化的要素图层。 CityEngine 规则通常可以定义一系列属性(CityEngine 中名为 attrs),这些属性可以控制根据输入形状生成输出 3D 模型的方式。 例如,生成建筑物外壳的规则对于 BuildingHeight 为双精度类型 attr,对于 FloorCount 为整数类型 attr。 如果输入要素类包含的特性字段与 CityEngine 规则属性具有相同的名称和数据类型,则将自动使用该特性字段的值来生成输出模型。 CityEngine 规则属性与特性字段的这种自动匹配称为默认字段映射。

    如果输入要素图层使用单一符号符号系统(其符号包含一个程序符号图层,该程序符号图层将引用与输入规则包相同的规则包)进行符号化,则该工具将在创建输出时应用程序符号图层中配置的覆盖。 这样,程序符号图层即可用于配置自定义字段映射(其中映射的字段名称与规则包属性名称不完全匹配),或使用单个自定义值覆盖规则包属性。 有关详细信息,请参阅属性驱动型符号系统

  • 规则包参数值是 CityEngine .rpk 文件。 即包含已编译 CityEngine 规则以及该规则使用的关联资产的压缩文件。 导出叶形状参数只有在输入规则包表明其包含下列 CGA 注记并支持此操作时可用:@StartRule @Out (granularity=separatedShapes)

  • 使用导出叶形状参数生成叶形状时,将在相同的位置上创建由要素类组成的标准集合作为主输出多面体要素类,并具有如下命名约定:<outputFC_Points><outputFC_MPoints><outputFC_Lines>。 所有输出要素类均包含 OriginalOID 属性字段,此属性字段参考生成输出的输入要素 ObjectIDOriginalOID 字段可用于将输出要素类连接到输入要素类。 如果报告是使用包括报告参数生成的,那么输出要素类的每个报告也会获得一个属性。

  • 可以将 OriginalOID 字段添加到输出要素类,从而包含已生成各个输出要素的输入要素的 ObjectID。 如果输入要素类已经具有名为 OriginalOID 的字段,则可以在此名称后追加数值作为新字段的名称,例如 OriginalOID2

  • 转换期间出现的详细错误或警告将写入到名为 ArcGISProLog<process ID and GUID>.xml 的日志文件中(当工具在 ArcGIS AllSource 中以交互方式运行并启用诊断日志记录时)或 pythonLog<process ID and GUID>.xml 中(当使用独立 Python 脚本运行该工具并且已启用诊断日志记录时),其中 <process ID and GUID> 是一个进程 ID 和一个新的 GUID,在每次运行该工具时都会追加到日志文件的名称上,例如 ArcGISProLog-12300~1A9C1C2A-A2CB-41AF-BEB9-1F8CDC4F6D29.xmlpythonLog-2160~807AFBC8-CA35-4370-9F90-4EDB2F9238AE.xml。 此文件位于 <Install drive>:\Users\<user name>\Documents\ArcGIS\Diagnostics

参数

标注说明数据类型
输入要素

输入点、面或多面体要素。 输入要素可以是按程序符号化的要素图层。 将支持字段映射(属性驱动的符号属性)。

Feature Layer
规则包

包含 CGA 规则信息和资源的 CityEngine 规则包文件 (*.rpk)。 对于用于点要素的规则包,应将 .rpk 文件内使用 @StartRule 注释的规则注释为 @InPoint,对于用于面要素的规则包,应注释为 @InPolygon,对于用于多面体要素的规则包,应注释为 @InMesh。 如果 @StartRule 未使用 @InPoint@InPolygon@InMesh 进行注记,将假设要素类型为面。

File
输出要素

包含应用 CGA 规则生成的多面体要素的输出要素类。 可以将 OriginalOID 字段添加到输出要素类,从而包含已生成各个输出要素的输入要素的 ObjectID。

Feature Class
包括现有字段
(可选)

指定输出要素类是否将包含输入要素类的属性字段。

  • 选中 - 输出要素类中将包含输入要素类的属性字段。 这是默认设置。
  • 未选中 - 输出要素类中将不包含输入要素类的属性字段。 如果选中导出 Leaf Shape 参数,将会自动使用此选项。

Boolean
包括报告
(可选)

指定输出是否将包含程序规则包所指定的附加报告字段。 根据创建规则包的方法,报告可能包含创建模型时生成一个或多个报告的逻辑。 这些报告可以包含有关要素的各种信息。 例如,报告为每个建筑模型生成的窗口数的规则包。

  • 选中 - 输出要素类将包含新的属性字段,以按照规则包报告生成逻辑来包含每个要素的已报告值。 为每个报告值创建唯一的属性。
  • 未选中 - 将会忽略在规则包中生成的报告,且将不会生成与这些报告相关的任何新属性。 这是默认设置。

如果规则包不包含生成报告的逻辑,将会忽略此参数。

Boolean
导出 Leaf Shape
(可选)

指定每个输入要素是将转换为单个合并的多面体要素,还是将成为多个要素(可能是点、线或多面体)的集合。

CityEngine 规则包通过生成组件部分并将其合并至单个的 3D 对象来构建内容。 然而,还可以将这些组件或叶形状存储为独立的要素。 此选项在使用 3D 对象子元素(如建筑物的窗户)运行分析操作时特别重要。

例如,某规则可能使用输入面轮廓线生成无缝建筑物模型,或者为每个公寓面(包括朝外的面板、代表中心的点以及显示边界的线)创建单独的要素。 在本示例中,应将公寓面板、中心点和轮廓均视为叶形状。

  • 选中 - 系统将生成其他输出要素类。 输出要素类中将不包括输入要素类的属性字段。 输出要素类将包含名为 OriginalOID 的字段,此字段引用了生成输出的输入要素 ObjectID
  • 未选中 - 即使在规则逻辑中定义了附加叶形状,也将不会生成附加输出要素类。 几何的所有组成部分均将包含在输出多面体要素中。 这是默认设置。

Boolean

派生输出

标注说明数据类型
输出点要素

生成叶形状时,将在与主输出多面体要素类相同的位置创建输出点要素类。

Feature Class
输出线要素

生成叶形状时,将在与主输出多面体要素类相同的位置创建输出折线要素类。

Feature Class
输出多点要素

生成叶形状时,将在与主输出多面体要素类相同的位置创建输出面要素类。

Feature Class

arcpy.ddd.FeaturesFromCityEngineRules(in_features, in_rule_package, out_feature_class, {in_existing_fields}, {in_include_reports}, {in_leaf_shapes})
名称说明数据类型
in_features

输入点、面或多面体要素。 输入要素可以是按程序符号化的要素图层。 将支持字段映射(属性驱动的符号属性)。

Feature Layer
in_rule_package

包含 CGA 规则信息和资源的 CityEngine 规则包文件 (*.rpk)。 对于用于点要素的规则包,应将 .rpk 文件内使用 @StartRule 注释的规则注释为 @InPoint,对于用于面要素的规则包,应注释为 @InPolygon,对于用于多面体要素的规则包,应注释为 @InMesh。 如果 @StartRule 未使用 @InPoint@InPolygon@InMesh 进行注记,将假设要素类型为面。

File
out_feature_class

包含应用 CGA 规则生成的多面体要素的输出要素类。 可以将 OriginalOID 字段添加到输出要素类,从而包含已生成各个输出要素的输入要素的 ObjectID。

Feature Class
in_existing_fields
(可选)

指定输出要素类是否将包含输入要素类的属性字段。 使用 in_leaf_shapes 参数时,此参数不在考虑范围之内。

  • INCLUDE_EXISTING_FIELDS输出要素类中将包含输入要素类的属性字段。 这是默认设置。
  • DROP_EXISTING_FIELDS输出要素类中将不包含输入要素类的属性字段。 如果 in_leaf_shapes 参数设置为 FEATURE_PER_LEAF_SHAPE,则将自动使用此选项。
Boolean
in_include_reports
(可选)

根据创建规则包的方法,报告可能包含创建模型时生成一个或多个报告的逻辑。 这些报告可以包含有关要素的各种信息。 例如,报告为每个建筑模型生成的窗口数的规则包。

  • INCLUDE_REPORTS输出要素类将包含新的属性字段,以按照规则包报告生成逻辑来包含每个要素的已报告值。 为每个报告值创建唯一的属性。
  • EXCLUDE_REPORTS将会忽略在规则包中生成的报告,且将不会生成与这些报告相关的任何新属性。 这是默认设置。

如果规则包不包含生成报告的逻辑,将会忽略此参数。

Boolean
in_leaf_shapes
(可选)

指定每个输入要素是将转换为单个合并的多面体要素,还是将成为多个要素(可能是点、线或多面体)的集合。

CityEngine 规则包通过生成组件部分并将其合并至单个的 3D 对象来构建内容。 然而,还可以将这些组件或叶形状存储为独立的要素。 此选项在使用 3D 对象子元素(如建筑物的窗户)运行分析操作时特别重要。

例如,某规则可能使用输入面轮廓线生成无缝建筑物模型,或者为每个公寓面(包括朝外的面板、代表中心的点以及显示边界的线)创建单独的要素。 在本示例中,应将公寓面板、中心点和轮廓均视为叶形状。

  • FEATURE_PER_LEAF_SHAPE系统将生成其他输出要素类。 输出要素类中将不包括输入要素类的属性字段。 输出要素类将包含名为 OriginalOID 的字段,此字段引用了生成输出的输入要素 ObjectID
  • FEATURE_PER_SHAPE即使在规则的逻辑中定义了附加叶形状,也将不会生成附加输出要素类。 几何的所有组成部分均将包含在输出多面体要素中。 这是默认设置。
Boolean

派生输出

名称说明数据类型
out_points

生成叶形状时,将在与主输出多面体要素类相同的位置创建输出点要素类。

Feature Class
out_lines

生成叶形状时,将在与主输出多面体要素类相同的位置创建输出折线要素类。

Feature Class
out_multipoints

生成叶形状时,将在与主输出多面体要素类相同的位置创建输出面要素类。

Feature Class

代码示例

FeaturesFromCityEngineRules 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用 FeaturesFromCityEngineRules 函数。

import arcpy

arcpy.CheckOutExtension("3D")
arcpy.env.workspace = "C:/data"
arcpy.ddd.FeaturesFromCityEngineRules("in_polygons", 
                                      "rules.rpk", 
                                      "out_multipatches")
FeaturesFromCityEngineRules 示例 2(独立脚本)

以下 Python 窗口脚本演示了如何在独立 Python 脚本中使用 FeaturesFromCityEngineRules 函数时启用诊断日志记录。

import arcpy
import ctypes
from arcpy import env

def enableDiagnostics(enable: bool = True):
  pro = arcpy.GetInstallInfo()['InstallDir']
  dll = ctypes.CDLL(f'{pro}/bin/DADFLib.dll')
  if enable:
    dll.EventLogEnable()
  else:
    dll.EventLogDisable()

def setLogLevel(level: int = 2):
  pro = arcpy.GetInstallInfo()['InstallDir']
  dll = ctypes.CDLL(f'{pro}/bin/DADFLib.dll')
  dll.EventLogSetLogLevel(level)

enableDiagnostics(True) #enable diagnostic logging
# Setting a log level (0 == error, 1 == warning, 2 == information, 3 == debug)
# will get that level and everything below it. 0 is only errors, 1 is warnings and errors etc.
setLogLevel(3) # Max diagnostic log level 

arcpy.CheckOutExtension("3D")
env.workspace = r"C:\data"
arcpy.ddd.FeaturesFromCityEngineRules(r"geometry.gdb\in_polygons", 
                                      "rules.rpk", 
                                      r"geometry.gdb\out_multipatches")

环境

此工具不使用任何地理处理环境。

相关主题