오브젝트 그래픽 질문입니다.

게시판 IDL Q&A 오브젝트 그래픽 질문입니다.

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

      IDLgrAXIS 객체의 축 이름(?) 이 이상해서 질문 드립니다.

      ax = OBJ_NEW(‘idlgraxis’, 0, ycoord_conv=[0.1, 1])

      om = OBJ_NEW(‘idlgrmodel’)
      ov = OBJ_NEW(‘idlgrview’, viewplane_rect=[0,0,1,1])
      ow = OBJ_NEW(‘idlgrwindow’, retain=2)

      om->ADD, ax
      ov->ADD, om
      ow->DRAW, ov

      newr = [1e-4, 2e-3]
      tran = norm_coord(newr)
      ax->SETPROPERTY, range=newr, xcoord_conv=tran
      ow->DRAW, ov
      ax->GETPROPERTY, tickvalue=d
      PRINT, d

      위의 예제를 실행 시켰을때
      축 value가 시커멓게 표시가 됩니다.
      처음 설정해 놓은 축의 range(0~1)범위보다 너무 넣으면 축 vlaue 가 표시 되질 않고
      너무 작으면 예제 처럼 표시가 되는데요

      해결 방법이 없을까요??

    • #1058 Reply
      Sangwoo
      회원

      처음에 축 객체를 생성했을 때의 스케일이 중간에 축범위를 바꿔줌으로써 조정이 된 상태인데요. OG에서 축의 라벨값들도 사실은 IDLgrText 클래스의 객체들입니다. 그리고 이 텍스트 객체들 역시 그 스케일 조정의 영향을 받습니다. 예를 들면 처음에 축 범위가 0~1이었는데, 이 축을 나중에 0~100의 범위로 조정을 하면, 축 라벨 텍스트들의 크기 역시 영향을 받는단 얘기입니다. 그렇게 되면 사실 축 범위를 바꿀 때마다 라벨 문제의 크기가 자꾸 변하게 되겠죠. 지금도 그런 문제때문에 라벨 문자들의 가로 방향 크기가 너무 커진 경우입니다. 그래서 축 객체 생성후, 라벨 문자 객체의 속성을 조정함으로써, 이와 같은 범위 변화에 관계없이 원래 크기를 유지하도록 따로 설정을 해줘야 합니다. 처음에 축 객체를 생성한 직후에 다음과 같은 문구들을 넣어보세요.

      ax -> GetProperty, TICKTEXT=oTT
      oTT -> SetProperty, RECOMPUTE_DIMENSIONS=2

      그러면 축 라벨 문자들의 크기가 온전하게 유지가 되는 것을 확인할 수 있습니다. 그리고 이외에 추가적인 조언을 드린다면, 지금 그려진 축은 너무 화면에 꽉 차게 그려지고 있는데요. NORM_COORD로 얻어진 tran의 원소값들을 다음과 같이 적당히 조정해보세요. 그러면 좌우에 적당한 여백을 둘 수 있습니다. 이러한 조정값은 그래픽창의 크기 등에 따라서도 다를 수 있기 때문에 이리저리 해보시고 적당한 값을 찾으시면 됩니다.

      tran[1] = tran[1]*0.84
      tran[0] = tran[0]+0.11

      객체 지향 그래픽 체계란게 상당히 많은 부분들까지 프로그래머가 직접 챙겨줘야 하는 경우가 많습니다. 이 경우도 그러한 예라고 보시면 됩니다.

    • #1062 Reply
      Sangwoo
      회원

      코드로 적어주신 내용을 참조해보면 1d6 정도까지는 잘 되다가 1d7부터 축의 눈금을 제대로 잡지 못하는 현상이 보이는군요. 사실 정상적으로 되어야 하는데 뭔가 필요한 셋팅이 더 있는지도 모르겠습니다. 저도 좀 더 알아봐야 할 것 같습니다. 사실 NG 체계에서는 잘 되는 것으로 봐서는 뭔가 저도 모르는 비밀이 있나봅니다. 참고가 될 것 같아서 NG 체계에서의 테스트 코드를 아래 적어봅니다.

      pl = plot(indgen(101), /nodata, xrange=[0D, 1D]+1D8, xtickformat='(D11.1)’)

    • #1059 Reply
      tlseorb0111
      회원

      바쁘실텐데 답변 감사합니다.

      한가지 더 질문이 있습니다.

      ax = OBJ_NEW(‘IDLGRAXIS’, 0, ycoord_conv=[0.1, 1])
      ax -> GetProperty, TICKTEXT=oTT
      oTT -> SetProperty, RECOMPUTE_DIMENSIONS=2
      om = OBJ_NEW(‘IDLGRMODEL’)
      ov = OBJ_NEW(‘IDLGRVIEW’, viewplane_rect=[0,0,1,1])
      ow = OBJ_NEW(‘IDLGRWINDOW’, retain=2)

      om->ADD, ax
      ov->ADD, om
      ow->DRAW, ov

      newr = [0, 1d]+1d7
      tran = NORM_COORD(newr)
      ax->SETPROPERTY, range=newr, xcoord_conv=tran
      ow->DRAW, ov
      위 예제를 돌려봤을때 축의 위치가 설정하대로 나오질 않습니다.
      newr 을 크게 잡으면(9d7 이상) 이런 현상이 나타나는데요…
      처음 설정해준 viewplane_rect에 비해 너무 넓은 범위를 잡아서 그런건가요??

      • 이 답변은 tlseorb0111에 의해 10 years, 7 months 전에 수정됐습니다.
2 답변 글타래를 보이고 있습니다
'오브젝트 그래픽 질문입니다.'에 답변달기
글쓴이 정보: