API 시작하기 - 조합 일괄 가져오기 02

이 기사는 다음 언어로도 제공됩니다:
영어에서 AI로 번역됨
이 튜토리얼의 목표는 기존 연결에 여러 하중 케이스를 가져오는 것입니다.

첫 번째 단계

API 및 환경 설정 방법을 안내하는 튜토리얼 API 시작하기 - 기초 01을 먼저 진행하시기 바랍니다.

연결 파일 

먼저, RHS 300/200/8 중공 단면 두 개로 구성된 접합부를 생성하고 다음 그림에 따라 매개변수를 변경합니다.

inline image in article
inline image in article

이제 Developer 탭으로 이동하여 tutorial 02.contemp라는 이름으로 템플릿으로 저장합니다.  다음 튜토리얼에서 사용할 것입니다.

inline image in article

Design 탭으로 돌아가서 Operations  / Delete All을 마우스 오른쪽 버튼으로 클릭하고, 이 빈 파일을 tutorial 02 - empty.ideaCon으로 저장합니다. 

inline image in article

하중 조합이 포함된 Excel 시트

다음 단계로, .ideaCon 파일에 가져올 하중이 포함된 Excel 시트를 준비합니다. 이 페이지 하단에서 다운로드할 수 있습니다.

inline image in article

Python 스크립트에서 사용되는 열 이름을 정확히 사용하시기 바랍니다.

Python 클라이언트

적절한 IDEA StatiCa 폴더 내에서 CMD로 "IdeaStatiCa.ConnectionRestApi.exe"를 실행하고 원하는 IDE 도구를 엽니다.

inline image in article
  • 새 파일을 생성하고 계산 사용 및 localhost URL 연결을 가능하게 하는 패키지를 가져옵니다

소스 코드:

## API 패키지 가져오기
from enum import member # 문자열을 의미 있는 이름으로 대체하여 코드 가독성을 향상시키는 Python 라이브러리
from openpyxl import load_workbook # Excel 읽기/쓰기를 위한 Python 라이브러리
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
  • 변수 "baseUrl"을 통해 로깅을 구성하면 localhost가 실행됩니다. 두 번째 단계에서는 IDEA StatiCa Connection 파일의 절대 경로를 연결합니다.

소스 코드:

## 로깅 구성
baseUrl = "http://localhost:5000"
## Python 스크립트 및 연결 모듈이 있는 폴더의 절대 경로
project_file_path = r"C:\Users\*username*\Documents\IDEA\API\Tutorial 02\tutorial 02 - empty.ideaCon"

inline image in article
  • 이미 실행 중인 서비스에 클라이언트를 연결합니다. try/except 블록을 사용합니다 - try 블록에서 오류가 발생하면 except 블록이 실행됩니다. 첫 번째 단계에서는 프로젝트를 열고 모든 IDEA StatiCa 프로젝트에 고유한 프로젝트 ID를 찾아야 합니다. 스크립트를 실행하면 출력된 경로, 고유 ID(1), 연결된 부재 수(2), 현재 하중 수(3)를 확인할 수 있습니다.

소스 코드:

# 이미 실행 중인 서비스에 연결된 클라이언트 생성
with connection_api_service_attacher.ConnectionApiServiceAttacher(baseUrl).create_api_client() as api_client:

    try:

       ## 프로젝트 열기
       print("Opening project %s" % project_file_path)
       #api_client.project.active_project_id  - 열린 프로젝트의 ID
       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)
       #프로젝트의 부재 가져오기
       members = api_client.member.get_members(activeProjectId, firstConId)
       sum= len(members)
       print("Number of members in the project:", sum)
       #접합부의 현재 하중 효과 수 가져오기
       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 시트를 열고 하중이 있는 행의 수를 읽습니다. 

소스 코드:   

 #Excel 시트 열기
       excel_file = r"C:\Users\*username*\Documents\IDEA\API\Tutorial 02\tutorial 02 - loads.xlsx"
       workbook = load_workbook(excel_file)
       sheet = workbook.active
       #Excel 시트의 행 수 가져오기
       rowCount = sheet.max_row
       print("Number of new rows with loads:", rowCount-1)

inline image in article
  •  동일한 하중 조합 이름(1)을 가진 행을 감지하는 루프를 시작합니다. 이 루프 내에서 각 부재에 하중을 추가하는 또 다른 루프가 시작됩니다(2). 각 루프 후에 하중이 포함된 한 줄이 추가됩니다(3).

       #하중의 초기 이름 설정
       newLoadEffect = ConLoadEffect()
       newLoadEffect.name = "initial"
 
       #하중 효과 이름에 따라 행 읽기
       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:
            #첫 번째 행 건너뛰기 조건   
            if newLoadEffect.name != "initial":
                api_client.load_effect.add_load_effect(activeProjectId, firstConId, newLoadEffect)
                nr = nr +1
            # 하중 효과 생성
            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 

        #부재의 ID 읽기          
        for member in members:
            loaded_member_id = member.id
            loaded_member_name = member.name
            #부재 이름과 ID 일치 확인
            if member.name != sheet[i][1].value:
                #부재 이름과 ID가 일치하지 않음
                continue
            else:
                #해당 부재의 하중 읽기
                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      

            # 부재 하중
            newLoad = ConLoadEffectMemberLoad()
            newLoad.member_id = loaded_member_id
            newLoad.position = ConLoadEffectPositionEnum(cell_value_position)
            newLoad.section_load = cell_value

            #하중 효과에 ConLoadEffectMemberLoad 추가
            newLoadEffect.member_loadings.append(newLoad)    

inline image in article
  • 새 파일을 생성하고 새로 추가된 조합이 포함된 업데이트된 프로젝트를 저장합니다. 평형 검토에 관한 주석이 추가됩니다.

소스 코드:

#새 ideaCon 파일 생성 및 새 하중 추가
updated_file_name = r'C:\Users\AlexanderSzotkowski\Documents\IDEA\API\Tutorial 02\tutorial 02 with loads.ideaCon'
      #하중 효과의 마지막 반복 추가 (Comb3)
       api_client.load_effect.add_load_effect(activeProjectId, firstConId, newLoadEffect)
       # 업데이트된 프로젝트 저장
       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

이제 새 파일을 확인하여 성공적으로 완료되었는지 확인할 수 있습니다.

첨부 다운로드

관련 기사