Cómo empezar con la API - Importación por lotes de combinaciones 02

Este artículo también está disponible en:
Traducido por IA del inglés
El objetivo del tutorial es importar varios casos de carga en una unión existente.

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.

inline image in article
inline image in article

Ahora, vaya a la pestaña Developer y guárdelo como plantilla con el nombre tutorial 02.contemp.  Lo usaremos en el siguiente tutorial.

inline image in article

Vuelva a la pestaña Design, haga clic derecho en Operaciones  / Eliminar todo y guarde este archivo vacío como tutorial 02 - empty.ideaCon

inline image in article

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.

inline image in article

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.

inline image in article
  • 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

inline image in article
  • 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"

inline image in article
  • 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)

inline image in article
  • 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)

inline image in article
  •  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)    

inline image in article
  • 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)   

inline image in article

Ahora puede comprobar el nuevo archivo para ver si tuvo éxito.

Descargas adjuntas

Artículos relacionados