Conectarte Autodesk Viewer Desde Python
Para conectarte al Autodesk Viewer (Autodesk Forge) desde Python y acceder a los volúmenes de los modelos BIM, necesitarás interactuar con la API de Autodesk Forge. Aquí te explico los pasos que debes seguir para realizar esta conexión y obtener la información de los volúmenes:
-
Registro en Autodesk Forge y Credenciales:
• Crea una cuenta en Autodesk Forge y obtén tus credenciales (Client ID y Client Secret) al registrar tu aplicación en el portal de desarrolladores. • Estas credenciales serán necesarias para autenticarte y obtener un token de acceso.
-
Instalar Librerías de Python:
Instala las librerías necesarias para realizar peticiones HTTP y manejar la autenticación:
pip install requests
- Autenticación para Obtener el Token de Acceso:
Para autenticarte en la API de Autodesk Forge, debes obtener un token OAuth 2.0 con tu Client ID y Client Secret. El siguiente código muestra cómo obtener el token:
import requests
# Credenciales de Autodesk Forge
client_id = 'TU_CLIENT_ID'
client_secret = 'TU_CLIENT_SECRET'
# URL para solicitar el token
auth_url = 'https://developer.api.autodesk.com/authentication/v1/authenticate'
# Datos para la solicitud de token
data = {
'client_id': client_id,
'client_secret': client_secret,
'grant_type': 'client_credentials',
'scope': 'data:read data:write'
}
# Solicitud de token
response = requests.post(auth_url, data=data)
if response.status_code == 200:
access_token = response.json()['access_token']
print('Token de acceso:', access_token)
else:
print('Error al obtener el token:', response.text)
- Subir el Modelo y Obtener el URN:
Si no tienes el URN (Unique Resource Name) de tu modelo BIM, debes subirlo a Autodesk Forge. Para ello, necesitarás primero cargar el archivo a un bucket de almacenamiento y luego derivarlo a un formato compatible para su visualización. Aquí están las solicitudes API necesarias:
Crear un bucket:
bucket_url = 'https://developer.api.autodesk.com/oss/v2/buckets'
headers = {'Authorization': f'Bearer {access_token}', 'Content-Type': 'application/json'}
bucket_data = {
"bucketKey": "nombre_unico_bucket",
"policyKey": "transient" # Puede ser 'transient', 'temporary' o 'persistent'
}
response = requests.post(bucket_url, json=bucket_data, headers=headers)
print(response.json())
Subir el modelo:
upload_url = f'https://developer.api.autodesk.com/oss/v2/buckets/nombre_unico_bucket/objects/tu_modelo_bim.rvt'
with open('ruta_de_tu_archivo.rvt', 'rb') as f:
response = requests.put(upload_url, headers={'Authorization': f'Bearer {access_token}'}, data=f)
print(response.json())
Obtener el URN para derivación: Una vez subido el archivo, obtendrás un objectId. Ese objectId será necesario para la derivación y conversión a formatos compatibles con Autodesk Viewer.
- Obtener los Volúmenes del Modelo:
Una vez que el modelo esté cargado y derivado, puedes usar la API de extracción de propiedades (GET properties) para obtener los volúmenes del modelo:
urn = 'TU_URN_ENCODED' # El URN debe estar codificado en base64
headers = {'Authorization': f'Bearer {access_token}'}
properties_url = f'https://developer.api.autodesk.com/modelderivative/v2/designdata/{urn}/metadata'
response = requests.get(properties_url, headers=headers)
metadata = response.json()
print(metadata)
Luego, para obtener propiedades específicas como el volumen de los objetos, necesitarás buscar en la respuesta de la API dentro de los metadatos que se devuelven y filtrar los elementos que contengan información volumétrica.
- Filtrar la Información de Volumen:
Puedes extraer la información específica de los volúmenes del JSON que devuelve la API. Dependiendo del modelo, esta información puede estar bajo diferentes categorías o propiedades. Un ejemplo sencillo para extraer volúmenes:
# Obtener las propiedades específicas del modelo
properties_url = f'https://developer.api.autodesk.com/modelderivative/v2/designdata/{urn}/metadata/{metadata_id}/properties'
response = requests.get(properties_url, headers=headers)
properties = response.json()
# Filtrar y mostrar volúmenes
for item in properties['data']['objects']:
if 'Volume' in item:
print(f"Nombre: {item['name']}, Volumen: {item['Volume']}")
- Documentación de Autodesk Forge:
Para obtener más detalles sobre las API y los endpoints disponibles, puedes consultar la documentación oficial de Autodesk Forge.
Resumen de Pasos:
- Regístrate en Autodesk Forge y obtén tus credenciales.
- Usa Python para autenticarte y obtener un token de acceso.
- Sube tu modelo BIM a Autodesk Forge.
- Obtén el URN derivado y consulta las propiedades del modelo.
- Extrae y filtra la información de los volúmenes.
Con estos pasos, podrás leer los volúmenes de un modelo alojado en Autodesk Forge desde Python.
mfalconsoft@gmail.com / +34 (662) 47 0645RSS