http://idldatapoint.com/2011/10/20/hash-syntax-for-accessing-children-in-new-graphics/

IDL New Graphics(NG)를 이용해서 작업을 하는데 영 익숙치가 않다. NG의 장점이라면 Object Graphics와 같이 한번 표출된 Graphic units의 일부를 수정하고 싶을 때 다시 전체를 그리지 않고 범위를 조정한다던가 하는 작업을 할 수 있다는 것이다. 그런데 내가 주로 작업하는 방식은 IDLDE를 사용하지 않고 procedure를 통해 Graphic Window안에 여러개의 Graphic units을 그리는 식이라서 그림을 그려놓고 나면 main level에서는 개별 Graphic units에 대한 Objects가 넘어오지 않는다. 그 procedure내에서 Objects를 생성했다가 사용하고 버리기 때문이다.

procedure를 이용하는 이유는 매번 다른 인자 (예를들면 파일명)에 대해 같은 그림을 그리고 싶은 것인데 그렇다고 매번 stop을 할수도 없는 노릇이라 하다보니 전혀 NG의 장점을 살리지 못하는 상황이었다. 그러다 발견한 것이 위의 주소에 있는 내용인데 정리하자면 procedure가 아닌 function의 형태로 작업을 한뒤 Graphic Window Object를 return하면 그 Object안에 사실상 각 Graphic units을 HASH의 문법형태로 접근 할 수 있다는 것이다. 정리하면

1. 각 Graphic units에 "name" keyword로 이름을 정해준다. (ex, !NULL=plot(/test,name='plot'))
2. Window Object를 return한다. (ex, return, pWin)
3. 다시 접근하고 싶을때는 정해준 "name"을 key로 하는 HASH문법으로 접근한다. (ex, pPlot=pWin['plot'])
+ PLOT같은 경우 기본적으로 axes를 HASH key로 가지고 있다. (ex, axis1=pPlot['axis1']; 아래축부터 시계방향으로 numbering 되어 있다.)



뭐 이런식으로 해서 좀 더 쓸만해 지긴 했는데 여전히 그림을 자유자재로 그리는데는 어려움이 있다. buffer로 그릴때랑 window로 표출할때랑 그림의 annotation이 다르고, 첨에 정해준 dimension이랑 다르게 지가 맘대로 dimension을 바꾼다. -_-;; 그리고 보이는거랑 파일로 저장한게 또 다르다. 결국 삽질 몇번하다가 Direct Graphics로 돌아가던가 아님 NG를 DG처럼 쓰는 방향으로 갈 거 같다. 그림 자체는 좀 더 이쁘니까.

Q. 근데 쟤들이 무슨 하위 Graphic units을 갖고 있는지 알 수는 없나요? win.keys()라는 식의 HASH method는 안먹던데... 

+ Recent posts