(KR) MIDAS Civil with Python

(KR) MIDAS Civil with Python

1. Python κ°œλ°œν™˜κ²½ μ„€μ •

1.1 μ„€μΉ˜νŒŒμΌ

μ„€μΉ˜νŒŒμΌμ€ 파이썬 곡식 μ›Ήμ‚¬μ΄νŠΈμ—μ„œ λ‚΄λ €λ°›μŠ΅λ‹ˆλ‹€.

Welcome to Python.org

Python 곡식 μ›Ήμ‚¬μ΄νŠΈ

* μœˆλ„μš° 이외에 OS ν™˜κ²½μ„ μœ„ν•œ μ—¬λŸ¬ μ„€μΉ˜νŒŒμΌμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

Β 

1.2 파이썬 μ„€μΉ˜

Python을 μ„€μΉ˜ν•©λ‹ˆλ‹€.

Python μ„€μΉ˜ν™”λ©΄

μ•„λž˜ νŽΈμ§‘κΈ°λŠ” 더 νŽΈλ¦¬ν•œ Python κ°œλ°œν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

Recommended Code Editors for Python

(λ³Έ μ„€λͺ…μ„œλŠ” Visual Studio Codeλ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.)

Β 

1.3 μΆ”κ°€ λͺ¨λ“ˆ μ„€μΉ˜

Python에 Request λͺ¨λ“ˆμ„ μ„€μΉ˜ ν•΄μ•Ό, MIDAS/Civil APIλ₯Ό μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Request λͺ¨λ“ˆμ€ λ‹€μŒκ³Ό 같이 μ„€μΉ˜κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

Β 

Request λͺ¨λ“ˆ μ„€μΉ˜(Visiul Studio Code)

ν”„λ‘œκ·Έλž¨ ν•˜λ‹¨μ˜ 터미널 창이 보이지 μ•ŠλŠ”λ‹€λ©΄, Menu-Terminal-New Terminal 을 μ΄μš©ν•˜μ—¬, Terminal 창을 μ‹€ν–‰ν•©λ‹ˆλ‹€. μ•„λž˜ ν…μŠ€νŠΈλ₯Ό 터미널 창에 λΆ™μ—¬ 넣은 ν›„, Enterλ₯Ό λˆŒλŸ¬μ€λ‹ˆλ‹€.

Β 

py -3 -m pip install requests

Β 

Request λͺ¨λ“ˆ μ„€μΉ˜ μ™„λ£Œ

Β 

2. Python을 μ΄μš©ν•˜μ—¬ MIDAS/Civil API μž‘λ™ν•΄λ³΄κΈ°

κ°„λ‹¨ν•œ 예제λ₯Ό 톡해 λ™μž‘ 방식을 μ‚΄νŽ΄λ΄…λ‹ˆλ‹€.

2.1 MIDAS/Civil API μ‹€ν–‰ν•˜κΈ°

API와 ν†΅μ‹ ν•˜κΈ° μœ„ν•œ Civil은 λ‹€μŒκ³Ό 같이 μ‹€ν–‰ κ°€λŠ₯ν•©λ‹ˆλ‹€.

Β 

MIDAS/Civil API μ‹€ν–‰ν•˜κΈ°
  • Python Code

import subprocess import time p = subprocess.Popen([r"C:\\CivilBuild-API\\CVLw.exe", "/API"]) ## wait until civil api process ready time.sleep(10)

MIDAS/Civil μ‹€ν–‰ 파일의 κ²½λ‘œλŠ” 각자 μ‚¬μš©μžμ— 맞게 μˆ˜μ •ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.

Β 

2.2 MIDAS/Civil API λ¬Έμ„œ μ—΄κΈ°

MIDAS/Civil을 μ‹€ν–‰ μ‹œν‚¨ ν›„ 이미 μž‘μ„±λœ λ¬Έμ„œλ₯Ό μ—¬λŠ” λ™μž‘μ„ μ‹€ν–‰ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

Β 

λ¬Έμ„œ μ—΄κΈ°
  • Python Code

