Cómo empezar con la API - Importación por lotes de combinaciones 02
Primeros pasos
Recomendamos seguir el tutorial Cómo empezar con la API - Básicos 01, que le enseña sobre la API y cómo configurar el entorno.
Archivo de unión
Primero, cree una junta de dos secciones transversales huecas RHS 300/200/8 y cambie los parámetros según las siguientes imágenes.
Ahora, vaya a la pestaña Developer y guárdelo como plantilla con el nombre tutorial 02.contemp. Lo usaremos en el siguiente tutorial.
Vuelva a la pestaña Design, haga clic derecho en Operaciones / Eliminar todo y guarde este archivo vacío como tutorial 02 - empty.ideaCon.
Hoja Excel con combinaciones de carga
Como siguiente paso, prepare una hoja Excel con las cargas que queremos importar en el archivo .ideaCon. Puede descargarla al final de esta página.
Por favor, utilice los nombres exactos de las columnas tal como se usan en el script de Python.
Cliente Python
Ejecute "IdeaStatiCa.ConnectionRestApi.exe" en CMD dentro de la carpeta correcta de IDEA StatiCa y abra la herramienta IDE de su elección.
- Cree un nuevo archivo e importe los paquetes que permitirán el uso del cálculo y la conexión con la URL del localhost.
Código fuente:
## Importación del paquete API
from enum import member # Librería Python para mejorar la legibilidad del código reemplazando cadenas con nombres significativos
from openpyxl import load_workbook # Librería Python para leer/escribir Excel
import ideastatica_connection_api.connection_api_service_attacher as connection_api_service_attacher
from ideastatica_connection_api.models.con_load_effect import ConLoadEffect
from ideastatica_connection_api.models.con_load_effect_member_load import ConLoadEffectMemberLoad
from ideastatica_connection_api.models.con_load_effect_position_enum import ConLoadEffectPositionEnum
from ideastatica_connection_api.models.con_load_effect_section_load import ConLoadEffectSectionLoad
- Configure el registro mediante la variable "baseUrl", que abrirá su localhost. En el segundo paso, vincule la ruta absoluta de su archivo de IDEA StatiCa Connection.
Código fuente:
## Configurar el registro
baseUrl = "http://localhost:5000"
## Ruta absoluta a la carpeta con su script de Python y el módulo de unión
project_file_path = r"C:\Users\*username*\Documents\IDEA\API\Tutorial 02\tutorial 02 - empty.ideaCon"
- Vincule el cliente con un servicio ya en ejecución. Use el bloque try/except - dado que el bloque try genera un error, se ejecutará el bloque except. En la primera fase, es necesario abrir el proyecto y encontrar el ID del proyecto, que es único para cada proyecto de IDEA StatiCa. Si ejecuta el script, puede leer la ruta impresa, el ID único(1), el número de elementos adjuntos(2) y el número actual de cargas(3).
Código fuente:
# Crear un cliente adjunto a un servicio ya en ejecución
with connection_api_service_attacher.ConnectionApiServiceAttacher(baseUrl).create_api_client() as api_client:
try:
## Abrir el proyecto
print("Opening project %s" % project_file_path)
#api_client.project.active_project_id - ID del proyecto abierto
openedProject = api_client.project.open_project_from_filepath(project_file_path)
#openedProject.connections = [ {Con1}, {Con2}, {Con3} .... ]
firstConId = openedProject.connections[0].id
activeProjectId = api_client.project.active_project_id
print("Active project ID: %s" % activeProjectId, firstConId)
#obtener elementos en el proyecto
members = api_client.member.get_members(activeProjectId, firstConId)
sum= len(members)
print("Number of members in the project:", sum)
#obtener el número de efectos de carga actuales en la junta
loads = api_client.load_effect.get_load_effects(activeProjectId, firstConId)
nr = len(loads)
print("Number of current loads in the project:", loads[nr-1].id)
- Abra la hoja Excel y lea el número de filas con cargas.
Código fuente:
#abrir hoja Excel
excel_file = r"C:\Users\*username*\Documents\IDEA\API\Tutorial 02\tutorial 02 - loads.xlsx"
workbook = load_workbook(excel_file)
sheet = workbook.active
#obtener el número de filas en la hoja Excel
rowCount = sheet.max_row
print("Number of new rows with loads:", rowCount-1)
- Inicie un bucle para detectar las filas con el mismo nombre de combinación de carga(1). Dentro de este bucle, se inicia otro bucle que añade cargas a cada elemento(2). Después de cada bucle, se añade una línea con las cargas(3).
#Establecer el nombre inicial de la carga
newLoadEffect = ConLoadEffect()
newLoadEffect.name = "initial"
#lectura de filas según los nombres de los efectos de carga
newLoadEffect_name_previous = None
for i in range(2, rowCount+1):
#print("Checking load effect", sheet[i][0].value)
if sheet[i][0].value != newLoadEffect_name_previous:
#condición para omitir la primera fila
if newLoadEffect.name != "initial":
api_client.load_effect.add_load_effect(activeProjectId, firstConId, newLoadEffect)
nr = nr +1
# Creación del efecto de carga
newLoadEffect_name_previous = newLoadEffect.name
newLoadEffect = ConLoadEffect()
newLoadEffect.name = sheet[i][0].value
newLoadEffect.id = nr
newLoadEffect.active = True
newLoadEffect.is_percentage = False
newLoadEffect.member_loadings = []
print("Reading load effect:",newLoadEffect.name )
newLoadEffect_name_previous = newLoadEffect.name
#leer Id del elemento
for member in members:
loaded_member_id = member.id
loaded_member_name = member.name
#hacer coincidir el nombre del elemento con el Id
if member.name != sheet[i][1].value:
#el nombre del elemento y el Id no coinciden
continue
else:
#leer cargas para el elemento dado
cell_value = ConLoadEffectSectionLoad()
cell_value_position = sheet[i][2].value
cell_value.n = sheet[i][3].value*1000
cell_value.vy = sheet[i][4].value*1000
cell_value.vz = sheet[i][5].value*1000
cell_value.mx = sheet[i][6].value*1000
cell_value.my = sheet[i][7].value*1000
cell_value.mz = sheet[i][8].value*1000
# Carga del elemento
newLoad = ConLoadEffectMemberLoad()
newLoad.member_id = loaded_member_id
newLoad.position = ConLoadEffectPositionEnum(cell_value_position)
newLoad.section_load = cell_value
#añadir ConLoadEffectMemberLoad al efecto de carga
newLoadEffect.member_loadings.append(newLoad)
- Cree un nuevo archivo y guarde el proyecto actualizado con las combinaciones recién añadidas. Se añade una nota sobre la verificación del equilibrio.
Código fuente:
#Crear nuevo archivo ideaCon y añadir nuevas cargas
updated_file_name = r'C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 02\tutorial 02 with loads.ideaCon'
#Añadir la última iteración del efecto de carga (Comb3)
api_client.load_effect.add_load_effect(activeProjectId, firstConId, newLoadEffect)
# Guardar el proyecto actualizado
api_client.project.download_project(activeProjectId, updated_file_name )
print("New project with loads ",updated_file_name)
print('!!! Please check the equilibrium for loaded combinations in IDEA Connection.')
except Exception as e:
print("Operation failed : %s\n" % e)
Ahora puede comprobar el nuevo archivo para ver si tuvo éxito.
Descargas adjuntas
- tutorial 02 - loads from excel.py (PY, 5 kB)
- tutorial 02 - empty.ideaCon (IDEACON, 38 kB)
- tutorial 02 - loads.xlsx (XLSX, 9 kB)