이상우의 IDL 블로그
과학기술용 프로그래밍 언어인 IDL에 관한 폭넓은 내용들을 다루는 블로그입니다

방명록

   
등록
  • Sung
  • 2019.08.18 16:08
안녕하세요. IDL을 공부하며 이상우 박사님의 강의와 블로그를 통하여 도움을 많이 받았습니다.

본래 질문을 IDL User Group에 올리려 하였으나 글올리기만 누르면 자꾸 에러가 떠서 부득이하게 이곳에 질문을 드립니다.

저는 IDL을 이용하여 위젯을 만들어보고 있습니다.

제가 궁금한 점은 다음과 같습니다.

Main window(M_W)에는 버튼(M_B)이 하나 있습니다

이 버튼을 누르면 새로운 window(N_W1)를 생성하고 그곳엔 이미지와 버튼이 하나 생성됩니다.

N_W1에 위치한 버튼을 누르면 N_W 내  이미지를 회전시킵니다.

여기까진 완료하였습니다.

그런데 N_W가 있는 상태에서 다시 M_W내 M_B를 누르면 새로운 윈도우 N_W2가 생성됩니다.

N_W2 내 버튼을 누르면 N_W2내 이미지를 회전시킵니다.

문제는 여기서 생깁니다.

N_W1 내 버튼을 누르면 N_W1의 이미지가 아니라 N_W2의 이미지를 회전시킵니다.

이를 해결할 수 있는 방법이 있을까요?

   
등록 취소
   
등록 취소
어떤 이유로 인하여 그런 식으로 엉킨 것인지는 제가 정확히 파악하긴 힘들 것 같지만, 짐작으로는 WIDGET_DRAW 함수로 구현된 그래픽 창의 ID가 제대로 구분되어있지 않아서 생기는 문제가 아닐까 추측됩니다. 예를 들면 다음과 같은 방식으로 새로운 윈도우 두개에 각각 그래픽 화면 위젯이 구현되어 있을 것 같은데요.

wd1 = WIDGET_DRAW(~~~~); N_W1에서 구현된 그래픽 화면 위젯
wd2 = WIDGET_DRAW(~~~~); N_W2에서 구현된 그래픽 화면 위젯

그래픽 화면 위젯을 이렇게 다수로 운용할 경우에는 각 화면의 ID를 반드시 받아와서 그림 표출 때마다 셋팅을 해줘야 합니다.

WIDGET_CONTROL, wd1, GET_VALUE=id1
WIDGET_CONTROL, wd2, GET_VALUE=id2

이렇게 얻어진 id1, id2를 공유정보에 넣어둔 다음, 이벤트 처리 루틴 내에서는 WSET 명령에서 이 정보를 이용하도록 합니다. 작업하신 코드에서 공유정보를 어떤 식으로 처리하시는지는 제가 알 수가 없기 때문에 대략적으로만 언급합니다.

WSET, id1 또는 WSET, id2

어쨌든 중요한 것은 다수의 그래픽 화면들이 등장하는 GUI를 만드는 경우에는 각 화면 위젯마다의 고유 ID 정보를 따로 받아둔 다음 이벤트 처리 루틴에서 구분되어 활용되도록 해야 한다는 것입니다.

그리고 IDL 유저그룹의 Q&A 게시판은 회원가입을 해야만 글을 올릴 수 있습니다. 운용상의 문제로 인하여 이렇게 되어있다는 점 이해해주시기 바랍니다.
   
등록 취소
  • Sung
  • 2019.08.19 21:21
바쁘신와중에도 답글을 남겨주셔서 감사합니다.
IDL 유저그룹의 회원가입도 시도해보았으나 워드프레스 오류가 계속 발생하여 진행이 되지 않습니다.
이에 대해 여쭤보아도 괜찮을지요..

에러의 내용은 다음과 같습니다.

워드프레스 » 오류: JavaScript and Cookies are required in order to register. Please be sure JavaScript and Cookies are enabled in your browser, and reload the page.

* 현재 IDL 유저그룹 사이트의 경우 자바스크립트와 쿠키기능은 허용된 상태입니다.
   
등록 취소
자세한 내용 알려주셔서 감사합니다. 확인을 해보도록 하겠습니다. 그리고 질문하셨던 위젯 관련 내용에 관해서는 일단 여기서 계속 댓글로 피드백을 주고받으면 될 것 같습니다.
   
등록 취소
  • Sung
  • 2019.08.20 20:26
신경을 써주셔서 감사합니다.

각 그래픽 위젯에 고유 ID를 부여하니 해결되었습니다. :)
   
