多面体(Multipatch)转 Collada (转换)
摘要
将一个或多个多面体要素转换为 COLLADA 文件及其引用的纹理图像文件的集合并将此集合存储在输出文件夹中。输入可以是图层或要素类。
用法
-
COLLADA 文件是 3D 对象的 XML 表示,可以引用其他用作叠加在 3D 几何上的纹理的图像文件。这表示,将多面体要素导出到 COLLADA 会创建若干文件 - 一个包含 3D 对象的 XML 表示的 .dae 文件以及一个或多个包含纹理的图像文件(例如 .jpg 或 .png 文件)。
此工具为其导出的每个多面体要素创建一个 COLLADA 表示。此工具使用每个要素的一个字段值(默认情况下是“对象 ID”字段值)定义输出文件名。这样更易于识别哪个要素导出到哪个 COLLADA 文件,同时,在将多个要素导出到同一个目录中时,也提供了定义唯一文件名的方法。纹理文件存储在图像子目录中,位于 COLLADA 文件下方。
此工具自动覆盖具有相同文件名的现有 COLLADA 文件。如果发生覆盖文件的情况,将显示警告消息,提示导出过程中新文件覆盖了哪些文件。对于任何无法导出的要素,还将生成 GP 消息,例如,输出位置为只读,或者磁盘已满。
要确保为所有导出的多面体要素创建新的 COLLADA 文件,请将目标目录设置为空文件夹或新文件夹,并选择对每个要素唯一的文件名字段。导出具有相同属性值的两个要素会造成第二个导出的要素覆盖第一个导出的要素的 COLLADA 文件。
采用将多面体要素导出到 COLLADA 并在 ArcGIS 之外进行更改这种方式反复更新多面体要素时,请每次都将要素导出到相同位置。这样只需在磁盘上为该要素保存一个文件,此文件表示 3D 对象的最新状态。
如果导出的多面体(如存储在 UTM 区域中的建筑物)在投影坐标系中,则还将在输出文件夹中创建包含坐标(如 WGS84)的 KML 文件。请注意,此过程不会使用基准面变换,如果使用基准面变换,则在查看 KML 时可能会导致定位偏差。
语法
参数 | 说明 | 数据类型 |
in_features |
要导出的多面体要素。 | Feature Layer |
output_folder |
放置输出 COLLADA 文件和纹理图像文件的目标文件夹。 | Folder |
prepend_source (可选) | 将源要素图层的名称添加为输出 COLLADA 文件的文件名的前缀。
| Boolean |
field_name |
用作每个导出的要素的输出 COLLADA 文件名的要素属性。如果未指定字段,则使用要素的“对象 ID”。 | String |
代码示例
以下 Python 窗口脚本演示了如何在立即模式下使用 MultipatchToCollada 函数。
import arcpy from arcpy import env env.workspace = "C:/data" arcpy.MultipatchToCollada_conversion("Buildings","C:/COLLADA", PREPEND_SOURCE_NAME, "BldName")
以下独立脚本演示了如何使用 MultipatchToCollada 函数。
# Name: MultipatchToCollada_Example2.py # Description: The following stand-alone script demonstrates how to use the # MultipatchToCollada tool to convert all multipatch shapefiles # in a target workspace. # Requirements: 3D Analyst extension # Author: ESRI # Import system modules import arcpy from arcpy import env # Obtain a license for the 3D Analyst extension arcpy.CheckOutExtension("3D") # Set environment settings env.workspace = "C:/data" try: # Create list of feature classes in workspace fcList = arcpy.ListFeatureClasses() # Determine if the list contained any feature classes if len(fcList) > 0: # Iterate through each feature class for fc in fcList: # Describe the feature class desc = arcpy.Describe(fc) # Determine if feature class is a multipatch if desc.shapeType is "MultiPatch": # Set Local Variables ## Ensure unique name for output folder outDir = arcpy.CreateUniqueName("collada_dir") ## Specify that collada file is prefixed by source name prepend = "PREPEND_SOURCE_NAME" ## Specify the feature attribute used to name Collada files fldName = "Name" #Execute MultipatchToCollada arcpy.MultipatchToCollada(fc, outDir, prepend, fldName) del outDir, prepend, fldName else: print "There are no multipatch shapefiles in " + env.workspace + "." else: print "There are no feature classes in " + env.workspace + "." except Exception as e: # Returns any other error messages print arcpy.GetMessages(2) del arcpy