(KR) MIDAS Civil with Python
1. Python κ°λ°νκ²½ μ€μ
1.1 μ€μΉνμΌ
μ€μΉνμΌμ νμ΄μ¬ 곡μ μΉμ¬μ΄νΈμμ λ΄λ €λ°μ΅λλ€.
* μλμ° μ΄μΈμ OS νκ²½μ μν μ¬λ¬ μ€μΉνμΌμ νμΈν μ μμ΅λλ€.
Β
1.2 νμ΄μ¬ μ€μΉ
Pythonμ μ€μΉν©λλ€.
μλ νΈμ§κΈ°λ λ νΈλ¦¬ν Python κ°λ°νκ²½μ μ 곡ν©λλ€.
Recommended Code Editors for Python
Visual Studio Code - Visual Studio Code - Code Editing. Redefined
PyCharm - PyCharm: the Python IDE for Professional Developers by JetBrains
(λ³Έ μ€λͺ μλ Visual Studio Codeλ₯Ό μ¬μ©νμ¬ μμ±λμμ΅λλ€.)
Β
1.3 μΆκ° λͺ¨λ μ€μΉ
Pythonμ Request λͺ¨λμ μ€μΉ ν΄μΌ, MIDAS/Civil APIλ₯Ό μ μ΄ν μ μμ΅λλ€.
Request λͺ¨λμ λ€μκ³Ό κ°μ΄ μ€μΉκ° κ°λ₯ν©λλ€.
Β
νλ‘κ·Έλ¨ νλ¨μ ν°λ―Έλ μ°½μ΄ λ³΄μ΄μ§ μλλ€λ©΄, Menu-Terminal-New Terminal μ μ΄μ©νμ¬, Terminal μ°½μ μ€νν©λλ€. μλ ν μ€νΈλ₯Ό ν°λ―Έλ μ°½μ λΆμ¬ λ£μ ν, Enterλ₯Ό λλ¬μ€λλ€.
Β
py -3 -m pip install requests
Β
Β
2. Pythonμ μ΄μ©νμ¬ MIDAS/Civil API μλν΄λ³΄κΈ°
κ°λ¨ν μμ λ₯Ό ν΅ν΄ λμ λ°©μμ μ΄ν΄λ΄ λλ€.
2.1 MIDAS/Civil API μ€ννκΈ°
APIμ ν΅μ νκΈ° μν Civilμ λ€μκ³Ό κ°μ΄ μ€ν κ°λ₯ν©λλ€.
Β
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μμ νμΈν μ μμ΅λλ€.
Β
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 μ 보λ₯Ό μΆλ ₯ν©λλ€.
Β
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 λ²νΈμ μ λ³΄λ§ λΆλ¬μ΅λλ€.
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 μ 보λ₯Ό λΆλ¬μ μΆλ ₯νλ μμ μ λλ€.
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μ λν μμ² μ μ€ν¨ν©λλ€.
Β
λ€μ μμ λ νΉμ λ Έλμ μ’νλ₯Ό λ³κ²½νλ μμ μ λλ€.
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μ μ 보λ₯Ό μΆλ ₯ν©λλ€.
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λ₯Ό μμ ν©λλ€.
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 ν¬λ§·μΌλ‘ μ μ₯νλ μμ μ λλ€.
Β
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λ²μ§Έ κ²°κ³Όλ₯Ό μΆλ ₯νλ μμ μ λλ€.
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μ μμ²νκ³ , μνλ κ²½λ‘μ μ μ₯νλ μμ μ λλ€.
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,
}
]
}
})
Β