이 문서는 Python에서 MIDAS Civil API를 작동시키기 위한 메뉴얼입니다.
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를 눌러줍니다.
Code Block | ||
---|---|---|
| ||
py -3 -m pip install requests |
2. Python을 이용하여 MIDAS/Civil API 작동해보기
간단한 예제를 통해 동작 방식을 살펴봅니다.
2.1 MIDAS/Civil API 실행하기
API와 통신하기 위한 Civil은 다음과 같이 실행 가능합니다.
Python Code
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
## 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”
Code Block | ||
---|---|---|
| ||
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”
Code Block | ||
---|---|---|
| ||
import requests
requests.post("http://127.0.0.1:10024/doc/new", json={}) |
문서 닫기 : “/doc/close”
Code Block | ||
---|---|---|
| ||
import requests
requests.post("http://127.0.0.1:10024/doc/close", json={}) |
해석 실행 : “/doc/anal”
Code Block | ||
---|---|---|
| ||
import requests
requests.post("http://127.0.0.1:10024/doc/anal", json={}) |
문서 저장 : “/doc/save”
Code Block | ||
---|---|---|
| ||
import requests
requests.post("http://127.0.0.1:10024/doc/save", json={}) |
새 이름으로 저장 : “/doc/saveas”
Code Block | ||
---|---|---|
| ||
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”
Code Block | ||
---|---|---|
| ||
import requests
#String = MCB file path (ex : "C:\\Json\\Example.json")
requests.post("http://127.0.0.1:10024/doc/import", json={"Argument":String}) |
...
기본적인 사용법을 익히는 차원에서 Guide의 내용은 모두 따라하기 해 보시길 권장합니다.
이 문서는 Python에서 MIDAS Gen API를 작동시키기 위한 메뉴얼입니다.
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/Gen API를 제어할 수 있습니다.
Request 모듈은 다음과 같이 설치가 가능합니다.
프로그램 하단의 터미널 창이 보이지 않는다면, Menu-Terminal-New Terminal 을 이용하여, Terminal 창을 실행합니다. 아래 텍스트를 터미널 창에 붙여 넣은 후, Enter를 눌러줍니다.
Code Block | ||
---|---|---|
| ||
py -3 -m pip install requests |
2. Python을 이용하여 MIDAS/Gen API 작동해보기
간단한 예제를 통해 동작 방식을 살펴봅니다.
예제를 위한 Gen 해석파일은 아래 test.mgb를 참고하세요.
View file | ||
---|---|---|
|
2.1 MIDAS/Gen API 실행하기
API와 통신하기 위한 Gen은 다음과 같이 실행 가능합니다.
...
Python Code
Code Block | ||
---|---|---|
| ||
import requestssubprocess #Stringimport =time MCB file path (ex : p = subprocess.Popen([r"C:\\midas\Json\API\\ExampleMidasGen.jsonexe"), 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 정보를 출력합니다.
...
/API"])
## wait until midas api process ready
time.sleep(10) |
MIDAS/Gen 실행 파일의 경로는 각자 사용자에 맞게 수정하여 사용합니다.
파일 경로에 \\사용함에 주의!!
2.2 MIDAS/Gen API 문서 열기
MIDAS/Gen을 실행 시킨 후 이미 작성된 문서를 여는 동작을 실행해보겠습니다.
...
Python Code
Code Block | ||
---|---|---|
| ||
import requests
|
...
Gen_API_URL = "http://127.0.0.1:10024" ## |
...
DOC.OPEN requests. |
...
post( |
...
Gen_API_URL + "/doc/open", json={"Argument":"C:\\midas\\api\\model\\test.mgb" |
...
예제2: 다음 예제 코드는 열어진 문서로부터 특정한 Node 번호의 정보만 불러옵니다.
...
}) |
MIDAS/Gen 파일의 경로는 각자 사용자에 맞게 수정하여 사용합니다.
URL 주소는 API 를 통한 MIDAS/Gen 실행시 동작하는 APIServer.exe에서 확인할 수 있습니다.
...
2.3 MIDAS/Gen API 해석 실행
불러온 MIDAS/Gen 파일의 해석을 실행해 보겠습니다.
...
Python Code
Code Block | ||
---|---|---|
| ||
import requests CIVILGen_API_URL = "http://127.0.0.1:10024" ## GET /DB/NODE get_data=DOC.ANAL requests.getpost(CIVILGen_API_URL + "/dbdoc/node/1003").text print(get_data) |
Post DB Method : 열려진 문서의 데이터를 추가합니다. 이미 Key가 있을 경우 실패합니다.
다음 예제는 열어진 문서에 특정 Node를 추가하고, Node 정보를 불러와 출력하는 예제입니다.
...
anal", json={}) |
3. 작동 가능한 명령어
3.1 DOC 명령어
DOC 명령어는 document 관련 명령어로 주로 문서를 생성/열기/닫기 등의 동작을 제어합니다.
문서 열기 : “/doc/open”
Code Block | ||
---|---|---|
| ||
import requests #String = importMGB jsonfile CIVIL_API_URL =path (ex : "http://127.0.0.1:10024" ## POST /DB/NODEC:\\Python\\Example.mgb") requests.post(CIVIL_API_URL + "/db/node","http://127.0.0.1:10024/doc/open", json={"AssignArgument":{"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에 대한 요청 시 실패합니다.
다음 예제는 특정 노드의 좌표를 변경하는 예제입니다.
...
String}) |
새 문서 열기 : “/doc/new”
Code Block | ||
---|---|---|
| ||
import requests
requests.post("http://127.0.0.1:10024/doc/new", json={}) |
문서 닫기 : “/doc/close”
Code Block | ||
---|---|---|
| ||
import requests
requests.post("http://127.0.0.1:10024/doc/close", json={}) |
해석 실행 : “/doc/anal”
Code Block | ||
---|---|---|
| ||
import requests
requests.post("http://127.0.0.1:10024/doc/anal", json={}) |
문서 저장 : “/doc/save”
Code Block | ||
---|---|---|
| ||
import requests CIVIL_API_URL = requests.post("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의 정보를 출력합니다.
...
/doc/save", json={}) |
새 이름으로 저장 : “/doc/saveas”
Code Block | ||
---|---|---|
| ||
import requests
#String = MGB file path (ex : "C:\\Python\\Example.mgb")
requests.post("http://127.0.0.1:10024/doc/saveas", json={"Argument":String}) |
Json 데이터 Import : “/doc/import”
Code Block | ||
---|---|---|
| ||
import requests #String = Json file path (ex CIVIL_API_URL = : "C:\\Python\\Example.json") requests.post("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를 삭제합니다.
...
/doc/import", json={"Argument":String}) |
Json 데이터 Export : “/doc/export”
Code Block | ||
---|---|---|
| ||
import requests #String = Json file path CIVIL_API_URL = (ex : "C:\\Python\\Example.json") requests.post("http://127.0.0.1:10024" ## DELETE /DB/NODE requests.delete(CIVIL_API_URL + "/db/node"/doc/export", json={"Argument":String}) |
3.
...
2 DB 명령어
Post는 명령어는 해석 실행 후 후처리 관련한 명령어입니다.
결과 테이블 요청 : “/post/table”
예제1 : 다음 예제는 열려진 문서에서 해석 결과를 가져와 Json 포맷으로 저장하는 예제입니다.
...
DB 명령어는 데이터 이름에 대한 요청입니다. 각각의 데이터 이름에 대하여 GET/POST/PUT/DELETE 메소드가 구현되어 있습니다.
GET DB Method : 열려진 문서의 데이터를 조회합니다.
예제1: 다음 예제 코드는 열어진 문서로부터 모든 Node 정보를 불러와 , 특정한 Node 정보를 출력합니다.
...
Code Block | ||
---|---|---|
| ||
import requests import json |
...
Gen_API_URL = "http://127.0.0.1:10024" ## |
...
GET / |
...
DB/NODE (All Node) get_data=requests.get(Gen_API_URL + "/ |
...
db/ |
...
예제2 : 열려진 문서에서 해석 결과를 불러오고, 1번째 결과를 출력하는 예제입니다.
...
node").text
get_data=json.loads(get_data)
# Input Node Number which you want to know
print(get_data['NODE']['2']) |
예제2: 다음 예제 코드는 열어진 문서로부터 특정한 Node 번호의 정보만 불러옵니다.
...
Code Block | ||
---|---|---|
| ||
import requests
Gen_API_URL = "http://127.0.0.1:10024"
## GET /DB/NODE
get_data=requests.get(Gen_API_URL + "/db/node/3").text
print(get_data) |
POST DB Method : 열려진 문서의 데이터를 추가합니다. 이미 Key가 있을 경우 실패합니다.
다음 예제는 열어진 문서에 특정 Node를 추가하고, Node 정보를 불러와 출력하는 예제입니다. (999번 노드 추가)
...
Code Block | ||
---|---|---|
| ||
import requests
import json
Gen_API_URL = "http://127.0.0.1:10024"
## POST /DB/NODE
requests.post(Gen_API_URL + "/db/node",json={"Assign":{"999":{"X":0,"Y":10.0,"Z":0}}})
## GET /DB/NODE
get_data=requests.get(Gen_API_URL + "/db/node").text
get_data=json.loads(get_data)
print(get_data['NODE']['999']) |
PUT DB Method : 열려진 문서의 데이터를 변경합니다. 존재하지 않는 key에 대한 요청 시 실패합니다.
다음 예제는 특정 노드의 좌표를 변경하는 예제입니다. (999번 노드 좌표 변경)
...
Code Block | ||
---|---|---|
| ||
import requests
Gen_API_URL = "http://127.0.0.1:10024"
## GET /DB/NODE
get_data=requests.get(Gen_API_URL + "/db/node/999").text
print(get_data)
## PUT /DB/NODE
requests.put(Gen_API_URL + "/db/node",json={"Assign":{"999":{"X":0,"Y":20.0,"Z":0}}})
## GET /DB/NODE
get_data=requests.get(Gen_API_URL + "/db/node/999").text
print(get_data) |
DELETE DB Method : 열려진 문서의 데이터를 삭제합니다. 존재하지 않는 Key에 대한 요청 시 실패합니다.
예제1 : 특정 Node를 삭제하고, 삭제된 Node의 정보를 출력합니다. (999번 노드 삭제)
...
Code Block | ||
---|---|---|
| ||
import requests
Gen_API_URL = "http://127.0.0.1:10024"
## DELETE /DB/NODE
Delete_Data=requests.delete(Gen_API_URL + "/db/node/999").text
print(Delete_Data) |
3.3 POST 명령어
POST는 명령어는 해석 실행 후 후처리 관련한 명령어입니다.
반드시 해석이 수행된 이후에 실행 가능합니다.
결과 테이블 요청 : “/post/table”
예제1 : 다음 예제는 열려진 문서에서 해석 결과를 가져와 Json 포맷으로 저장하는 예제입니다.
...
Code Block | ||
---|---|---|
| ||
import requests import json CIVILGen_API_URL = "http://127.0.0.1:10024" ## DOC.ANAL requests.post(Gen_API_URL + "/doc/anal", json={}) ## POST /POST/TABLE Anal_Result=requests.post(CIVILGen_API_URL + "/post/table",json={ "Argument": { "EXPORT_PATH": "C:\\midas\\api\\model\\Beamforce.json", "TABLE_TYPE": "beam force", "UNIT": { "FORCE": "KN", "DIST": "M", "HEAT": "CAL", "TEMP": "C" }, "NODE_ELEMS": { "TO": "10031 to 101310" }, "LOAD_CASE_NAMES": [ "ULS_SET B(CB:maxDL(ST)", "ULS_SET B(CB:minLL(ST)", "ULS_EQ(CB:maxEx(ST)", "ULS_EQ(CB:minEy(ST)" ], "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 VIEW 명령어는 이미지에 관련한 명령어입니다.
Diagram 요청 : “/view/capture”
...
Code Block | ||
---|---|---|
| ||
import requests import json CIVILGen_API_URL = "http://127.0.0.1:10024" ## POST /VIEW/CAPTURE requests.post(CIVILGen_API_URL + "/view/capture",json = { "Argument":{ "UFIG_LIST": [ { "IS_PRE_MODE": Falsefalse, "VIEW_HORIZONTAL": 45, "VIEW_VERTICAL": 30, "POST_DISP_OPT": { "PRINT_VALUE": Falsetrue, "VALUE_DECIMAL_PT": 31, "PRINT_LEGEND": Truetrue, "LEGEND_DECIMAL_PT": 31 }, "OUTPUT_PATH": "C:\\midas\\api\\model\\ULS_SET B(Shear-Z).jpg", "LOADCASE_MINMAX": "ALL", "LOADCASE_TYPE": "CBST", "LOADCASE_NAME": "ULS_SET BDL", "CURRENTMODE": 6, "RESULT_COMP": 2, } ] } }) |
...