'멜 스크립트'에 해당되는 글 2건

  1. 2009.10.07 About MEL - User Interface 구성 Tip
  2. 2009.09.16 About MEL - MEL 스크립트 파일 만들고, 실행하기 3
posted by cimple 2009. 10. 7. 11:29


1. 개발할 때 window memory name 중복문제

MEL script 로 UI 를 개발할 때, window 의 memory name 중복 문제가 발생한다.
즉, 이미 내가 실행하고 있는 윈도우를 다시 실행할 때나,
아니면 이미 내가 종료한 윈도우라고 하더라도 메모리에 이름이 삭제되지 않아서 같은 memory name 을 가진 윈도우를 생성할 수 없는 문제 등이 발생하는 것이다.

이를 위해서 다음과 같은 코드를 추가해 주자.

global string $f_painter_memoryName = "uiFeaturePainter";
global string $f_painter_titleName = "Feature Painter 0.1";

global proc ui_f_painter()
{
  global string $f_painter_memoryName;
  global string $f_painter_titleName; 


  int $developing = false;
  if($developing && `window -exists $f_painter_memoryName`)
 deleteUI $f_painter_memoryName;
  if(!`window -exists $f_painter_memoryName`)
 window -title $f_painter_titleName -width 400 -height 500 -sizeable true $f_painter_memoryName;

  ...

}


이렇게 하면 윈도우의 memory name 중복 문제를 해결할 수 있다.




2. 특정 field 를 edit 하는 방법.


예를 들어, select 버튼을 누르면 위의 selected Object text field 옆에 현재 선택한 object 의 이름이 뜨도록 하고 싶다고 가정하자.

그렇다면 UI 함수 안에서 text field 는 이렇게 만들어져 있을 것이다.


textFieldGrp -label "selected Object : " -text " " -editable false;


여기에서 맨 끝에 객체의 이름을 추가해 줄 수 있다.


textFieldGrp -label "selected Object : " -text " " -editable false selectField;


그리고, 다른 함수에서 이 객체의 이름을 가지고 text field 를 수정해 줄 수 있다. 중요한 것은 -edit 라는 파라미터이다.

global proc string selectObject()

  string $selCapture[0] = `ls -sl`; 
  string $selectObj = $selCapture[0];
 
textFieldGrp -edit -label "selected Object : " -text $selectObj -editable false selectField; 
  return $selectObj;
}


이렇게 하면 button 을 누를 때 -cmd "selectObject" 이렇게 selectObject 함수를 호출하기만 하면 text field 의 값을 바꾸어 줄 수 있다.


3. 화면의 Layout 을 나누는 방법

MEL 에서 화면의 Layout 을 나누는 방법은 여러 가지이다.



(1) frameLayout

그림과 같이 화면을 나누어주고 싶을 때 사용한다. 프레임 전체를 접었다 펼 수 있는 -collapsable, 외곽 스타일을 정해줄 수 있는 -borderStyle 등을 정해줄 수 있다.




(2) columnLayout

보통 UI 의 component 들은 각 요소가 세로로 배열되는 경우가 많다.
그럼 단지 columnLayout; 으로 간단하게 component 들을 세로로 순차적으로 배열할 수 있다.


frameLayout ...;
columnLayout;

...

serParent ..;
setParent ..;



이렇게, frameLayout 과 함께 자신의 부모를 window 로 지정해준다. 이렇게 하나의 단위를 이루면서 생성되는 경우가 많다.



(3) gridLayout

버튼을 보기좋게 배치할 때 gridLayout 을 사용하였다. 사실 아래와 같이 분할되어 있다.


이것은 다음과 같이 이루어져 있다.


gridLayout -cellWidthHeight 133 40 -numberOfRowsColumns 1 3;
text -label " ";       
button -label "select" -align "center" -width 133 -height 30 -actOnPress true -command "selectObject";   
text -label " ";
setParent ..;


