API ile Nasıl Başlanır - Kombinasyonların Toplu İçe Aktarımı 02

Bu makale aynı zamanda şu dillerde de mevcuttur:
İngilizceden yapay zeka tarafından çevrildi
Bu eğitimin amacı, mevcut bir birleşime birkaç yük kombinasyonu aktarmaktır.

İlk adımlar

API ve ortamın nasıl kurulacağı hakkında bilgi veren API ile Nasıl Başlanır - Temel Bilgiler 01 eğitimini incelemenizi öneririz.

Connection dosyası 

Önce, RHS 300/200/8 iki içi boş kesitli bir birleşim oluşturun ve parametreleri aşağıdaki resimlere göre değiştirin.

inline image in article
inline image in article

Şimdi Developer sekmesine gidin ve bunu tutorial 02.contemp adıyla bir şablon olarak kaydedin.  Bir sonraki eğitimde kullanacağız.

inline image in article

Design sekmesine geri dönün, İşlemler  / Tümünü Sil seçeneğine sağ tıklayın ve bu boş dosyayı tutorial 02 - empty.ideaCon olarak kaydedin. 

inline image in article

Yük kombinasyonlarını içeren Excel tablosu

Sonraki adım olarak, .ideaCon dosyasına aktarmak istediğimiz yükleri içeren bir Excel tablosu hazırlayın. Bu sayfanın alt kısmından indirebilirsiniz.

inline image in article

Python betiğinde kullanılan sütun adlarını birebir aynı şekilde kullanın.

Python istemcisi

Uygun IDEA StatiCa klasöründe CMD üzerinden "IdeaStatiCa.ConnectionRestApi.exe" dosyasını çalıştırın ve tercih ettiğiniz IDE aracını açın.

inline image in article
  • Yeni bir dosya oluşturun ve hesaplama kullanımını ve localhost URL'si ile bağlantıyı etkinleştirecek paketleri içe aktarın

Kaynak kod:

## API paketinin içe aktarılması
from enum import member # Dizeleri anlamlı adlarla değiştirerek kod okunabilirliğini artıran Python kütüphanesi
from openpyxl import load_workbook # Excel okuma/yazma için Python kütüphanesi
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
  • Localhost'unuzu çekecek olan "baseUrl" değişkeni aracılığıyla günlük kaydını yapılandırın. İkinci adımda, IDEA StatiCa Connection dosyanızın mutlak yolunu eşleştirin.

Kaynak kod:

## Günlük kaydını yapılandır
baseUrl = "http://localhost:5000"
## Python betiğinizin ve connection modülünün bulunduğu klasörün mutlak yolu
project_file_path = r"C:\Users\*username*\Documents\IDEA\API\Tutorial 02\tutorial 02 - empty.ideaCon"

inline image in article
  • İstemciyi zaten çalışmakta olan bir servis ile eşleştirin. try/except bloğunu kullanın - try bloğu bir hata oluşturduğunda except bloğu çalıştırılacaktır. İlk aşamada projeyi açmak ve her IDEA StatiCa projesi için benzersiz olan proje kimliğini bulmak gereklidir. Betiği çalıştırırsanız, yazdırılan yolu, benzersiz kimliği (1), bağlı eleman sayısını (2) ve mevcut yük sayısını (3) okuyabilirsiniz.

Kaynak kod:

# Zaten çalışmakta olan bir servise bağlı istemci oluştur
with connection_api_service_attacher.ConnectionApiServiceAttacher(baseUrl).create_api_client() as api_client:

    try:

       ## Projeyi aç
       print("Opening project %s" % project_file_path)
       #api_client.project.active_project_id  - Açık projenin kimliği
       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)
       #projedeki elemanları al
       members = api_client.member.get_members(activeProjectId, firstConId)
       sum= len(members)
       print("Number of members in the project:", sum)
       #birleşimdeki mevcut yük etkilerinin sayısını al
       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
  • Excel tablosunu açın ve yüklerin bulunduğu satır sayısını okuyun. 

Kaynak kod:   

 #Excel tablosunu aç
       excel_file = r"C:\Users\*username*\Documents\IDEA\API\Tutorial 02\tutorial 02 - loads.xlsx"
       workbook = load_workbook(excel_file)
       sheet = workbook.active
       #Excel tablosundaki satır sayısını al
       rowCount = sheet.max_row
       print("Number of new rows with loads:", rowCount-1)

inline image in article
  •  Aynı yük kombinasyonu adına sahip satırları tespit etmek için bir döngü başlatın (1). Bu döngü içinde, her elemana yük ekleyen başka bir döngü başlatılır (2). Her döngünün ardından yükleri içeren bir satır eklenir (3).

       #Yükün başlangıç adını ayarla
       newLoadEffect = ConLoadEffect()
       newLoadEffect.name = "initial"
 
       #yük etkisi adlarına göre satırları oku
       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:
            #ilk satırı atlamak için koşul   
            if newLoadEffect.name != "initial":
                api_client.load_effect.add_load_effect(activeProjectId, firstConId, newLoadEffect)
                nr = nr +1
            # Yük etkisi oluşturma
            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 

        #eleman kimliğini oku          
        for member in members:
            loaded_member_id = member.id
            loaded_member_name = member.name
            #eleman adı ve kimliğini eşleştir
            if member.name != sheet[i][1].value:
                #eleman adı ve kimliği eşleşmiyor
                continue
            else:
                #verilen eleman için yükleri oku
                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      

            # Eleman yükü
            newLoad = ConLoadEffectMemberLoad()
            newLoad.member_id = loaded_member_id
            newLoad.position = ConLoadEffectPositionEnum(cell_value_position)
            newLoad.section_load = cell_value

            #ConLoadEffectMemberLoad'u Yük etkisine ekle
            newLoadEffect.member_loadings.append(newLoad)    

inline image in article
  • Yeni bir dosya oluşturun ve güncellenen projeyi yeni eklenen kombinasyonlarla birlikte kaydedin. Denge kontrolüne ilişkin bir not eklenmiştir.

Kaynak kod:

#Yeni ideaCon dosyası oluştur ve yeni yükleri ekle
updated_file_name = r'C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 02\tutorial 02 with loads.ideaCon'
      #Yük etkisinin son iterasyonunu ekle (Comb3)
       api_client.load_effect.add_load_effect(activeProjectId, firstConId, newLoadEffect)
       # Güncellenen projeyi kaydet
       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

Şimdi, başarılı olup olmadığınızı görmek için yeni dosyayı kontrol edebilirsiniz.

Ekli İndirmeler

İlgili makaleler