등록 취소
아~ 해결하셨군요. 다행입니다. 그리고 IDL/ENVI 유저그룹 회원가입 이슈에 대해서는 관련 게시물을 여기 올렸으니 그 내용을 참조해주시면 되겠습니다.
   
등록 취소
  • shjwl12e
  • 2019.03.28 12:33
안녕하세요. IDL에 대한 강의나 설명 항상 잘 보고있습니다.
제가 SetData를 이용해서 움직이는 그래프를 그리려고 했는데 잘 되지 않아 여쭤보고자 하는데요.

일단 배열 BB는 3차원 배열: BB(21,4,100) 이고
x가 BB(*,0,t), y가 BB(*,1,t)이고, x는 대략 1~610정도까지의 정수가, y에는 1~3까지의 정수가 랜덤하게 들어있습니다.
SetData를 이용해서 t가 0부터 99까지의 100개의 그래프를 동영상으로 만들고 싶은데 어떻게 해야할지 몰라서 도움을 요청하고자 합니다.

저는 일단
frame=100
win = WINDOW(DIMENSIONS=[1200, 300])
 x = BB(*,0,0)
 y = BB(*,1,0)
 p = PLOT(x, y, psym=2,symsize=5,YRANGE=[0, 4],/CURRENT)
FOR t = 0, frame-1 DO BEGIN
 x = BB(*,0,t)
 y = BB(*,1,t)
 p.SetData, x, y
ENDFOR
이렇게 짰는데 win창에 아무것도 뜨지를 않네요.
혹시 도움 주실 수 있으신가요?
감사합니다.
   
등록 취소
   
등록 취소
  • shjwl12e
  • 2019.03.28 12:38
아 질문은 IDL Q&A 게시판에서 다시 여쭤보도록 하겠습니다. 비밀번호를 까먹어서 이 글이 삭제가 되질 않네요. 죄송합니다.
   
등록 취소
올리신 질문에 대해서는 Q&A 게시판에 댓글을 달아놓았으니 확인해보시기 바랍니다
   
등록 취소
  • planted
  • 2019.03.14 16:45
안녕하세요. idl을 전혀 모르는데 수정을해야하는 긴급한 상황이라 도움을 얻고자 이렇게 글을 남깁니다.
sav 파일을 보거나 디컴파일? 할수 있는 방법이 있을까요? 있다면 방법좀 알려주시면 감사하겠습니다.
   
등록 취소
   
등록 취소
sav 파일은 실행파일이기 때문에 소스코드의 내용이 전혀 들어가 있지 않은 파일입니다. 따라서 sav 파일만으로는 원하시는 작업이 불가능합니다. IDL 소스코드 파일인 .pro 파일이 있어야 수정 작업이 가능합니다.
   
등록 취소
  • 양양
  • 2018.02.05 17:17
안녕하세요.., idl 사용 중 막막함에 이곳에 질문을 올립니다..

다름이 아니라
크기가 같은 1차원 배열, a와 b를 아래와 같이 두 개의 함수를 적용했습니다.

reg = regress(a,b,const=const)
lin = linfit(a,b,ynew=ynew)

저는 regress와 linfit 함수 모두 선형회귀분석을 할 목적으로 사용하였는데요, 결과가 너무나도 다르게 나와 어려움을 겪고 있습니다. 이 두 함수 모두 선형회귀분석에 사용하는 함수가 아닌가요? 왜 차이가 나는지 답을 구합니다...........ㅠㅠ
   
등록 취소
   
등록 취소
올려주신 두 경우 모두 같은 결과가 나옵니다. 다만 REGRESS와 LINFIT이 결과값을 돌려주는 방식에 있어 약간의 차이만 있을 뿐입니다. REGRESS의 결과에서는 const가 상수항(Y절편)이 되고 reg[0]가 1차항의 계수(기울기)가 됩니다. 그리고 LINFIT의 결과에서는 lin[0]가 상수항(Y절편)이 되고 lin[1]이 1차항의 계수(기울기)가 됩니다. 그리고 근사된 Y값 배열을 돌려받는 키워드는 REGRESS, LINFIT 모두 지원하며 그 명칭은 YFIT입니다. 더 자세한 사항들은 IDL 도움말에서 각 함수에 대한 내용에서 찾아보시면 됩니다.
   
등록 취소
  • 이양고
  • 2018.01.29 16:27
