function 그래픽 관련 질문드립니다.

게시판 IDL Q&A function 그래픽 관련 질문드립니다.

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #2461 Reply
      tlseorb0111
      회원

      안녕하세요
      window함수를 통해서 해당 window에 그려진 function 그래픽의 name을 얻을 수 있는지 궁금합니다.
      말이 좀 이상한것 같은데 예제를 보시면

      ;; plot 두개를 한후에
      p1 = plot(findgen(10), color=’blue’)
      p2 = plot(findgen(10)+1, color=’red’, /over)
      ;; 각 plot의 default name
      print, p1.name
      print, p2.name

      ;; 만일 두 plot에 대한 변수를 잃어버린경우
      p1 = !null
      p2 = !null

      ;; plot이 그러진 window를 불러온 후
      pwin = getwindows(/current)

      ;; dictionary를 쓰는것 처럼 window에 plot의 name을
      ;; 처넣으면 해당 plot의 속성을 바꿀 수 있는데요.
      pwin[‘plot’].color=’green’
      pwin[‘plot 1’].linestyle=1

      위처럼 plot 변수들이(p1, p2)가 손실된 상태에서 각 plot들의 name만 가지고
      속성을 바꿀수 있다면 window에 이 정보들이 저장되어있을 것 같습니다.
      위 예제에서 plot name에 해당되는 “plot”과 “plot 1″을 모른다고 했을때
      window에 그려진 function 그래픽의 name들을 알 수 있는 방법이 있을까요?

    • #2462 Reply
      Sangwoo
      회원

      제 생각에도 WINDOW 개체내에 그 정보들이 어떤 식으로든 저장이 되어 있을 것 같습니다. 하지만 그러한 내부(?) 정보들을 WINDOW 개체에서 바로 추출할 수 있는 방법은 공식적으로 알려진 것이 없습니다. 제가 확인해본 바로는, WINDOW 함수로 생성된 개체 자체는 좀 독특하게도 GRAPHICSWIN이라는 타입(Type)이면서도 동시에 GRAPHICSWIN이라는 이름의 객체 클래스(Object Class)이기도 합니다. 그런데 타입(Type)이란 관점에서 먼저 본다면, IDL에서 공식적으로 지원되는 자료형들 중 이러한 GRAPHICSWIN이란 것은 공식적으로는 없습니다. 물론 객체 클래스의 관점에서 봐도 GRAPHICSWIN이란 클래스에 대한 설명 자체가 IDL 도움말 어디에도 존재하지 않습니다. 즉 GRAPHICSWIN이라는 자료형 또는 클래스에 대한 문서화된 설명 자체가 존재하지 않는다는 것이고, 따라서 그 안에 존재하는 그래픽 원소들의 name 목록을 바로 확인하는 방법을 일반 사용자 입장에서는 전혀 알 수가 없다고 보면 됩니다. 객체 클래스인 경우라면 이러한 내부 정보를 확인할 수 있는 Method가 뭔가 존재할지도 모르겠으나, 일반 사용자 입장에서 그게 뭔지를 알 방법도 없습니다. 그냥 IDL 도움말에 나온 WINDOW 함수에 관한 내용에서도 유사한 방법은 나와있지를 않습니다. 물론 아마도 IDL 본사의 개발자들은 알고 있겠지요.

      그리고 올려주신 코드에서 p1, p2를 !null로 처리한 부분이 있는데, 이 경우에는 사실 PLOT으로 구현된 그래픽 요소에 대한 참조자(reference)만 지워질 뿐이고 그래픽 요소 자체는 메모리상에 그대로 살아 있습니다. 따라서 그래픽 요소 자체를 메모리상에서도 아예 삭제하고자 할 경우에는 다음과 같이 erase 메서드를 사용하면 됩니다. 다만 여기서는 p1을 먼저 그리고 p2를 덧그린 상태이기 때문에, p1을 제거하면 p2도 같이 제거됩니다. 그리고 NAME 속성에 부여되는 고유 이름의 경우, 직접 명시하지 않을 경우에는 plot, plot 1, plot 2 또는 contour, contour 1, contour 2와 같은 이름으로 디폴트로 갖고 있게 됩니다. 따라서 그래픽 요소 생성시에 NAME 속성을 사용하여 고유 이름을 직접 지어주는 것도 좋은 방법입니다.

1 답변 글타래를 보이고 있습니다
'function 그래픽 관련 질문드립니다.'에 답변달기
글쓴이 정보: