2010년 10월 4일 월요일

VisualGL을 이용하여 그래프(graph) 그리기

[그림 1] "OrangeLine.sty" 스타일을 적용한 Plot2D 실행 모습(출처: EMtool.com)

(주)EMtool.com에서 제공하는 Visual GL(Graphics Library)를 이용하면 2차원 그래프를 쉽게 그릴 수 있다.

1. 먼저 "리소스 뷰 -> Dialog"로 가서 "Static Text"를 이용하여 그래프를 출력할 영역을 그리자. 예를 들어 이 "Static Text"의 resource ID를 "IDC_PLOT"이라 하자.

2. 그래프를 출력할 클래스(class) 정의에 member variable 형태로 아래 code를 입력한다.
public:
CPlot2D m_plot;

3. 그래프를 출력할 클래스(class)의 초기화 함수에 아래의 code를 삽입하면 그래프가 출력된다. 예를 들어 CFormView인 경우 OnInitialUpdate() 함수에 code를 삽입하면 된다.
m_plot.Create(this, IDC_PLOT);
m_plot.SetContextMenu(true);
m_plot.SetTitle("그래프 이름");
m_plot.SetXLabel("X축");
m_plot.SetYLabel("Y축");
m_plot.SetBox(true);
m_plot.SetGrid(true);
m_plot.LoadPlotStyle(GetCurExePath() + _T("/Style/Plot/OrangeLine.sty"), false);

위 함수들의 이름을 보면 함수가 하는 일을 분명히 알 수 있다.

4. 그래프에 data를 넣는 방법은 아래와 같다.
m_PlotAmp.SetXYMatrix(m_MatX, m_MatY);
m_PlotAmp.Redraw();

[주의]
가끔식 그래프가 출력되지 않을 때는 아래 사항을 확인하면 된다.

1. 그래프를 Group Box에 넣지 않았는가?
   → Group Box 속성으로 가서 Transparent를 True로 바꾼다.

2. CTilePlot을 사용할 때 전체가 검정색으로 나오는가?
   → 데이터 개수가 너무 많아 Mesh색인 검정이 출력될 수 있으므로 Mesh 대신 Surf 옵션만으로 다시 그려본다.

3. 맥락 메뉴(context menu)를 호출한 후 그 부분만 그래프가 사라지는가?
   →  자식 대화상자(child dialog)를 생성한 후 그 대화상자에 그래프를 넣은 경우는 대화상자에 z순서(z order)가 반드시 설정되어야 한다. 만약 SetWindowPos() 함수를 사용했다면 속성에 SWP_NOZORDER를 넣으면 안된다.
Enhanced by Zemanta

댓글 없음 :

댓글 쓰기

욕설이나 스팸글은 삭제될 수 있습니다. [전파거북이]는 선플운동의 아름다운 인터넷을 지지합니다.