Past/Matlab GUI

Matlab GUI로 스타크래프트 빌드메이커 제작 #6/6 - 최종 캡처조건 설정

Ratatui 2017. 12. 17. 07:37

<프로그램 설명 포스팅 링크>


이 프로그램의 최종 부분 코드이다.


원하는 빌드오더를 다 적었으면
캡처를 해서 그 이미지를 사용하는데,
윈도우 기본 기능으로 캡쳐하려면
번거롭기 때문에 프로그램 자체
기능으로 캡처하도록 만들었다.


글 정렬 옵션은 원래 없던 기능인데
커뮤니티에서 추가해달라는 요청이
있어서 나중에 만든 옵션이다.


글 정렬 옵션에는 'Radiobutton'
객체를 사용했는데, 먼저 간단히
객체에 대해 알아보자.




위의 두 객체는 각각 'Check Box'와
'Radio Button'인데, 전자는 보통의 경우
중복선택이 가능할 때 사용하고,
후자는 여러 항목 중 중복 없이
단일선택만 가능할 때 사용한다.


하지만 매트랩에서는 객체 자체에
중복과 단일선택을 판별하는 기능이
없기 때문에 코드로 만들어야 한다.




'radiobutton' 객체의 태그인
'radio1'의 콜백 함수이다.


함수 내 8527줄에서 먼저 실행하는
명령은 'radio2'버튼의 'value'속성값을
0으로 만드는 것인데, 이렇게 되면
'radio1'을 클릭해서 표시되는 순간
'radio2'에 표시가 없어진다.


하지만 이 코드가 없다면 'radio1'을
클릭해도 'radio2'에 표시된 것은
아무 변화없이 그대로일 것이다.


보통 여러개의 'radiobutton'객체가
하나로 묶여진 경우 위처럼 따로
코드를 일일히 쓰지 않고 switch문을
사용해서 표시를 제어할 수 있다.


글 정렬을 위한 코드를 살펴보면
for문을 이용하여 모든 'edittext'객체의
'HorizontalAlignment'속성을 'center'로
정해준다. 초기 조건에 이미 그렇게
설정되어 있지만, 한번 'left'를 선택한 후
다시 'center' 선택 시 코드가 실행된다.




위 캡처는 글 정렬을
가운데로 한 경우이다.




'radio2'의 콜백 함수 역시
실행 후 먼저 'radio1'의 표시를
제거하는 코드가 실행된다.


그 다음 위의 8528~8534줄과
같이 for문을 이용하여 모든
'edittext'객체의 'HorizontalAlignment'
속성을 'left'로 정해준다.




그러면 위 캡처와 같이
글 정렬이 왼쪽으로 변경된다.


이 설정은 프로그램의 내용을
변경하지는 않지만 캡처버튼을 클릭 시
프로그램 사용자가 보기에 좋은
옵션을 직접 선택하게 만들 수 있다.


이제 마지막으로 캡처버튼을
클릭했을 때의 콜백 함수를 알아보자.




294~295줄에서는 새로운 변수를
정의하는데, 캡처를 하기 전에
빌드 내용이 제대로 작성 되었는지
판단할 때 사용하는 변수이다.


모든 'edittext'박스에 작성하는
글은 사용자의 자유이므로 판단
조건에는 들어가지 않는다.
하지만 종족의 경우 선택이 되지
않은 상태면 캡처된 이미지 사용 시
혼란이 될 수 있기에 종족이 잘
선택되었는지 판단해야한다.


카테고리 #3의 227줄을 보면
자신의 종족은 반드시 선택해야 한다.
하지만 언제든지 'popupmenu'를 바꿀 수
있고 상대의 종족 선택은 안 된 상태일
수도 있기 때문에 Atest와 Btest변수를
곱해서 0인 경우 경고문을 띄운다.


296줄에서 Atest*Btest의 값이 0인
경우는 프로그램 상단에 두 개의
'popupmenu'중에 한 개라도
(Select)가 보이는 경우이다.




상단을 보면 상대 종족이 선택되지
않았기 때문에 경고문이 나타난다.




내 종족과 상대 종족을 모두 선택한
경우에는 else이하로 넘어가서
캡처할 때 보여야 하는 모양대로
객체 속성을 먼저 설정하게 된다.
보이는 객체들을 'inactive' 하는 이유는
'enable'속성이 'on'인 경우 캡처시
커서가 보이거나 선택된 모양으로
색이 바뀔 수 있기 때문이다.


308줄의 'fintext'로 태그된 객체는
캡처시 보여야 하는 객체이기 때문에
'visible'속성을 'on'했고, 나머지 버튼들은
'visible'속성을 'off'해서 안보이도록 한다.




프로그램 전체 창을 png파일로
저장하는 코드이다.


316줄에서는 저장할 파일의
이름을 미리 정해놓는다.
'iniedit'태그된 객체는 프로그램
오른쪽 상단의 'edittext'박스인데,
빌드이름을 적어넣는 곳이다.
이 객체의 'String'속성을 불러온다.


317줄의 print(gcf, title, '-dpng', '-r0');
에서 gcf는 현재 프로그램의 Figure창에
대한 handle권한을 얻는다.
title은 빌드이름이 저장된 변수이고,
'-dpng'는 png확장자로 저장하도록 만든다.
'-r0'에서 r0인 경우 기본 해상도로 저장한다.




프로그램 화면이 캡쳐된 후
뒷부분 코드는 299~314줄에서
설정된 객체 속성을 전부
원래대로 돌려놓도록 명령한다.




파일을 열어보면 위와 같이
캡처가 되어 있다.
아래쪽을 보면 버튼이 보이지 않고
깔끔하게 캡처된 것도 확인된다.


이렇게 프로그램의 구동에 필요한
모든 코드를 알아봤다.
앞으로 시간이 된다면 Matlab GUI를
이용해서 여러가지 내용을 표현하는
방법에 대해 포스팅할 것이다.


프로그램을 다운로드 할 수 있는 링크가 폐쇄되어
현재는 프로그램을 다운로드 받을 수 없다