API 시작하기 - 조합 일괄 가져오기 02
첫 번째 단계
API 및 환경 설정 방법을 안내하는 튜토리얼 API 시작하기 - 기초 01을 먼저 진행하시기 바랍니다.
연결 파일
먼저, RHS 300/200/8 중공 단면 두 개로 구성된 접합부를 생성하고 다음 그림에 따라 매개변수를 변경합니다.
이제 Developer 탭으로 이동하여 tutorial 02.contemp라는 이름으로 템플릿으로 저장합니다. 다음 튜토리얼에서 사용할 것입니다.
Design 탭으로 돌아가서 Operations / Delete All을 마우스 오른쪽 버튼으로 클릭하고, 이 빈 파일을 tutorial 02 - empty.ideaCon으로 저장합니다.
하중 조합이 포함된 Excel 시트
다음 단계로, .ideaCon 파일에 가져올 하중이 포함된 Excel 시트를 준비합니다. 이 페이지 하단에서 다운로드할 수 있습니다.
Python 스크립트에서 사용되는 열 이름을 정확히 사용하시기 바랍니다.
Python 클라이언트
적절한 IDEA StatiCa 폴더 내에서 CMD로 "IdeaStatiCa.ConnectionRestApi.exe"를 실행하고 원하는 IDE 도구를 엽니다.
- 새 파일을 생성하고 계산 사용 및 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
- 변수 "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"
- 이미 실행 중인 서비스에 클라이언트를 연결합니다. 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)
- 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)
- 동일한 하중 조합 이름(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)
- 새 파일을 생성하고 새로 추가된 조합이 포함된 업데이트된 프로젝트를 저장합니다. 평형 검토에 관한 주석이 추가됩니다.
소스 코드:
#새 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)
이제 새 파일을 확인하여 성공적으로 완료되었는지 확인할 수 있습니다.
첨부 다운로드
- tutorial 02 - loads from excel.py (PY, 5 kB)
- tutorial 02 - empty.ideaCon (IDEACON, 38 kB)
- tutorial 02 - loads.xlsx (XLSX, 9 kB)