Cum să începeți cu API - Import în lot al combinațiilor 02

Acest articol este disponibil și în:
Tradus de AI din engleză
Scopul tutorialului este de a importa mai multe cazuri de încărcare într-o îmbinare existentă.

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.

inline image in article
inline image in article

Acum, accesați fila Developer și salvați-l ca șablon cu numele tutorial 02.contemp.  Îl vom folosi în tutorialul următor.

inline image in article

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

inline image in article

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.

inline image in article

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.

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

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

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

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

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

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

inline image in article

Acum puteți verifica noul fișier pentru a vedea dacă operațiunea a fost realizată cu succes.

Descărcări atașate

Articole conexe