Resumen
Importa uno o más modelos 3D a una clase de entidad multiparche.
Uso
Preserve la textura de los modelos 3D almacenando el multiparche de salida en una geodatabase. Los shapefiles no admiten la retención de texturas.
Si el lado superior de las entidades multiparche resultantes se orientan hacia los costados, intente ajustar la orientación utilizando esta herramienta de nuevo con el parámetro Y_Is_Up habilitado.
GeoVRML es el único formato que tiene un sistema de coordenadas definido. Muchos modelos 3D se generan utilizando sistemas de coordenadas locales que centran el eje XYZ en 0, 0, 0. Este tipo de entidades se pueden georreferencias con coordenadas del mundo real, siguiendo uno de estos métodos:
- Si es necesario girar y desplazar los modelos 3D, considere la posibilidad de aplicar técnicas de ajuste espacial para definir correctamente la posición de las entidades. Más información sobre el ajuste espacial
- Si los modelos 3D se han orientado correctamente para un sistema de coordenadas dado y solo se tienen que desplazar a la posición adecuada, valore la posibilidad de personalizar las propiedades del sistema de coordenadas para generar el desplazamiento necesario. Si las entidades de puntos que definen la posición del centroide de cada modelo en coordenadas del mundo real están disponibles, puede usar los puntos como entradas para la herramienta con el fin de georreferenciar los modelos.
Las geometrías de punto y de línea que pueden existir en un archivo 3D no se mantienen en la clase de entidad de multiparche de salida, ya que los multiparches no las admiten.
Sintaxis
arcpy.ddd.Import3DFiles(in_files, out_featureClass, {root_per_feature}, {spatial_reference}, {y_is_up}, file_suffix, {in_featureClass}, {symbol_field})
Parámetro | Explicación | Tipo de datos |
in_files [in_files,...] | Uno o más modelos 3D o carpetas que contienen estos archivos en los formatos compatibles, que son 3D Studio Max (*.3ds), SketchUp (*.skp), VRML and GeoVRML (*.wrl), OpenFlight (*.flt) y COLLADA (*.dae). | File; Folder |
out_featureClass | El multiparche que se creará a partir de los archivos de entrada. | Feature Class |
root_per_feature (Opcional) | Indica si se debe producir una entidad por archivo o una entidad para cada nodo raíz del archivo. Esta opción solo se aplica a los modelos VRML.
| Boolean |
spatial_reference (Opcional) | El sistema de coordenadas de los datos de entrada Para la mayoría de los formatos, esto es desconocido. Solo el formato GeoVRML almacena su sistema de coordenadas, y en su defecto se obtendrá desde el primer archivo de la lista a menos que una referencia espacial esté especificada aquí. | Spatial Reference |
y_is_up (Opcional) | Identifica el eje que define la orientación vertical de los archivos de entrada.
| Boolean |
file_suffix | La extensión de los archivos para importar desde una carpeta de entrada. Este parámetro es obligatorio cuando se especifica al menos una carpeta como entrada.
| String |
in_featureClass (Opcional) | Las entidades de punto cuyas coordenadas definen la posición de los archivos de entrada en el mundo real. Se hará que cada archivo de entrada coincida con su punto correspondiente con base en los nombres de archivo almacenados en el campo Símbolo. El parámetro del Sistema de coordenadas se debe definir para que coincida con la referencia espacial de los puntos. | Feature Layer |
symbol_field (Opcional) | El campo en las entidades de punto que contiene el nombre del archivo 3D asociado con cada punto. | Field |
Muestra de código
Ejemplo 1 de Import3DFiles (ventana de Python)
En el siguiente ejemplo se muestra cómo usar esta herramienta en la ventana de Python.
import arcpy
from arcpy import env
arcpy.CheckOutExtension("3D")
env.workspace = "C:/data"
arcpy.Import3DFiles_3d("AddisSheraton.skp", "Test.gdb/AddisSheraton", False, "", False)
Ejemplo 2 de Import3DFiles (secuencia de comandos independiente)
En el siguiente ejemplo se muestra cómo usar esta herramienta en un script independiente de Python.
'''*********************************************************************
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)
Entornos
Información de licenciamiento
- Basic: Requiere 3D Analyst
- Standard: Requiere 3D Analyst
- Advanced: Requiere 3D Analyst