강좌,팁

안녕하세요

야리싸내라고 합니다.

 

그래프에서 delete를 하면 plothandle이 0으로 reset되지 않고 다음 그릴때에 plothandle은 계속 증가하는 현상이 있습니다.

몆번을 지우기를 반복해도 마찬가지입니다.

 

아래와 같이 그래프가 10개가 있다고 하면

for(i=0;i<10;i++) plotHandle[i]=PlotY(panel,Ydata,numbers,,,,);

그래프 핸들이 10개가 생깁니다.

plotHandle 배열에는 1,2,3,4,5,6,7,8,9의 값이 들어 있습니다.

 

그래프컨트롤에서 이미 그려진 라인을 지울려면

DeleteGraphPlot (panel,control ,-1 , VAL_IMMEDIATE_DRAW);

이렇게 해서 그려진 라인을 전부 지울수가 있습니다.

 

그리고 나서 다시 어떤 data를 읽어와서 그래프를 그리게 되면

for(i=0;i<10;i++) plotHandle[i]=PlotY(panel,Ydata,numbers,,,,);

그래프 핸들이 10개가 생깁니다.

여기서 plotHandle의 배열에는 1,2,3,,,의 값이 아닌

10,11,12,13,14,,,, 이렇게 되어 있습니다. 즉 그래프를 지우더라도 plotHandle의값은 지워지지 않고

이전의 마지막 plotHandle의 값에서 추가되어 있습니다.

 

즉 그래프를 하나 그리고 지우고 하나 그리고 지우고를 100번 반복하면 plotHandle값은 100이 된다는 거지요...

그래프상에는 LINE이 하나 밖에 없는데 말이지요...

 

int plotHandle;

double dataY[10][1000];//1000개의 값을 가지는 10개의 배열

이런 현상을 가정합시다.

10개의 LINE이 있는 DATA를 읽어와서 화면에 그리고 나서 다시 새로운 10개의 DATA를 읽어와서 화면에 새롭게 그렸습니다.

커서를 이용하여 그래프상에 있는 10개의 LINE중에서 하나의 라인을 선택했습니다.

그리고 선택된 라인의 DATA를 뉴메릭에 표시를 합니다.

그럼 어느 라인이 선택되었는지를 확인하기 위해서 아래 함수를 사용합니다. 

GetGraphCursorIndex (panel,control , 1,&plotHandle ,&indexX );

SetCtrlVal(panel,PANEL_NUMERIC,dataY[plotHandle-1][indexX];

plotHandle의 값이 1~10이 되어 정상적으로 동작하지만 두번째 data를 읽어와서 그래프를 그린 후부터는 plotHandle의값이 11~20으로 바뀌어

dataY의 배열 범위를 벗어납니다. 

NI에 물어봤는데

DeleteGraphPlot (panel,control ,-1 , VAL_IMMEDIATE_DRAW);

을 하더라도 plothandle은 reset이 안된다고 합니다.

 

이것을 해결할려고 고민고민하다보니 SetCtrlAttribute를 이용하여 해결을 할 수 있었습니다.

아래와 같이

GetGraphCursorIndex (panel,control , 1,&plotHandle ,&indexX );//커서로 부터 현재 선택된 line의 plothandle을 구하고

GetCtrlAttribute (panel,control , ATTR_FIRST_PLOT, &firstPlotHandle);//그래프의 첫번째 plothandle의 값을 구해서

plotHandle = plotHandle-firstPlotHandle;//현재의 plothandle에서 첫번째 plotHandle을 빼면 됨.

SetCtrlVal(panel,PANEL_NUMERIC,dataY[plotHandle][indexX];

 

이게 안되어서 며칠을 고생했습니다. ^^


JNS

2015.08.19 13:02:50
*.105.142.194

좋은 팁입니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
116 [팁] 컨트롤의 tooltips 지정하기 file 허창원 2020-05-08 389
115 멀티쓰레드 사용 시, 메모리 관련 참고사항입니다. [1] 요돌이 2017-10-24 1092
114 [팁]타이머 사용시 주의할점. file 이현화 2014-02-13 2535
113 Lable 세로쓰기 [1] 초보 2013-12-21 2668
112 [강좌:45] ini 파일 이용하기(CISManip.dll 활용) [2] 허창원 2013-05-29 3876
111 [강좌:44] ini 파일 이용하기(기본 활용) [1] 허창원 2013-05-29 5159
110 [강좌:43] Panel 크기 변경시에 컨트롤의 위치나 크기 조절하기(CISManip.dll 활용) 허창원 2013-03-12 6456
109 [강좌:42] Panel 크기 변경시에 컨트롤의 위치나 크기 조절하기(기본 활용) 허창원 2013-03-12 7072
» [팁21] 그래프를 지우고 그릴때의 plotHandle을 구하는 방법 [1] 야리싸내 2012-05-25 7457
107 [강좌:41] Prototype 프로그램 CISDEFPROG 소개 [1] [1] 허창원 2012-01-03 8670
106 [강좌:40] CIS Project를 시작하며... [4] 허창원 2011-12-29 8429
105 ------------- 이제 새로운 지평이 열립니다 ------------- 허창원 2011-12-29 8835
104 [팁]그룹명령(고수님들은 패스~ ^^;) file [2] 이현화 2009-06-15 23113
103 [KD스타일규칙] Panel, Control, Function 에 대한 이름부여규칙 file 허창원 2008-10-15 20960
102 [팁]Elaped Time [1] 이현화 2008-10-15 26401
101 [팁:19] 시리얼 포트 모니터링(Serial Port Monitoring) 유틸리티 소개 [9] [1] 허창원 2008-05-12 95065
100 [팁:18] CVI에서 ActiveX 컨트롤 사용하는 절차 file [2] 허창원 2008-04-07 30959
99 [강좌:39] 입맛대로 좀더 편리하게 배포용 설치 프로그램 만들기(CVI 8.5 이용) [1] [1] 허창원 2008-03-14 22994
98 [강좌:38] 배포용 설치 프로그램 만들기(CVI 8.5 이용) 허창원 2008-03-14 22899
97 [팁]간단한 최소화 기능개선입니다. 김민수 2007-10-05 24105