import requests CIVIL_API_URL = "http://127.0.0.1:10024" ## DOC.OPEN requests.post(CIVIL_API_URL + "/doc/open", json={"Argument":"C:\\FSM 1Cells Box.mcb"})

MIDAS/Civil 파일의 κ²½λ‘œλŠ” 각자 μ‚¬μš©μžμ— 맞게 μˆ˜μ •ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.

URL μ£Όμ†ŒλŠ” API λ₯Ό ν†΅ν•œ MIDAS/Civil μ‹€ν–‰μ‹œ λ™μž‘ν•˜λŠ” APIServer.exeμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

APIServer μ°½

Β 

2.3 MIDAS/Civil API 해석 μ‹€ν–‰ 및 ν”„λ‘œκ·Έλž¨ μ’…λ£Œ

뢈러온 MIDAS/Civil 파일의 해석을 μ‹€ν–‰ν•˜κ³  ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

Β 

해석 μ‹€ν–‰ 및 ν”„λ‘œκ·Έλž¨ μ’…λ£Œ
  • Python Code

## DOC.ANAL requests.post(CIVIL_API_URL + "/doc/anal", json={}) ## DOC.EXIT requests.post(CIVIL_API_URL + "/doc/exit", json={})

Β 

3. μž‘λ™ κ°€λŠ₯ν•œ λͺ…λ Ήμ–΄

3.1 DOC λͺ…λ Ήμ–΄

DOC λͺ…λ Ήμ–΄λŠ” document κ΄€λ ¨ λͺ…λ Ήμ–΄λ‘œ 주둜 λ¬Έμ„œλ₯Ό 생성/μ—΄κΈ°/λ‹«κΈ° λ“±μ˜ λ™μž‘μ„ μ œμ–΄ν•©λ‹ˆλ‹€.

Β 

  • λ¬Έμ„œ μ—΄κΈ° : β€œ/doc/open”

import requests #String = MCB file path (ex : "C:\\Python\\Example.mcb") requests.post("http://127.0.0.1:10024/doc/open", json={"Argument":String})

Β 

  • μƒˆ λ¬Έμ„œ μ—΄κΈ° : β€œ/doc/new”

import requests requests.post("http://127.0.0.1:10024/doc/new", json={})

Β 

  • λ¬Έμ„œ λ‹«κΈ° : β€œ/doc/close”

import requests requests.post("http://127.0.0.1:10024/doc/close", json={})

Β 

  • 해석 μ‹€ν–‰ : β€œ/doc/anal”

import requests requests.post("http://127.0.0.1:10024/doc/anal", json={})

Β 

  • λ¬Έμ„œ μ €μž₯ : β€œ/doc/save”

import requests requests.post("http://127.0.0.1:10024/doc/save", json={})

Β 

  • μƒˆ μ΄λ¦„μœΌλ‘œ μ €μž₯ : β€œ/doc/saveas”

import requests #String = MCB file path (ex : "C:\\Python\\Example.mcb") requests.post("http://127.0.0.1:10024/doc/saveas", json={"Argument":String})

Β 

  • Json 데이터 Import : β€œ/doc/import”

import requests #String = MCB file path (ex : "C:\\Json\\Example.json") requests.post("http://127.0.0.1:10024/doc/import", json={"Argument":String})

Β 

  • Json 데이터 Export : β€œ/doc/export”

import requests #String = MCB file path (ex : "C:\\Json\\Example.json") requests.post("http://127.0.0.1:10024/doc/export", json={"Argument":String})

Β 

3.2 DB λͺ…λ Ήμ–΄

DB λͺ…λ Ήμ–΄λŠ” 데이터 이름에 λŒ€ν•œ μš”μ²­μž…λ‹ˆλ‹€. 각각의 데이터 이름에 λŒ€ν•˜μ—¬ GET/POST/PUT/DELETE λ©”μ†Œλ“œκ°€ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

Β 

  • GET DB Method : μ—΄λ €μ§„ λ¬Έμ„œμ˜ 데이터λ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€.

Β 

