Cum să începeți cu API - Import în lot al combinațiilor 02
Primii pași
Recomandăm parcurgerea tutorialului Cum să începeți cu API - Noțiuni de bază 01, care vă familiarizează cu API-ul și cu configurarea mediului de lucru.
Fișierul îmbinării
Mai întâi, creați un nod format din două secțiuni transversale tubulare RHS 300/200/8 și modificați parametrii conform imaginilor de mai jos.
Acum, accesați fila Developer și salvați-l ca șablon cu numele tutorial 02.contemp. Îl vom folosi în tutorialul următor.
Reveniți la fila Design, faceți clic dreapta pe Operații / Ștergeți tot și salvați acest fișier gol sub denumirea tutorial 02 - empty.ideaCon.
Foaie Excel cu combinații de încărcări
Ca pas următor, pregătiți o foaie Excel cu încărcările pe care dorim să le importăm în fișierul .ideaCon. O puteți descărca din partea de jos a acestei pagini.
Vă rugăm să folosiți exact numele coloanelor așa cum sunt utilizate în scriptul Python.
Client Python
Rulați „IdeaStatiCa.ConnectionRestApi.exe" în CMD din folderul corespunzător IDEA StatiCa și deschideți instrumentul IDE preferat.
- Creați un fișier nou și importați pachetele care vor permite utilizarea calculului și legătura cu URL-ul localhost.
Cod sursă:
## Import of API package
from enum import member # Python library to improve code readability by replacing strings with meaningful names
from openpyxl import load_workbook # Python library to read/write 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
- Configurați jurnalizarea prin variabila „baseUrl", care va prelua localhost-ul dumneavoastră. În al doilea pas, asociați calea absolută a fișierului IDEA StatiCa Connection.
Cod sursă:
## Configure logging
baseUrl = "http://localhost:5000"
## Absolute path into a folder with your python script and connection module
project_file_path = r"C:\Users\*username*\Documents\IDEA\API\Tutorial 02\tutorial 02 - empty.ideaCon"
- Asociați clientul cu un serviciu deja rulat. Utilizați blocul try/except - deoarece blocul try generează o eroare, blocul except va fi executat. În prima fază, este necesar să deschideți proiectul și să găsiți ID-ul de proiect, care este unic pentru fiecare proiect IDEA StatiCa. Dacă rulați scriptul, puteți citi calea afișată, ID-ul unic(1), numărul de elemente atașate(2) și numărul curent de încărcări(3).
Cod sursă:
# Create a client attached to an already running service
with connection_api_service_attacher.ConnectionApiServiceAttacher(baseUrl).create_api_client() as api_client:
try:
## Open the project
print("Opening project %s" % project_file_path)
#api_client.project.active_project_id - ID of opened project
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)
#get members in project
members = api_client.member.get_members(activeProjectId, firstConId)
sum= len(members)
print("Number of members in the project:", sum)
#get number of current load effects in the joint
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)
- Deschideți foaia Excel și citiți numărul de rânduri cu încărcări.
Cod sursă:
#open Excel sheet
excel_file = r"C:\Users\*username*\Documents\IDEA\API\Tutorial 02\tutorial 02 - loads.xlsx"
workbook = load_workbook(excel_file)
sheet = workbook.active
#get the number of rows in the Excel sheet
rowCount = sheet.max_row
print("Number of new rows with loads:", rowCount-1)
- Porniți o buclă pentru a detecta rândurile cu același nume de combinație de încărcare(1). În cadrul acestei bucle, se pornește o altă buclă care adaugă încărcări fiecărui element(2). După fiecare buclă, se adaugă un rând cu încărcările(3).
#Set initial name of load
newLoadEffect = ConLoadEffect()
newLoadEffect.name = "initial"
#reading rows according to load effects names
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:
#condition for skipping first row
if newLoadEffect.name != "initial":
api_client.load_effect.add_load_effect(activeProjectId, firstConId, newLoadEffect)
nr = nr +1
# Load effect creation
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
#read Id of member
for member in members:
loaded_member_id = member.id
loaded_member_name = member.name
#match member name and Id
if member.name != sheet[i][1].value:
#member name and Id do not match
continue
else:
#read loads for given member
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
# Member load
newLoad = ConLoadEffectMemberLoad()
newLoad.member_id = loaded_member_id
newLoad.position = ConLoadEffectPositionEnum(cell_value_position)
newLoad.section_load = cell_value
#add ConLoadEffectMemberLoad to Load effect
newLoadEffect.member_loadings.append(newLoad)
- Creați un fișier nou și salvați proiectul actualizat cu combinațiile nou adăugate. Se adaugă o observație privind verificarea echilibrului.
Cod sursă:
#Create new ideaCon file and add new loads
updated_file_name = r'C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 02\tutorial 02 with loads.ideaCon'
#Add last iteration of load effect (Comb3)
api_client.load_effect.add_load_effect(activeProjectId, firstConId, newLoadEffect)
# Saving the updated project
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)
Acum puteți verifica noul fișier pentru a vedea dacă operațiunea a fost realizată cu succes.
Descărcări atașate
- tutorial 02 - loads from excel.py (PY, 5 kB)
- tutorial 02 - empty.ideaCon (IDEACON, 38 kB)
- tutorial 02 - loads.xlsx (XLSX, 9 kB)