Come iniziare con API - Importazione in batch di combinazioni 02

Questo articolo è disponibile in:
L'obiettivo dell'esercitazione è importare diversi casi di carico in una connessione esistente.

Primi passi

Si consiglia di consultare il tutorial Come iniziare con l'API - Nozioni di base 01, che illustra l'API e come impostare l'ambiente.

File di connessione

Per prima cosa, creare un giunto di due sezioni trasversali cave RHS 300/200/8 e modificare i parametri secondo le seguenti immagini.

inline image in article
inline image in article

Ora, andate nella scheda Sviluppatore e salvate il file come modello con il nome tutorial 02.contemp. Lo utilizzeremo nella prossima esercitazione.

inline image in article

Tornare alla scheda Progettazione, fare clic con il pulsante destro del mouse su Operazioni / Elimina tutto e salvare questo file vuoto sotto tutorial 02 - empty.ideaCon.

inline image in article

Foglio Excel con le combinazioni di carico

Come passo successivo, preparate un foglio Excel con i carichi che vogliamo importare nel file .ideaCon . È possibile scaricarlo in fondo a questa pagina.

inline image in article

Si prega di utilizzare i nomi esatti delle colonne come vengono utilizzati nello script Python.

Client Python

Eseguire "IdeaStatiCa.ConnectionRestApi.exe" in CMD all'interno della cartella IDEA StatiCa e aprire lo strumento IDE di vostra scelta.

inline image in article
  • Creare un nuovo file e importare i pacchetti che consentiranno l'uso del calcolo e il collegamento con l'URL localhost.

Codice sorgente:

## Importazione del pacchetto API
from enum import member # Libreria Python per migliorare la leggibilità del codice sostituendo le stringhe con nomi significativi
from openpyxl import load_workbook # Libreria Python per leggere/scrivere 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
  • Configurare il logging tramite la variabile"baseUrl", che richiamerà il localhost. Nel secondo passo, accoppiare il percorso assoluto del file IDEA StatiCa Connection.

Codice sorgente:

## Configurare la registrazione
baseUrl = "http://localhost:5000"
## Percorso assoluto della cartella con lo script python e il modulo di connessione
project_file_path = r "C:\Users\*username*\Documents\IDEA\API\Tutorial 02\tutorial 02 - empty.ideaCon"

inline image in article
  • Abbinare il client a un servizio già in esecuzione. Utilizzare il blocco try/except: poiché il blocco try genera un errore, verrà eseguito il blocco except. Nella prima fase, è necessario aprire il progetto e trovare l'ID del progetto che è unico per ogni progetto IDEA StatiCa. Se si esegue lo script, è possibile leggere il percorso stampato, l'ID univoco(1), il numero di membri collegati(2) e il numero attuale di carichi(3).

Codice sorgente:

# Creare un client collegato a un servizio già in esecuzione
with connection_api_service_attacher.ConnectionApiServiceAttacher(baseUrl).create_api_client() as api_client:

try:

## Aprire il progetto
print("Opening project %s" % project_file_path)
#api_client.project.active_project_id - ID del progetto aperto
openedProject = api_client.project.open_project_from_filepath(project_file_path)
#openedProject.connections = [ {Con1}, {Con2}, {Con3} .... ]
firstConId = openProject.connections[0].id
activeProjectId = api_client.project.active_project_id
print("Active project ID: %s" % activeProjectId, firstConId)
#get members in project
members = api_client.member.get_members(activeProjectId, firstConId)
sum= len(members)
print("Numero di membri nel progetto:", sum)
#ottenere il numero di effetti di carico correnti nel giunto
loads = api_client.load_effect.get_load_effects(activeProjectId, firstConId)
nr = len(loads)
print("Numero di carichi correnti nel progetto:", loads[nr-1].id)

inline image in article
  • Aprire il foglio Excel e leggere il numero di righe con i carichi.

Codice sorgente:

#apri il foglio Excel
excel_file = r "C:\Users\*username*\Documents\IDEA\API\Tutorial 02\tutorial 02 - loads.xlsx"
workbook = load_workbook(excel_file)
sheet = workbook.active
#ottenere il numero di righe nel foglio Excel
rowCount = sheet.max_row
print("Numero di nuove righe con carichi:", rowCount-1)

inline image in article
  • Avviare un ciclo per individuare le righe con la stessa combinazione di carichi nome(1). All'interno di questo ciclo, viene avviato un altro ciclo che aggiunge carichi a ciascun membro(2). Dopo ogni ciclo, viene aggiunta una riga con i carichi(3).

#Impostare il nome iniziale del carico
newLoadEffect = ConLoadEffect()
newLoadEffect.name = "initial"

#lettura delle righe in base ai nomi degli effetti di carico
newLoadEffect_name_previous = None
for i in range(2, rowCount+1):
#print("Controllo dell'effetto di carico", foglio[i][0].value)
if sheet[i][0].value != nome_nuovo_effetto_di_carico_precedente:
#condizione per saltare la prima riga
if nuovoeffetto_di_carico.name != "initial":
api_client.load_effect.add_load_effect(activeProjectId, firstConId, newLoadEffect)
nr = nr +1
# Creazione dell'effetto di caricamento
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("Lettura dell'effetto di carico:",newLoadEffect.name )
newLoadEffect_name_previous = newLoadEffect.name

#Lettura dell'id del membro
for membro in membri:
loaded_member_id = membro.id
loaded_member_name = member.name
#matching member name and Id
if member.name != sheet[i][1].valore:
#il nome del membro e l'id non corrispondono
continuare
else:
#leggere i carichi per il membro dato
cell_value = ConLoadEffectSectionLoad()
cell_value_position = sheet[i][2].valore
cell_value.n = foglio[i][3].valore*1000
cell_value.vy = foglio[i][4].valore*1000
cell_value.vz = foglio[i][5].valore*1000
valore_cella.mx = foglio[i][6].valore*1000
valore_cella.my = foglio[i][7].valore*1000
cell_value.mz = foglio[i][8].valore*1000

# Caricamento dei membri
newLoad = ConLoadEffectMemberLoad()
newLoad.member_id = loaded_member_id
newLoad.position = ConLoadEffectPositionEnum(cell_value_position)
newLoad.section_load = cell_value

#aggiunge ConLoadEffectMemberLoad all'effetto Load
newLoadEffect.member_loadings.append(newLoad)

inline image in article
  • Creare un nuovo file e memorizzare il progetto aggiornato con le nuove combinazioni aggiunte. Viene aggiunto un commento sulla verifica dell'equilibrio.

Codice sorgente:

#Creare un nuovo file ideaCon e aggiungere nuovi carichi
updated_file_name = r'C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 02\tutorial 02 con carichi.ideaCon'
#Aggiungi l'ultima iterazione dell'effetto di caricamento (Comb3)
api_client.load_effect.add_load_effect(activeProjectId, firstConId, newLoadEffect)
# Salvataggio del progetto aggiornato
api_client.project.download_project(activeProjectId, updated_file_name )
print("New project with loads ",updated_file_name)
print('!!! Controllare l'equilibrio per le combinazioni caricate in IDEA Connection.')

except Exception as e:
print("Operazione fallita : %s\n" % e)

inline image in article

Ora è possibile controllare il nuovo file per verificare se l'operazione è riuscita.

Download allegati

Articoli correlati