IDL/New Graphics

NG 체계에서 Select 메서드의 활용

이상우_idl 2021. 3. 23. 15:26
728x90
반응형

오늘은 NG(New Graphics) 체계에서 Select 메서드를 이용하는 방법에 관하여 소개해보고자 합니다. 이 메서드는 다수의 그래픽 창들이 존재하는 상태에서 특정한 그래픽 창을 말 그대로 "선택"하는 역할을 하는데요. 여기서 "선택"의 의미는 특정 그래픽 창을 활성화(Activate)하여 현재 활성화된(Currently Active) 그래픽 창이 되도록 설정한다는 의미입니다. 말이 약간 복잡한데 예제를 통하여 살펴보겠습니다.

 

이 예제에서는 두 개의 그래픽 창을 띄우고, 첫번째 그래픽 창에서는 Sine 곡선을 표출하고 두번째 그래픽 창에서는 Cosine 곡선을 표출합니다. 이를 위하여 다음과 같이 x, y1, y2 데이터를 생성하고 그래픽 창 두 개에 각각의 플롯을 표출합니다.

 

x = FINDGEN(361)

y1 = SIN(x*!dtor)

y2 = COS(x*!dtor)

 

win1 = WINDOW(DIMENSIONS=[600, 400], $

  WINDOW_TITLE='Win 1', /NO_TOOLBAR)

p1 = PLOT(x, y1, XRANGE=[0, 360], XTICKINTERVAL=90, $

  TITLE='Win 1', /CURRENT)

win2 = WINDOW(DIMENSIONS=[600, 400], $

  WINDOW_TITLE='Win 2', /NO_TOOLBAR)

p2 = PLOT(x, y2, XRANGE=[0, 360], XTICKINTERVAL=90, $

  TITLE='Win 2', /CURRENT)

 

이렇게 두 개의 그래픽 창들이 표출된 모습은 다음과 같습니다.

 

 

이제 이 상태에서 다음과 같이 TEXT 함수를 사용하여 플롯 내에 캡션 문자를 삽입해봅시다.

 

tx = TEXT(270, 0.1, 'IDL User', FONT_SIZE=16, $

  COLOR='crimson', /DATA)

 

그러면 이 캡션 문자는 어느 그래픽 창에 나타나게 될까요? 실제 표출 결과는 다음 그림과 같습니다.

 

 

이와 같이 두번째 그래픽 창인 win2의 플롯 상에 'IDL User'라는 캡션 문자가 나타난 것을 확인할 수 있습니다. 두 개의 그래픽 창들(win1, win2) 중 win2가 선택된 이유는 TEXT 함수가 사용되기 직전 가장 최근에 뜬 그래픽 창이 win2이기 때문입니다. 즉 그 시점에서는 win2가 바로 "현재 활성화된" 그래픽 창이기 때문입니다.

 

그런데 만약 이와 같이 두 개의 그래픽 창들이 존재하는 상태에서 첫번째 그래픽 창인 win1에 캡션 문자가 나타나도록 하려면 어떻게 하면 될까요? 이를 위해서는 다음과 같이 TEXT 함수를 사용하기에 앞서서 win1에 대하여 SELECT 메서드를 사용하면 됩니다.

 

win1.Select

tx = TEXT(270, 0.1, 'IDL User', FONT_SIZE=16, $

  COLOR='crimson', /DATA)

 

즉 이렇게 하면 "현재 활성화된" 그래픽창이 바로 win1이 됩니다. 이 상태에서 TEXT 함수를 사용하여 캡션 문자를 삽입하게 되면 그 대상 그래픽 창이 바로 win1이 되는 것입니다. 따라서 그 결과는 다음 그림과 같습니다.

 

 

이와 같이 Select 메서드를 사용하면 다수의 그래픽 창들이 떠있는 상태에서 원하는 그래픽 창 즉 "현재 활성화된" 그래픽 창을 임의로 선택할 수 있게 됩니다. 이것이 바로 NG 체계에서 "현재 활성화된" 그래픽 창이 무엇이 될 것인지를 선택하는 방법입니다.

 

참고로 DG(Direct Graphics) 체계에서도 이와 유사한 역할을 하는 명령이 있는데 바로 WSET 명령입니다. 위의 예제와 유사한 과정을 DG 체계 기반으로 적어보면 다음과 같습니다.

 

DEVICE, DECOMPOSED=0

WINDOW, 1, XSIZE=600, YSIZE=400

PLOT, x, y1, COLOR=0, BACKGROUND=255, TITLE='Win 1', $

  XSTYLE=1, XRANGE=[0, 360], XTICKINTERVAL=90

WINDOW, 2, XSIZE=600, YSIZE=400

PLOT, x, y2, COLOR=0, BACKGROUND=255, TITLE='Win 2', $

  XSTYLE=1, XRANGE=[0, 360], XTICKINTERVAL=90

 

WSET, 1

XYOUTS, 270, 0.1, 'IDL User', CHARSIZE=2, COLOR=0, /DATA

 

이 내용에 관한 자세한 설명은 생략하겠습니다. 다만 여기서는 WSET 명령을 사용하여 특정 그래픽 창을 선택한다는 점만 강조해두겠습니다. 결과는 다음 그림과 같습니다.

 

 

즉 위와 같이 WSET 명령을 사용하였을 때 이렇게 캡션 문자가 첫번째 그래픽 창인 Win 1에 표시되는 결과를 얻게 됩니다. 만약 WSET 명령을 사용하지 않았다면, 가장 최근에 뜬 그래픽 창인 Win 2에서 캡션 문자가 표시되었을 것입니다.

반응형