이런 식으로 cell 을 분할한 다음, 빈 공간에는 공백 텍스트를 주고, 버튼을 배열하는 방식으로 버튼 위치를 조절할 수 있다.


(4) rowColumnLayout

행과 열을 나누어서, 그 width-height 를 분할해서 component 들을 배치할 수 있다.
아래와 같이 index 가 매겨지고 그 크기값을 주어서 보기 좋게 분할할 수 있다.




rowColumnLayout -numberOfColumns 4 -columnWidth 1 60 -columnWidth 2 160 -columnWidth 3 100 -columnWidth 4 40;
   text -label " ";  
   attrEnumOptionMenu -l "Map : " -ei 0 "angle Map" -ei 1 "density Map" -ei 2 "scale Map"; 
   button -label "edit" -width 10 -height 30 -align "center";
 setParent ..;


이렇게 하면 좀더 자유롭게 component 들을 배치할 수 있다.


5. 기타등등

radio 버튼 등을 배치할 때 기본값으로 하면 버튼간의 간격이 너무 넓다. component 들의 parameter 를 이용해서 이 간격들을 조절해 줄 수 있다.

radio 버튼같은 경우에는 각 버튼의 index 를 가지고 위치를 조절해줄 수 있다.




radioButtonGrp -numberOfRadioButtons 3 -columnWidth 1 105 -columnWidth 2 90 -columnWidth 3 70 -label "Operation : " -labelArray3 "replace" "add" "smooth";


MEL 의 모든 parameter 를 외우면서 활용하기란 불가능하다. 자주 사용하는 command 의 parameter 라면 숙지해야겠지만, MAYA Document 를 적극 활용하면서 친숙해지는 방법이 가장 효율적이라고 생각된다.

ThEnd.
posted by cimple 2009. 9. 16. 12:38


간단한 Mel 스크립트를 파일로 만들고, 이를 실행하기


매우 간단한 MEL 스크립트 파일을 만들고 실행하는 방법을 알아 보자.

script editor 의 command input panel 에 다음과 같이 입력하도록 하자.




이것을 그대로 Ctrl + Enter 로 실행시켜 보면 다음과 같은 결과를 확인할 수 있다.




그렇다면, 이 mel script 를 파일로 저장해보자. 

mel script 를 파일로 저장하는 방법은,
1. script 를 마우스로 드래그한 다음
2. script editor 메뉴의 file > Save script... 로 저장한다.

이름은 자신이 원하는 이름으로 아무렇게나 저장해 준다.

ex) myscript.mel




다음, 위에서 저장했던 스크립트 파일을 다시 마야에서 실행시키는 방법이다.
물론 스크립트 파일의 소스 코드를 복사해서 script editor 에 붙여넣기 한 다음 실행시키는 방법도 있겠지만,
스크립트 파일을 적당한 경로에 위치시켰다면 이 파일 전체를 하나의 명령어로 실행시킬 수도 있다.


script editor 의 command input panel 이나
마야 하단의 command line 에

source myscript;

또는

source myscript.mel;

을 입력하면, 미리 입력해둔 스크립트가 실행되게 된다.





이를 위해서 스크립트 파일이 위치해야 할 경로는

... \ (내 문서 폴더) \ maya \ (마야 버전) \ scripts

또는

... \ (내 문서 폴더) \ maya \ scripts

에 위치시켜야 한다.

예를 들면,

C:\Documents and Settings\admin\My Documents\maya\2009\scripts

또는

C:\Documents and Settings\admin\My Documents\maya\scripts

에 위치시켜야 한다는 것이다.




ThEnd.



p.s. 추가적인 사항

만약에 마야에서 멜 스크립트를 만들고, 이를 mel 에 저장한 다음
즉시로

source myscript;

이런 식으로 실행하려고 하면 아마 실행이 되지 않을 것이다.

이유는 모르겠으나 마야를 한번 종료했다가 다시 켜면 정상적으로 경로를 찾고 source 로 실행시킬 수 있다.