지난 주에(3월 20, 21일) Application Development in IDL이라는 타이틀의 IDL 교육이 있었습니다. IDL에서 앱(App)을 개발하는 방법들에 대한 강의로 제가 진행을 했었는데요. 그 때 나왔던 질문들 중 하나에 대하여 저도 즉답을 드리질 못해서 본사 기술팀에 문의를 해봤었습니다. 답신을 받아서 그 내용을 전달하려 합니다.
질문의 내용은 WIDGET_WINDOW 함수를 사용해서 GUI상에 구현된 그래픽 창의 배경색을 어떻게 바꾸는가였습니다. 참고로 WIDGET_WINDOW는, IDL의 Widget Programming 기법으로 만들어진 GUI상에 NG 기반의 그래픽 창을 삽입할 때 사용되는 함수입니다. 이렇게 구현된 그래픽 창의 배경색은 기본적으로 흰 색인데요. 이 색상을 바꿀 수 있는 속성(Property)이 WIDGET_WINDOW에서는 발견되질 않습니다(8.3 버전 현재). 예를 들면 BACKGROUND_COLOR와 같은 속성이 이 함수에는 존재하지 않는다는 것이 IDL 도움말에서도 확인이 됩니다. 그러면 WIDGET_WINDOW로 구현된 그래픽 창의 배경색을 흰 색 말고 다른 색은 사용할 방법이 없느냐라는 의문이 생깁니다. 물론 NG 기반의 일반 그래픽 창을 구현하는 WINDOW 함수에는 엄연히 BACKGROUND_COLOR라는 속성이 존재합니다.
하지만 방법은 있었습니다. 이 방법의 근거는 WIDGET_WINDOW 함수의 뿌리가 사실 WINDOW 함수라는 사실입니다. 따라서 다음 예문에서와 같이 WIDGET_WINDOW로 구현된 그래픽 창에 대한 객체 참조자(Object Reference)를 위젯의 ID로부터 가져온 다음, 이 참조자에 대하여 BACKGROUND_COLOR라는 속성을 설정하면 됩니다. 즉, 이 참조자는 그 뿌리인 WINDOW 함수의 속성들을 물려받았다는(Inherited) 점을 이용하면 됩니다.
tlb = WIDGET_BASE(/COLUMN)
ww = WIDGET_WINDOW(tlb, XSIZE=400, YSIZE=300)
WIDGET_CONTROL, tlb, /REALIZE
WIDGET_CONTROL, ww, GET_VALUE=owin
owin.BACKGROUND_COLOR='yellow'
p = PLOT(/TEST)
그런데 저의 솔직한 의견은, 이 방법은 일종의 요령(Walkaround)은 될 수 있겠지만 근본적인 해결책은 아닌 것 같습니다. 사실, 위의 제 설명에서 Object Reference, Inheritance 등의 용어가 익숙한 IDL 사용자들의 비율이 그리 크지는 않을 것 같은데요. 그렇다면 일반적인 IDL 사용자들이 위의 방법을 직관적으로 떠올리기는 그리 쉽지 않다는 얘기입니다. 저조차도 사실 저 내용을 듣고서야 아~ 하는 생각이 들었거든요. 근본적으로는 WIDGET_WINDOW 함수에서도 BACKGROUND_COLOR와 같은 속성을 직접 사용할 수 있도록 해주는 것이 가장 바람직한 방향이 아닐까 싶습니다. 이 생각은 저도 본사 기술팀에 답장을 하면서 전달은 했습니다. 하지만 이 부분은 본사 차원의 문제이기 때문에, 저도 제안만 할 뿐이지 향후에 정말로 개선될지는 저도 지켜볼 수 밖에 없을 것 같네요. 하여간 최신 버전인 8.3 현재에서의 최선의 방법은 위와 같습니다. 향후의 버전에서는 아마 좀 더 편리한 모습으로 다가오길 기대해보겠습니다.
'IDL > New Graphics' 카테고리의 다른 글
LEGEND 함수의 효과적인 사용법 (0) | 2014.05.28 |
---|---|
Ellipsoid를 그려봅시다 (0) | 2014.04.17 |
원형 궤도 운동 시뮬레이션 동영상 (0) | 2014.01.22 |
입자들의 무작위 운동을 동영상으로 만들어본다면? (0) | 2014.01.21 |
PLOT3D를 사용해서 만들어본 동영상 (0) | 2014.01.20 |