Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

이 문서는 Python에서 MIDAS Civil API를 작동시키기 위한 메뉴얼입니다.

1. Python 개발환경 설정

1.1 설치파일

설치파일은 파이썬 공식 웹사이트에서 내려받습니다.

Welcome to Python.org

...

* 윈도우 이외에 OS 환경을 위한 여러 설치파일을 확인할 수 있습니다.

1.2 파이썬 설치

Python을 설치합니다.

...

아래 편집기는 더 편리한 Python 개발환경을 제공합니다.

👷‍♂️ Recommended Code Editors for Python

(본 설명서는 Visual Studio Code를 사용하여 작성되었습니다.)

1.3 추가 모듈 설치

Python에 Request 모듈을 설치 해야, MIDAS/Civil API를 제어할 수 있습니다.

Request 모듈은 다음과 같이 설치가 가능합니다.

Image Removed

프로그램 하단의 터미널 창이 보이지 않는다면, Menu-Terminal-New Terminal 을 이용하여, Terminal 창을 실행합니다. 아래 텍스트를 터미널 창에 붙여 넣은 후, Enter를 눌러줍니다.

Code Block
languagepy
py -3 -m pip install requests

Image Removed

2. Python을 이용하여 MIDAS/Civil API 작동해보기

간단한 예제를 통해 동작 방식을 살펴봅니다.

2.1 MIDAS/Civil API 실행하기

API와 통신하기 위한 Civil은 다음과 같이 실행 가능합니다.

Image Removed

  • Python Code

Code Block
languagepy
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을 실행 시킨 후 이미 작성된 문서를 여는 동작을 실행해보겠습니다.

Image Removed

  • Python Code

Code Block
languagepy
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 파일의 해석을 실행하고 프로그램을 종료해보겠습니다.

Image Removed

  • Python Code

Code Block
languagepy
## 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
languagepy
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
languagepy
import requests

requests.post("http://127.0.0.1:10024/doc/new", json={})
  • 문서 닫기 : “/doc/close”

Code Block
languagepy
import requests

requests.post("http://127.0.0.1:10024/doc/close", json={})
  • 해석 실행 : “/doc/anal”

Code Block
languagepy
import requests

requests.post("http://127.0.0.1:10024/doc/anal", json={})
  • 문서 저장 : “/doc/save”

Code Block
languagepy
import requests

requests.post("http://127.0.0.1:10024/doc/save", json={})
  • 새 이름으로 저장 : “/doc/saveas”

Code Block
languagepy
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
languagepy
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 설치파일

설치파일은 파이썬 공식 웹사이트에서 내려받습니다.

Welcome to Python.org

...

* 윈도우 이외에 OS 환경을 위한 여러 설치파일을 확인할 수 있습니다.

1.2 파이썬 설치

Python을 설치합니다.

...

아래 편집기는 더 편리한 Python 개발환경을 제공합니다.

👷‍♂️ Recommended Code Editors for Python

(본 설명서는 Visual Studio Code를 사용하여 작성되었습니다.)

1.3 추가 모듈 설치

Python에 Request 모듈을 설치 해야, MIDAS/Gen API를 제어할 수 있습니다.

Request 모듈은 다음과 같이 설치가 가능합니다.

Image Added

프로그램 하단의 터미널 창이 보이지 않는다면, Menu-Terminal-New Terminal 을 이용하여, Terminal 창을 실행합니다. 아래 텍스트를 터미널 창에 붙여 넣은 후, Enter를 눌러줍니다.

Code Block
languagepy
py -3 -m pip install requests

Image Added

2. Python을 이용하여 MIDAS/Gen API 작동해보기

간단한 예제를 통해 동작 방식을 살펴봅니다.

예제를 위한 Gen 해석파일은 아래 test.mgb를 참고하세요.

View file
nametest.mgb

2.1 MIDAS/Gen API 실행하기

API와 통신하기 위한 Gen은 다음과 같이 실행 가능합니다.

...

  • Python Code

Code Block
languagepy
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
languagepy
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
languagepy
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
languagepy
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
languagepy
import requests

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

  • 문서 닫기 : “/doc/close”

Code Block
languagepy
import requests

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

  • 해석 실행 : “/doc/anal”

Code Block
languagepy
import requests

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

  • 문서 저장 : “/doc/save”

Code Block
languagepy
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
languagepy
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
languagepy
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
languagepy
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 포맷으로 저장하는 예제입니다.

...

Image RemovedDB 명령어는 데이터 이름에 대한 요청입니다. 각각의 데이터 이름에 대하여 GET/POST/PUT/DELETE 메소드가 구현되어 있습니다.

  • GET DB Method : 열려진 문서의 데이터를 조회합니다.

예제1: 다음 예제 코드는 열어진 문서로부터 모든 Node 정보를 불러와 , 특정한 Node 정보를 출력합니다.

...

Code Block
languagepy
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
languagepy
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
languagepy
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
languagepy
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
languagepy
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
languagepy
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
languagepy
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,
            }
        ]
    }
})

...