예제1: λ‹€μŒ 예제 μ½”λ“œλŠ” μ—΄μ–΄μ§„ λ¬Έμ„œλ‘œλΆ€ν„° λͺ¨λ“  Node 정보λ₯Ό λΆˆλŸ¬μ™€ , νŠΉμ •ν•œ Node 정보λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

Β 

Get DB Method 예제1 (Node)
import requests import json CIVIL_API_URL = "http://127.0.0.1:10024" ## GET /DB/NODE get_data=requests.get(CIVIL_API_URL + "/db/node").text get_data=json.loads(get_data) print(get_data['NODE']['1003'])

Β 

예제2: λ‹€μŒ 예제 μ½”λ“œλŠ” μ—΄μ–΄μ§„ λ¬Έμ„œλ‘œλΆ€ν„° νŠΉμ •ν•œ Node 번호의 μ •λ³΄λ§Œ λΆˆλŸ¬μ˜΅λ‹ˆλ‹€.

Get DB Method 예제2 (Node)
import requests CIVIL_API_URL = "http://127.0.0.1:10024" ## GET /DB/NODE get_data=requests.get(CIVIL_API_URL + "/db/node/1003").text print(get_data)

Β 

  • Post DB Method : μ—΄λ €μ§„ λ¬Έμ„œμ˜ 데이터λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. 이미 Keyκ°€ μžˆμ„ 경우 μ‹€νŒ¨ν•©λ‹ˆλ‹€.

Β 

λ‹€μŒ μ˜ˆμ œλŠ” μ—΄μ–΄μ§„ λ¬Έμ„œμ— νŠΉμ • Nodeλ₯Ό μΆ”κ°€ν•˜κ³ , Node 정보λ₯Ό λΆˆλŸ¬μ™€ 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

Post DB Method 예제 (Node)
import requests import json CIVIL_API_URL = "http://127.0.0.1:10024" ## POST /DB/NODE requests.post(CIVIL_API_URL + "/db/node",json={"Assign":{"999":{"X":0,"Y":10.0,"Z":0}}}) ## GET /DB/NODE get_data=requests.get(CIVIL_API_URL + "/db/node").text get_data=json.loads(get_data) print(get_data['NODE']['999'])

Β 

  • Put DB Method : μ—΄λ €μ§„ λ¬Έμ„œμ˜ 데이터λ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” key에 λŒ€ν•œ μš”μ²­ μ‹œ μ‹€νŒ¨ν•©λ‹ˆλ‹€.

Β 

λ‹€μŒ μ˜ˆμ œλŠ” νŠΉμ • λ…Έλ“œμ˜ μ’Œν‘œλ₯Ό λ³€κ²½ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

Put DB Method 예제 (Node)
import requests CIVIL_API_URL = "http://127.0.0.1:10024" ## GET /DB/NODE get_data=requests.get(CIVIL_API_URL + "/db/node/1003").text print(get_data) ## PUT /DB/NODE requests.put(CIVIL_API_URL + "/db/node",json={"Assign":{"1003":{"X":0,"Y":20.0,"Z":0}}}) ## GET /DB/NODE get_data=requests.get(CIVIL_API_URL + "/db/node/1003").text print(get_data)

Β 

  • Delete DB Method : μ—΄λ €μ§„ λ¬Έμ„œμ˜ 데이터λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€. μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” Key에 λŒ€ν•œ μš”μ²­ μ‹œ μ‹€νŒ¨ν•©λ‹ˆλ‹€.

Β 

예제1 : νŠΉμ • Nodeλ₯Ό μ‚­μ œν•˜κ³ , μ‚­μ œλœ Node의 정보λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.

Delete DB Method 예제1 (Node)
import requests CIVIL_API_URL = "http://127.0.0.1:10024" ## DELETE /DB/NODE Delete_Data=requests.delete(CIVIL_API_URL + "/db/node/999").text print(Delete_Data)

Β 

예제2 : 전체 Nodeλ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

Delete DB Method 예제2 (Node)
import requests CIVIL_API_URL = "http://127.0.0.1:10024" ## DELETE /DB/NODE requests.delete(CIVIL_API_URL + "/db/node")

Β 

3.3 POST λͺ…λ Ήμ–΄

