Hogyan kezdjük el az API használatát - Kombinációk kötegelt importálása 02

Ez a cikk a következő nyelveken is elérhető
Angol nyelvről mesterséges intelligencia fordította
Az oktatóanyag célja, hogy több teherkombinációt importáljon egy meglévő kapcsolatba.

Első lépések

Javasoljuk, hogy tekintse át a Hogyan kezdjük el az API használatát - Alapok 01 oktatóanyagot, amely bemutatja az API-t és a környezet beállítását.

Connection fájl 

Először hozzon létre egy csomópontot két üreges keresztmetszetű RHS 300/200/8 elemből, és módosítsa a paramétereket a következő képek szerint.

inline image in article
inline image in article

Most lépjen a Developer fülre, és mentse el sablonként tutorial 02.contemp néven.  A következő oktatóanyagban fogjuk használni.

inline image in article

Lépjen vissza a Design fülre, kattintson jobb gombbal a Műveletek  / Összes törlése lehetőségre, és mentse el ezt az üres fájlt tutorial 02 - empty.ideaCon néven. 

inline image in article

Excel táblázat teherkombinációkkal

Következő lépésként készítsen egy Excel táblázatot azokkal a terhekkel, amelyeket importálni szeretnénk a .ideaCon fájlba. Az oldal alján letöltheti.

inline image in article

Kérjük, használja az oszlopok pontos neveit, ahogyan azok a Python szkriptben szerepelnek.

Python kliens

Futtassa az "IdeaStatiCa.ConnectionRestApi.exe" fájlt CMD-ben a megfelelő IDEA StatiCa mappán belül, és nyissa meg a választott IDE eszközt.

inline image in article
  • Hozzon létre egy új fájlt, és importálja a csomagokat amelyek lehetővé teszik a számítás használatát és a kapcsolatot a localhost URL-lel. 

Forráskód:

## 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
  • Konfigurálja a naplózást a "baseUrl" változón keresztül, amely betölti a localhostot. A második lépésben párosítsa az IDEA StatiCa Connection fájl abszolút elérési útját.

Forráskód:

## 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
  • Párosítsa a klienst egy már futó szolgáltatással. Használja a try/except blokkot - mivel a try blokk hibát vált ki, az except blokk kerül végrehajtásra. Az első fázisban szükséges megnyitni a projektet és megtalálni a projekt azonosítóját, amely minden IDEA StatiCa projekt esetén egyedi. Ha futtatja a szkriptet, kiolvashatja a kiírt elérési utat, az egyedi azonosítót (1), a csatlakoztatott szerkezeti elemek számát (2) és a terhek aktuális számát (3).

Forráskód:

# 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
  • Nyissa meg az Excel táblázatot, és olvassa ki a terheket tartalmazó sorok számát. 

Forráskód:   

 #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
  •  Indítson el egy ciklust az azonos teherkombináció névvel rendelkező sorok felismeréséhez (1). Ezen a cikluson belül egy másik ciklus indul, amely terheket ad hozzá minden egyes szerkezeti elemhez (2). Minden ciklus után egy sor hozzáadódik a terhekkel (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
  • Hozzon létre egy új fájlt, és mentse el a frissített projektet az újonnan hozzáadott kombinációkkal. Megjegyzés kerül hozzáadásra az egyensúly ellenőrzéséről.

Forráskód:

#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

Most ellenőrizheti az új fájlt, hogy meggyőződjön a sikeres végrehajtásról.

Csatolt letöltések

Kapcsolódó cikkek