Come iniziare con API - Importazione in batch di combinazioni 02
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.
Ora, andate nella scheda Sviluppatore e salvate il file come modello con il nome tutorial 02.contemp. Lo utilizzeremo nella prossima esercitazione.
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.
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.
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.
- 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
- 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"
- 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)
- 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)
- 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)
- 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)
Ora è possibile controllare il nuovo file per verificare se l'operazione è riuscita.
Download allegati
- tutorial 02 - loads from excel.py (PY, 5 kB)
- tutorial 02 - empty.ideaCon (IDEACON, 38 kB)
- tutorial 02 - loads.xlsx (XLSX, 9 kB)