안녕하세요, 블로그에서 많은 도움을 받고 있습니다. 질문이 있어서 여기에 올립니다. array에 랜덤으로 일정한 확률을 가진 binary 값을 n개 생성하려고 합니다. 즉 1이 발생할 확률이 p라고 하면 array에 확률 p를 가진 1이 랜덤으로 n개 생성하게끔 하고 싶은데 randomu에서 binomial로 했을 때 n이 통제가 안되네요.. 어떻게 하면 될가요?
   
등록 취소
   
등록 취소
질문하신 내용을 제가 이해를 제대로 한 것인지 확인이 필요할 것 같습니다. 예를 들면 1000개의 값들로 구성된 배열이 있고, 배열 내 값들이 0 아니면 1인데, 확률이 0.4라면 1000개 중 정확히 400개의 1이란 값들이 랜덤하게 분포해있는 그런 배열을 얻고자 한다는 뜻인지요?
   
등록 취소
  • 이양고
  • 2018.01.31 10:23
안녕하세요~^^ 답글 감사합니다. 확률이 0.4인 1 값이 1000개의 값들로 구성된 배열 안에서 랜덤으로 20번 생성하는 배열을 얻고자 합니다.. 즉 배열 안에서 확률이 0.4인 이벤트가 랜덤으로 20번 발생하는 구조를 만들고자 합니다. 배열의 곳곳에 랜덤으로 뿌리고 싶은데 for문으로 돌리면 배열의 앞쪽에서만 생성되어 끝나버려서 고민입니다.
   
등록 취소
그러면 1000개의 0값들로 구성된 배열을 하나 생성하고, 이 배열 내 임의의 20개의 인덱스들에 대하여 1이란 값이 존재하면 되는 것으로 생각되긴 하는데요. 다만 1이란 값의 총 갯수가 정확히 20이어야 하는지 아니면 0.4의 확률이므로 20개가 아닌 다른 갯수(8개, 10개 등)여도 되는 것인지 궁금합니다.
   
등록 취소
  • 이양고
  • 2018.02.01 12:59
1이란 값의 갯수는 고정이 되어 있어서 정확히 20개 여야 합니다.
   
등록 취소
1000개의 0값들로 구성된 배열을 하나 생성하고, 이 배열 내에서 정확히 20개의 임의의 인덱스들에 대하여 그 값이 1이되어야 한다고 정리하면 될까요? 그렇다면 이 작업에서만큼은 0.4와 같은 확률값 자체는 별다른 의미가 없는 것처럼 보이는군요.
   
등록 취소
일단 제가 이해한 내용을 바탕으로 게시물을 작성해서 올렸습니다. 이 내용을 참조해보시면 될 것 같습니다. 혹시라도 원하시던 내용과 안맞는 부분이 있다면, 게시물에 수록된 코드의 내용을 바탕으로 수정해보시기 바랍니다.

http://blog.daum.net/swrush/448
   
등록 취소
  • 숲속의참치
  • 2017.09.12 09:50
안녕하세요 이 블로그에 자주 도움을 받고 있습니다ㅎ 특히 강의영상을 정말 유익하게 봤습니다. 감사합니다.

제가 ENVI를 이용해서 작업을 하던 중 계속 에러가 나는데 이 에러가 도데체 무슨 뜻인지를 모르겠습니다.

코드를 잘못 짠건지 컴퓨터의 하드웨어의 문제인지 ㅜㅜ 무지몽매한 중생에게 길을 가르쳐 주십시요

% IMSL Error: IMSL_MULTIREGRESS: Warning: STAT_RANK_DEFICIENT: The model is not full
  rank.  There is not a unique least squares solution. The rank of the matrix of regressors is 1.
   
등록 취소
   
등록 취소
방문 감사합니다. 죄송한 말씀이지만, ENVI는 다른 영역이고 여기서는 다루지 않습니다. ENVI 관련 질문은 아래 링크를 이용하시면 됩니다.

http://idl.selab.re.kr/?forum=envi-qa
   
등록 취소
  • Elijah
  • 2017.05.18 11:18
안녕하세요.이블로거를 통해 많을 도움을 받고 있습니다.
주로 DG을 사용하고 있습니다.
colorbar를 넣고 싶은데 어떻게 해야 되는지요?
NG에서는 쉽게 되는데 DG에서는 잘 되지 않습니다.

   
등록 취소
   
등록 취소
여기서 댓글을 올릴까 하다가 그냥 블로그 게시물로 작성하였습니다. 오늘 제가 올린 게시물의 내용을 참조하시면 될 것 같습니다.
   
등록 취소
  • willms
  • 2017.04.28 10:53
