Importer des fichiers 3D (3D Analyst)
Récapitulatif
Importe un ou plusieurs modèles 3D dans une classe d'entités multipatch.
Utilisation
-
L'outil prend en charge les fichiers 3D Studio Max (*.3ds), VRML et GeoVRML 2.0 (*.wrl), SketchUp 6.0 (*.skp) et OpenFlight 15.8 (*.flt), COLLADA (*.dae).
-
Conservez les images texturées dans les modèles 3D en stockant le multipatch en sortie dans une géodatabase. Les fichiers de formes ne prennent pas en charge la rétention de textures.
-
Si la partie supérieure des entités multipatch résultantes est orientée obliquement, essayez d'ajuster l'orientation en utilisant de nouveau cet outil après avoir activé le paramètre Y_Is_Up.
-
Le format GeoVRML est le seul format doté d'un système de coordonnées défini. De nombreux modèles 3D sont générés avec des systèmes de coordonnées locaux qui centrent l'axe XYZ sur 0, 0, 0. Vous pouvez géoréférencer de telles entités sur des coordonnées réelles de l'une des manières suivantes :
- Si les modèles 3D doivent être pivotés ou déplacés, adoptez les techniques d'ajustement spatial pour positionner correctement les entités.
- Si les modèles 3D sont orientés correctement pour un système de coordonnées donné et doivent simplement être déplacés vers la position appropriée, personnalisez les propriétés du système de coordonnées pour réaliser le déplacement nécessaire. Si les entités ponctuelles qui définissent la position du centroïde de chaque modèle en coordonnées terrestres sont disponibles, utilisez les points en entrée pour que l'outil géoréférence les modèles.
-
Les géométries de point et de ligne susceptibles d'exister dans un fichier 3D ne sont pas prises en charge par les multipatch et ne sont donc pas conservées dans la classe d'entités multipatches en sortie.
Remarque :Les types de géométrie suivants ne sont pas pris en charge pour les fichiers VRML : Boîte, Cône, Cylindre, Extrusion, Ensemble de points, Sphère et Texte.
Syntaxe
Paramètre | Explication | Type de données |
in_files |
Un ou plusieurs modèles 3D ou dossiers contenant ces fichiers dans les formats pris en charge, à savoir 3D Studio Max (*.3ds), SketchUp (*.skp), VRML et GeoVRML (*.wrl), OpenFlight (*.flt) et COLLADA (*.dae). | File; Folder |
out_featureClass |
Entités multipatch qui seront créées à partir des fichiers en entrée. | Feature Class |
root_per_feature (Facultatif) |
Indique qu'il convient de produire une entité par fichier ou une entité pour chaque nœud racine du fichier. Cette option ne s'applique qu'aux modèles VRML.
| Boolean |
spatial_reference (Facultatif) |
Système de coordonnées des données en entrée. Pour la plupart des formats, il est inconnu. Seul le format GeoVRML stocke son système de coordonnées et sa valeur par défaut est obtenue à partir du premier fichier de la liste, à moins qu'une référence spatiale ne soit spécifiée à cet endroit. | Spatial Reference |
y_is_up (Facultatif) |
Identifie l'axe qui définit l'orientation verticale des fichiers en entrée.
| Boolean |
file_suffix |
Extension des fichiers à importer à partir d'un dossier en entrée. Ce paramètre est requis lorsqu'au moins un dossier est spécifié en tant qu'entrée.
| String |
in_featureClass (Facultatif) |
Entités ponctuelles dont les coordonnées définissent la position des fichiers en entrée dans le monde réel. Chaque fichier en entrée est apparié au point correspondant en fonction des noms de fichier stockés dans le champ Champ de symbole. Le paramètre Système de coordonnées doit être défini pour qu'une correspondance soit établie avec la référence spatiale des points. | Feature Class |
symbol_field (Facultatif) |
Champ dans les entités ponctuelles contenant le nom du fichier 3D associé à chaque point. | Field |
Exemple de code
L'exemple suivant illustre l'utilisation de cet outil dans la fenêtre Python :
import arcpy
from arcpy import env
arcpy.CheckOutExtension("3D")
env.workspace = "C:/data"
arcpy.Import3DFiles_3d("AddisSheraton.skp", "Test.gdb/AddisSheraton", False, "", False)
L'exemple suivant illustre l'utilisation de cet outil dans un script Python autonome :
'''*********************************************************************
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)