Zusammenfassung
Hiermit wird mindestens ein 3D-Modell in eine Multipatch-Feature-Class importiert.
Verwendung
Behalten Sie die Textur in den 3D-Modellen bei, indem Sie das Ausgabe-Multipatch in einer Geodatabase speichern. Shapefiles unterstützen die Beibehaltung von Texturen nicht.
Falls die obere Seite der entstehenden Multipatch-Features seitwärts ausgerichtet ist, versuchen Sie die Ausrichtung anzupassen, indem Sie das Werkzeug mit aktiviertem Parameter Y oben erneut verwenden.
GeoVRML ist das einzige Format mit einem definierten Koordinatensystem. Viele 3D-Modelle werden mit lokalen Koordinatensystemen generiert, deren XYZ-Achse um 0, 0, 0 zentriert ist. Solche Features können mit einer der folgenden Methoden mit realen Koordinaten georeferenziert werden:
- Wenn die 3D-Modelle gedreht und verschoben werden müssen, müssen Sie die Methode der räumlichen Anpassung anwenden, um die Features ordnungsgemäß zu positionieren. Weitere Informationen zu räumlicher Anpassung.
- Wenn die 3D-Modelle für ein bestimmtes Koordinatensystem ordnungsgemäß ausgerichtet sind und nur in die richtige Position verschoben werden müssen, passen Sie die Koordinatensystem-Eigenschaften so an, dass die notwendige Verschiebung erfolgt. Wenn Punkt-Features, die die Position des Schwerpunktes der einzelnen Modelle in realen Koordinaten definieren, verfügbar sind, verwenden Sie die Punkte als Eingaben für das Werkzeug, um die Modelle zu georeferenzieren.
Punkt- und Liniengeometrien, die in einer 3D-Datei vorhanden sein können, bleiben in der Ausgabe-Multipatch-Feature-Class nicht erhalten, da sie von Multipatches nicht unterstützt werden.
Syntax
arcpy.ddd.Import3DFiles(in_files, out_featureClass, {root_per_feature}, {spatial_reference}, {y_is_up}, file_suffix, {in_featureClass}, {symbol_field})
Parameter | Erklärung | Datentyp |
in_files [in_files,...] | Ein oder mehrere 3D-Modelle oder Ordner mit solchen Dateien in den unterstützten Formaten 3D Studio Max (*.3ds), SketchUp (*.skp), VRML und GeoVRML (*.wrl), OpenFlight (*.flt) und COLLADA (*.dae). | File; Folder |
out_featureClass | Das Multipatch, das aus den Eingabedateien erstellt wird. | Feature Class |
root_per_feature (optional) | Gibt an, ob ein Feature pro Datei oder ein Feature für jeden Stammknoten in der Datei generiert werden soll. Diese Option gilt nur für VRML-Modelle.
| Boolean |
spatial_reference (optional) | Das Koordinatensystem der Eingabedaten. Für die meisten Formate ist dies unbekannt. Nur beim GeoVRML-Format wird das Koordinatensystem gespeichert. Der Standardwert wird aus der ersten Datei in der Liste abgerufen, wenn hier kein Raumbezug angegeben ist. | Spatial Reference |
y_is_up (optional) | Gibt die Achse an, welche die vertikale Ausrichtung der Eingabedateien definiert.
| Boolean |
file_suffix | Die Dateierweiterung der Dateien, die aus einem Eingabeordner importiert werden sollen. Dieser Parameter ist erforderlich, wenn als Eingabe mindestens ein Ordner angegeben wird.
| String |
in_featureClass (optional) | Die Punkt-Features, deren Koordinaten die reale Position der Eingabedateien definieren. Jeder Eingabedatei wird basierend auf den Dateinamen im Symbolfeld der entsprechende Punkt zugeordnet. Der Parameter Koordinatensystem sollte in Übereinstimmung mit dem Raumbezug der Punkte definiert werden. | Feature Layer |
symbol_field (optional) | Das Feld in den Punkt-Features, das für jeden Punkt den Namen der zugeordneten 3D-Datei enthält. | Field |
Codebeispiel
Import3DFiles – Beispiel 1 (Python-Fenster)
Anhand des folgenden Beispiels wird die Verwendung dieses Werkzeugs im Python-Fenster veranschaulicht.
import arcpy
from arcpy import env
arcpy.CheckOutExtension("3D")
env.workspace = "C:/data"
arcpy.Import3DFiles_3d("AddisSheraton.skp", "Test.gdb/AddisSheraton", False, "", False)
Import3DFiles – Beispiel 2 (eigenständiges Skript)
Im folgenden Beispiel wird die Verwendung dieses Werkzeugs in einem eigenständigen Python-Skript veranschaulicht.
'''*********************************************************************
Name: Model Shadows For GeoVRML Models
Description: Creates a model of the shadows cast by GeoVRML models
imported to a multipatch feature class for a range of dates
and times. A range of times from the start time and end
time can also be specified by setting the EnforceTimes
Boolean to True. This sample is designed to be used in a
script tool.
*********************************************************************'''
# Import system modules
import arcpy
from datetime import datetime, time, timedelta
#************************* Script Variables **************************
inFiles = arcpy.GetParameterAsText(0) # list of input features
spatialRef = arcpy.GetParameterAsText(1) # list of GeoVRML files
outFC = arcpy.GetParameterAsText(2) # multipatch from 3D files
inTimeZone = arcpy.GetParameterAsText(3) # time zone
startDate = arcpy.GetParameter(4) # starting date as datetime
endDate = arcpy.GetParameter(5) # ending date as datetime
dayInterval = arcpy.GetParameter(6) # day interval as long (0-365)
minInterval = arcpy.GetParameter(7) # minute interval as long (0-60)
enforceTime = arcpy.GetParameter(8) # minute interval as Boolean
outShadows = arcpy.GetParameterAsText(9) # output shadow models
outIntersection = arcpy.GetParameterAsText(10) # shadow & bldg intersection
# Function to find all possible date/time intervals for shadow modelling
def time_list():
dt_result = [startDate]
if dayInterval:
if endDate: #Defines behavior when end date is supplied
while startDate < endDate:
startDate += timedelta(days=dayInterval)
dt_result.append(startDate)
dt_result.append(endDate)
else: # Behavior when end date is not given
daymonthyear = datetime.date(startDate)
while startDate <= datetime(daymonthyear.year, 12, 31, 23, 59):
startDate += timedelta(days=dayInterval)
dt_result.append(startDate)
return dt_result
try:
arcpy.CheckOutExtension('3D')
importFC = arcpy.CreateUniqueName('geovrml_import', 'in_memory')
# Import GeoVRML files to in-memory feature
arcpy.ddd.Import3DFiles(inFiles, importFC, 'ONE_FILE_ONE_FEATURE',
spatialRef, 'Z_IS_UP', 'wrl')
# Ensure that building models are closed
arcpy.ddd.EncloseMultiPatch(importFC, outFC, 0.05)
# Discard in-memory feature
arcpy.management.Delete(importFC)
dt_result = time_list()
for dt in dt_result:
if dt == dt_result[0]:
shadows = outShadows
else:
shadows = arcpy.CreateUniqueName('shadow', 'in_memory')
arcpy.ddd.SunShadowVolume(outFC, dt, shadows, 'ADJUST_FOR_DST',
inTimeZone, '', minInterval, 'MINUTES')
if dt is not dt_result[0]:
arcpy.management.Append(shadows, outShadows)
arcpy.management.Delete(shadows)
arcpy.ddd.Intersect3D(outFC, outIntersection, outShadows, 'SOLID')
arcpy.CheckInExtension('3D')
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)
Umgebungen
Lizenzinformationen
- Basic: Erfordert 3D Analyst
- Standard: Erfordert 3D Analyst
- Advanced: Erfordert 3D Analyst