PostλŠ” λͺ…λ Ήμ–΄λŠ” 해석 μ‹€ν–‰ ν›„ ν›„μ²˜λ¦¬ κ΄€λ ¨ν•œ λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

Β 

  • κ²°κ³Ό ν…Œμ΄λΈ” μš”μ²­ : β€œ/post/table”

예제1 : λ‹€μŒ μ˜ˆμ œλŠ” μ—΄λ €μ§„ λ¬Έμ„œμ—μ„œ 해석 κ²°κ³Όλ₯Ό 가져와 Json 포맷으둜 μ €μž₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

Post POST Method μ‹€ν–‰ 예제1 (Table)

Β 

μ €μž₯된 κ²°κ³Όκ°’ (Json ν˜•μ‹)
import requests CIVIL_API_URL = "http://127.0.0.1:10024" ## POST /POST/TABLE requests.post(CIVIL_API_URL + "/post/table",json={ "Argument": { "EXPORT_PATH": "C:\\Users\\ResultTable.json", "TABLE_TYPE": "beam force", "UNIT": { "FORCE": "KN", "DIST": "M", "HEAT": "CAL", "TEMP": "C" }, "NODE_ELEMS": { "TO": "1003 to 1013" }, "LOAD_CASE_NAMES": [ "ULS_SET B(CB:max)", "ULS_SET B(CB:min)", "ULS_EQ(CB:max)", "ULS_EQ(CB:min)" ], "PARTS": [ "Part I", "Part J" ] } })

Β 

예제2 : μ—΄λ €μ§„ λ¬Έμ„œμ—μ„œ 해석 κ²°κ³Όλ₯Ό 뢈러였고, 1번째 κ²°κ³Όλ₯Ό 좜λ ₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

Post POST Method μ‹€ν–‰ 예제2 (Table)
import requests import json CIVIL_API_URL = "http://127.0.0.1:10024" ## POST /POST/TABLE Anal_Result=requests.post(CIVIL_API_URL + "/post/table",json={ "Argument": { "TABLE_TYPE": "beam force", "UNIT": { "FORCE": "KN", "DIST": "M", "HEAT": "CAL", "TEMP": "C" }, "NODE_ELEMS": { "TO": "1003 to 1013" }, "LOAD_CASE_NAMES": [ "ULS_SET B(CB:max)", "ULS_SET B(CB:min)", "ULS_EQ(CB:max)", "ULS_EQ(CB:min)" ], "PARTS": [ "Part I", "Part J" ] } }).text Anal_Result=json.loads(Anal_Result) Anal_IntForc=Anal_Result['empty']['DATA'] print(Anal_IntForc[0])

Β 

3.4 VIEW λͺ…λ Ήμ–΄

View λͺ…λ Ήμ–΄λŠ” 이미지에 κ΄€λ ¨ν•œ λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€.

Β 

  • Diagram μš”μ²­ : β€œ/view/capture”

Diagram을 μš”μ²­ν•˜κ³ , μ›ν•˜λŠ” κ²½λ‘œμ— μ €μž₯ν•˜λŠ” μ˜ˆμ œμž…λ‹ˆλ‹€.

Post View Method 예제 (Beam diagram capture)
import requests import json CIVIL_API_URL = "http://127.0.0.1:10024" ## POST /VIEW/CAPTURE requests.post(CIVIL_API_URL + "/view/capture",json = { "Argument":{ "UFIG_LIST": [ { "IS_PRE_MODE": False, "VIEW_HORIZONTAL": 45, "VIEW_VERTICAL": 30, "POST_DISP_OPT": { "PRINT_VALUE": False, "VALUE_DECIMAL_PT": 3, "PRINT_LEGEND": True, "LEGEND_DECIMAL_PT": 3 }, "OUTPUT_PATH": "C:\\ULS_SET B(Shear-Z).jpg", "LOADCASE_MINMAX": "ALL", "LOADCASE_TYPE": "CB", "LOADCASE_NAME": "ULS_SET B", "CURRENTMODE": 6, "RESULT_COMP": 2, } ] } })

Β