Multipatch in Collada (Conversion)
Zusammenfassung
Konvertiert ein oder mehrere Multipatch-Features in eine Sammlung von COLLADA-Dateien und referenzierten Texturbilddateien in einem Ausgabeordner. Bei den Eingaben kann es sich um eine Layer- oder Feature-Class handeln.
Verwendung
-
COLLADA-Dateien sind eine XML-Darstellung eines 3D-Objekts, das auf zusätzliche Bilddateien verweisen kann, die als auf die 3D-Geometrie drapierte Texturen fungieren. Dies bedeutet, dass das Exportieren eines Multipatch-Features nach COLLADA zur Erstellung mehrerer Dateien führen kann: eine .dae-Datei, die die XML-Darstellung des 3D-Objekts und eine oder mehrere Bilddateien (z. B. eine .jpg- oder eine .png-Datei) enthält, die wiederum die Texturen enthalten.
Dieses Werkzeug erstellt eine COLLADA-Repräsentation für jedes Multipatch-Feature, das es exportiert. Das Werkzeug verwendet einen Feldwert jedes Features (standardmäßig ist dies die Objekt-ID), um die Ausgabedateinamen zu definieren. Auf diese Weise kann einfacher ermittelt werden, welches Feature in welche COLLADA-Datei exportiert wurde. Außerdem wird die Methodik zum Definieren von eindeutigen Namen bereitgestellt, wenn mehrere Features in das gleiche Verzeichnis exportiert werden. Texturdateien werden im selben Verzeichnis wie die COLLADA-Datei gespeichert.
Dieses Werkzeug überschreibt alle vorhandenen COLLADA-Dateien automatisch mit dem gleichen Dateinamen. Wenn dies geschieht, wird in einer Warnmeldung angegeben, welche Dateien während des Exportvorgangs durch eine neue Datei überschrieben wurden. Eine GV-Meldung wird auch für alle Features generiert, die nicht exportiert werden. Dies kann z. B. der Fall sein, wenn das Ausgabeverzeichnis schreibgeschützt oder der Datenträger voll ist.
Um sicherzustellen, dass eine neue COLLADA-Datei für alle exportierten Multipatch-Features erstellt wird, legen Sie das Zielverzeichnis auf einen leeren oder neuen Ordner fest, und wählen Sie ein Dateinamenfeld aus, das für jedes Feature eindeutig ist. Das Exportieren von zwei Features mit dem gleichen Attributwert führt dazu, dass das zweite exportierte Feature die COLLADA-Datei des ersten überschreibt.
Wenn Sie ein Multipatch-Feature iterativ aktualisieren, indem Sie es im COLLADA-Format exportieren und außerhalb von ArcGIS Änderungen vornehmen, sollten Sie das Feature jedes Mal an den gleichen Speicherort exportieren. Auf diese Weise ist auf dem Datenträger eine einzelne Datei für dieses Feature vorhanden, die den aktuellen Status des 3D-Objekts darstellt.
Wenn sich das exportierte Multipatch in einem projizierten Koordinatensystem befindet, z. B. ein in einer UTM-Zone gespeichertes Gebäude, wird auch eine KML-Datei mit den WGS84-Koordinaten im Ausgabeordner erstellt. Beachten Sie, dass dabei keine Datumstransformation verwendet wird, was beim Anzeigen der KML-Datei Positionsabweichungen zur Folge haben kann.
Tipp:Wenn Multipatches von einem Layer konvertiert werden, bettet das Multipatch in COLLADA-Werkzeug automatisch alle im Renderer des Layers definierten Farben ein. Wenn der Layer beispielsweise Features auf Grundlage eines Verwendungstypattributs rendert (z. B. Rot für Gewerbegebiet, Blau für Wohngebiet usw.), dann sind diese Farben in den COLLADA-Ausgabedateien enthalten. Die angezeigte Farbe wird auf Multipatch-Features mit Textur und ohne Textur angewendet, wobei für ein Multipatch mit Textur eine Aktualisierung der zugrunde liegenden Texturdateien des Features erforderlich ist. Sie können eine einzelne Anzeigefarbe Weiß verwenden, um Multipatches mit Textur mit unveränderten Bildern zu exportieren.
Syntax
Parameter | Erläuterung | Datentyp |
in_features |
Die zu exportierenden Multipatch-Features. | Feature Layer |
output_folder |
Der Zielordner, in den die COLLADA-Ausgabedateien und Texturbilddateien eingefügt werden. | Folder |
prepend_source (optional) | Den Dateinamen der COLLADA-Ausgabedateien wird der Name des Quell-Feature-Layers vorangestellt.
| Boolean |
field_name (optional) |
Das Feature-Attribut, das für jedes exportierte Feature als Name der COLLADA-Ausgabedatei verwendet werden soll. Wenn kein Feld angegeben wird, wird die Objekt-ID des Features verwendet. | Field |
Codebeispiel
Anhand des folgenden Beispiels wird die Verwendung dieses Werkzeugs im Python-Fenster veranschaulicht:
import arcpy
from arcpy import env
env.workspace = "C:/data"
arcpy.MultipatchToCollada_conversion("Sample.gdb/Buildings", "C:/COLLADA",
"PREPEND_SOURCE_NAME", "BldName")
Im folgenden Beispiel wird die Verwendung dieses Werkzeugs in einem eigenständigen Python-Skript veranschaulicht:
'''*********************************************************************
Name: Convert Multipatch To Collada
Description: Converts multipatch features in an input workspace
to a Collada model.
*********************************************************************'''
# Import system modules
import arcpy
import exceptions, sys, traceback
from arcpy import env
# Script variables
inWorkspace = arcpy.GetParameterAsText(0)
try:
# Set environment settings
env.workspace = inWorkspace
# Create list of feature classes in workspace
fcList = arcpy.ListFeatureClasses()
# Determine if the list contained any feature classes
if fcList:
# 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':
# 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 = 'OID'
#Execute MultipatchToCollada
arcpy.MultipatchToCollada(fc, outDir, prepend, fldName)
else:
print 'There are no feature classes in {0}.'.format(inWorkspace)
except arcpy.ExecuteError:
print arcpy.GetMessages()
except:
# Get the traceback object
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
# Concatenate error information into message string
pymsg = 'PYTHON ERRORS:\nTraceback info:\n{0}\nError Info:\n{1}'\
.format(tbinfo, str(sys.exc_info()[1]))
msgs = 'ArcPy ERRORS:\n {0}\n'.format(arcpy.GetMessages(2))
# Return python error messages for script tool or Python Window
arcpy.AddError(pymsg)
arcpy.AddError(msgs)