오늘부터는 본격적으로 각 그래픽 객체 클래스에 대한 소개를 순차적으로 진행하게 된다. 그 첫 단계로서 먼저 축(Axis)과 텍스트(Text) 객체에 관하여 알아보기로 한다. 이 내용은 차후 플롯(Plot), 등위선(Contour) 등의 객체들을 구현하는데 있어서 기본적으로 알아둘 필요가 있다. 왜냐하면 기존의 Direct Graphics에서와는 달리 Object Graphics의 세상에서는 예를 들어서 플롯을 그릴 때, 축이나 타이틀 문자 등이 자동적으로 알아서 생성되지 않는다. 플롯은 플롯 객체로 구현하고, 나머지 축이나 텍스트들은 따로 객체로 구현해줘야 한다. 이러한 현실이 조금 귀찮게 느껴질 수도 있겠지만, 막상 부딪쳐보면 그리 복잡하지만은 않으니 미리부터 걱정할 필요는 없을 것 같다. 그러면 축 객체에 관한 내용부터 시작해보기로 하자.
축 객체의 생성
일반적인 2차원 플롯의 경우 X, Y 두 개의 축이 존재하는데, 물론 각 방향에 대한 축 객체를 모두 직접 생성해줘야 한다. 그리고 각 축이 갖게되는 범위값 역시 직접 설정해줘야 한다. Direct Graphics에서는 플롯을 그릴 자료의 범위값에 따라 IDL이 알아서 축마다의 범위를 정해주지만([XYZ]RANGE 키워드를 따로 사용하지 않을 경우), Object Graphics에서의 축 객체의 경우는 RANGE라는 속성을 통하여 범위를 지정해주지 않을 경우 무조건 0.0~1.0이라는 범위로 인식해버린다는 점을 유의해야 한다. 축 객체는 다음과 같이 OBJ_NEW 함수를 사용하되, 축의 방향을 나타내는 인자가 함께 들어간다. 이 인자의 값이 0이면 X축, 1이면 Y축, 2이면 Z축이 된다.
xAxis = OBJ_NEW(‘IDLgrAxis’, 0)
yAxis = OBJ_NEW(‘IDLgrAxis’, 1)
zAxis = OBJ_NEW(‘IDLgrAxis’, 2)
이러한 기본인자외에도 여러가지 속성들에 대응하는 키워드들이 사용되는데, 이를 통하여 눈금의 갯수, 길이, 방향, 자료값의 범위 등 여러가지 속성들을 지정할 수 있다. 예를 들어, 범위가 -5~5이고 눈금의 방향은 축의 아래쪽을 향하는 X축 객체를 생성하려면 다음과 같이 해준다.
xAxis = OBJ_NEW(‘IDLgrAxis’, 0, RANGE=[-5,5], TICKDIR=1)
그리고 이 축 객체에 대하여 작은 눈금(minor tick)을 비활성화시키려면 다음과 같이 MINOR라는 속성을 조정하면 된다. 또한 축의 두께의 경우 THICK이라는 속성을 조정하면 된다.
xAxis -> SetProperty, MINOR=0, THICK=1.5
축 객체의 사용
예제 자료를 사용하여 2차원 플롯 객체를 생성하고, 여기에 X, Y 축 객체를 추가적으로 생성하는 예제를 한번 살펴보도록 하자. 우선 다음과 같이 플롯 및 축 객체들을 생성한다.
data = FINDGEN(100)
myPlot = OBJ_NEW(‘IDLgrPlot’, data)
xAxis = OBJ_NEW(‘IDLgrAxis’, 0)
yAxis = OBJ_NEW(‘IDLgrAxis’, 1)
생성된 플롯 객체로부터 자료값의 X 및 Y 범위를 추출하고, 각 방향 축 객체의 범위를 이에 맞게 조정한다.
myPlot -> GetProperty, XRANGE=xr, YRANGE=yr
xAxis -> SetProperty, RANGE=xr
yAxis -> SetProperty, RANGE=yr
축 객체에서 눈금(tick)의 길이는 기본적으로 자료값 단위의 0.2배로 설정된다. 여기서 사용되는 예제 자료의 경우 그 범위가 0~99이므로, 기본 설정대로라면 눈금의 길이가 0.2가 될텐데 그러면 눈금 자체가 너무 짧아서 육안으로 거의 식별이 불가능할 정도가 될 것이다. 따라서 자료값 범위의 2% 정도로 해주는 것이 보기에 훨씬 좋을 것이므로 다음과 같이 재조정해준다.
xtl = 0.02*(xr[1]-xr[0])
ytl = 0.02*(yr[1]-yr[0])
xAxis -> SetProperty, TICKLEN=xtl
yAxis -> SetProperty, TICKLEN=ytl
이제 플롯 및 축 객체들을 담을 모델, 뷰, 윈도우 객체들을 생성하고, 서로간의 계층구조를 설정해준다.
myModel = OBJ_NEW(‘IDLgrModel’)
myView = OBJ_NEW(‘IDLgrView’)
myWindow = OBJ_NEW(‘IDLgrWindow’)
myModel -> Add, myPlot
myModel -> Add, xAxis
myModel -> Add, yAxis
myView -> Add, myModel
앞서 ‘객체의 위치 지정’이라는 챕터의 후반부에서 잠시 언급했던 set_view라는 프로시저를 혹시 기억하는가? 여기서 이 프로시저를 잠시 사용하도록 하겠다. 이 프로시저의 역할은 적정한 뷰플레인 사각형을 뷰 객체에 부여하는 것임을 상기하면 된다. 뷰플레인 사각형을 일일이 계산하기 귀찮을 때 사용하면 편한 프로시저이다.
SET_VIEW, myView, myWindow
이제는 다음과 같이 지금까지 작업한 내용을 화면에 구현하면 된다. 그러면 다음 그림과 같이 X, Y축과 함께 플롯이 그려진다.
myWindow -> Draw, myView
참고로 이 예제는 IDL이 설치된 폴더내에 examples/visual이라는 하위폴더안에 obj_axis.pro라는 이름의 프로시저로 이미 저장이 되어있다. 따라서 IDL의 커맨드 입력창에서 obj_axis라고 타이핑하고 엔터키를 누르면 바로 실행되는 모습을 볼 수 있다. 제대로 실행되었다면 앞의 그림과 같은 모습을 볼 수 있을 것이다. 이 프로시저의 내용을 보려면 커맨드 입력창에서 .edit obj_axis라고 타이핑하고 엔터키를 누르면 에디터상으로 그 내용을 볼 수 있으니 참조하길 바란다.
'IDL > Object Graphics' 카테고리의 다른 글
Object Graphics in IDL [30] (0) | 2011.03.21 |
---|---|
Object Graphics in IDL [29] (0) | 2011.03.15 |
Object Graphics in IDL [27] (0) | 2011.02.25 |
Object Graphics in IDL [26] (0) | 2011.02.22 |
Object Graphics in IDL [25] (0) | 2011.02.14 |