안녕하세요? New graphic 초보자입니다.
New graphic으로 polyfill를 적용할 수 있는지 궁금해서 질문드립니다
idl 도움말에 있는 polyfill은 direct graphic 에서의 예제인거 같아서요
   
등록 취소
   
등록 취소
NG 체계에서는 POLYGON 함수가 유사한 키워드를 갖고 있습니다. 그 외에 PLOT, BARPLOT 등 폴리곤 스타일의 표출 기능을 수행하는 그래픽 함수들도 유사한 기능의 키워드를 갖고 있습니다. 이런 키워드들은 대부분 그 명칭이 "FILL_" 시작되는 경우가 많습니다. 이러한 키워드들이 색상을 채우는 역할을 하는데 세부 기능에 대해서는 도움말을 참조하시면 됩니다.
   
등록 취소
  • willms
  • 2017.07.03 09:27
이상우 박사님, 안녕하세요?
박사님  이전 답변을 읽고 제가 감사의 댓글을 달지 않았네요
정말 감사합니다!
하나만 더 여쭤보겠습니다.
패닝 박사님 홈페이지 (코요테) 갤러리에 많은 예제가  DG기반으로 업로드 되어 있는거 같은데요,
NG체계로 다시 그리는게 가능할까요?
   
등록 취소
Coyote Graphics 라이브러리에 있는 DG 기반의 코드들을 NG 기반으로 변환하는 것은 너무 비효율적인 작업이라고 봅니다. 그냥 CG 라이브러리에서 그릴 수 있는 그림의 형태를 참조해서 유사한 그림을 그릴 수 있는 NG 기반의 코드들을 직접 작성하는 것이 더 좋을 것 같습니다. 물론 이를 위해서는 NG 체계 그래픽 기능에 대한 공부가 좀 필요합니다. IDL 도움말에서 관련 내용을 참조하시거나, 아니면 이 블로그에 있는 예제들을 참조하시길 권해 봅니다.
   
등록 취소
  • willms
  • 2017.07.03 23:44
감사합니다!
   
등록 취소
  • DpoN
  • 2017.01.11 19:05
안녕하세요. 평소에 블로그 보고 정말 여러가지 배워가며 IDL 이용하고 있습니다.
최근에 아무리 검색하여도 해답을 알 수 없는 질문이 생겨 여기에 질문을 올립니다.

현재 Mac에서 ssh로 서버에 접속하여 IDL을 돌리고 있습니다.
이과정에서 PS 이미지 파일을 만들고, 다시 제 데스크탑 (MAC)으로 파일을 전송하여 결과를 확인하고 있는데

어떤 ps 파일들은 MAC 미리보기로 잘 보이나, 어떤 파일들은 'PostScript 파일 변환 실패'란 문구가 뜨면서 실행이 안됩니다.

예를들어, for문으로 70개의 ps 이미지 파일을 만들었다고 치면, 약 50번째까지는 MAC에서 미리보기로 잘 되나, 51번째부터 70번째는 위의 문구가 뜹니다. (50번까지는 잘 실행이 되는걸 보면 code문제는 아닐듯 싶습니다.) 혹시 이와 관련하여 도움을 구할 수 있을까 싶어 이렇게 글을 올립니다. ㅠ
   
등록 취소
   
등록 취소
글쎄요. 실제 돌아가는 코드의 내부 상황을 제대로 보지 못하는 제 3자 입장에서는 뾰족한 답을 드리기는 어려울 것 같습니다. 만약 반복 작업 과정에서 메모리 낭비가 누적되는 문제가 존재하는 경우라면, 어느 이상 회차부터는 파일 생성 작업에 문제가 생길 가능성도 있겠지요. 서버에서 돌아가는 원본 코드 내에서 각 회차 작업 때마다 뭔가 중간 결과를 계속 출력하게 하는 방식으로 원인 파악을 직접 해보셔야 할 것으로 보입니다.
   
등록 취소
  • orang-z
  • 2016.12.15 23:31
idl을 파이썬으로 완전하게 돌릴 수 있나요?
   
등록 취소
   
등록 취소
질문하신 의미가, Python에서 IDL을 불러서 사용하는 것이 가능한가 여부를 문의하신 것이 맞다면, IDL의 Python Bridge라는 기능을 사용하면 가능합니다. 물론 이게 가능하려면 약간의 셋업 과정이 필요한데, 아래 링크들의 내용을 참조하시면 좋을 것 같습니다.

http://blog.daum.net/swrush/326

http://idl.selab.re.kr/?p=2672

http://idl.selab.re.kr/?p=2676
   
등록 취소