MFC中利用TeeChart控件完成三维图形绘制
(如需交流,请关注公众号:神马观止)
前一段时间由于帮一个朋友处理一些数据,需要编写一个最简单的界面,实现数据显示。中间遇到一些问题,我在接下来得内容中分别介绍,同时也把我解决这些问题的过程简短地进行叙述。
原始数据存储在TXT文档中,需要读入程序然后进行处理后保存到自己命名的TXT文档中(方便以后用Matlab进行仿真分析),同时在界面中通过TeeChart将各参数变化趋势显示出来。当然,我这里重点不是介绍数据处理算法,而且由于保密原因,不便于涉及具体数据内容,只介绍TeeChart控件的使用。顺便介绍TXT文档读取以及写入保存的相关内容。
1.TXT文档读取
void CHefeiData_MJDlg::OnReadfile()
{
//选择所要读取的txt文件
CString filename;
CFileDialog hFileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)_TEXT("TXT Files(*.txt)|*.txt|All Files (*.*)|*.*||"),NULL);
if (IDOK==hFileDlg.DoModal())
{
filename=hFileDlg.GetFileName();
//判断读取的文件是否为原文件
if ("hefei_data.txt"!=filename)
{
MessageBox("选择文件错误!");
}
else
{
fp_read=fopen(filename,"r");
if (NULL==fp_read)
{
MessageBox("文件读取错误!");//异常处理
}
}
}
}
找到hefei_data.txt 文件并选中打开。
2.处理后数据保存
void CHefeiData_MJDlg::OnTransfer()
{
//将转换后的数据保存在txt文件
CString filename;
CFileDialog hFileDlg(FALSE,_T("txt"),NULL,OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST |OFN_READONLY,(LPCTSTR)_TEXT("转换后数据保存文件(*.txt)"),NULL);//False:保存文件对话框
if(hFileDlg.DoModal())
{
filename=hFileDlg.GetFileName();
}
fp_write=fopen(filename,"w");
if (NULL==fp_write)
{
MessageBox("所要写入的文件创建失败!");//异常处理
}
fprintf(fp_write,
"%-8s %-8s %-8s %-8s %-8s %-8s %-8s %-8s %-8s %-8s %-8s %-8s %-8s %-8s %-8s\n",
"P1","P2","P3","P4","P5","P6","P7","P8","P9","P10","P11","P12","P13","P14","P15");
while (1)
{
if (feof(fp_read))
{
MessageBox("数据转换结束!");
break;
}
/***********************************************************************
***** Data Processing *****
**********************************************************************/
fprintf(fp_write,"%-8.4f %-8.4f %-8.4f %-8.4f %-8.4f %-8.4f %-8.4f %-8.4f %-8.4f %-8.4f %-8.4f %-8.4f %-8.4f %-8.4f %-8.4f \n",……);
}
fclose(fp_write);
}
3.TeeChart三维曲线显示
下面才真正进入今天的主题——利用TeeChart完成曲线显示。首先需要在网上下载TeeChart控件TeeChart8.ocx(注意,我这里用的是vision8),将其复制到C:\WINDOWS\system32文件夹下,然后在“开始”中选择“运行”,输入“regsvr32 TeeChart8.ocx”确定,即完成了TeeChart控件的注册。
接下来在VC中“Project”→“Add to Project”→“Components and Controls”,选择Registered ActiveX Controls,找到TeeChart Pro Activex control v8,点击“Insert”,Close即可,这样在控件工具栏中就会出现,拖入对话框即可。这样就完成了TeeChart的插入工作。
下一步需要对TeeChart进行编辑。我当时就是因为没有添加Series导致程序始终出现问题(当然,如果,没有没有添加,可以用另外一种方法在程序中添加,不过麻烦一点)。点击“Edit Chart”进入编辑对话框。其中最为重要的是点击Add按钮,进入如下图所示界面:
如果没有出现这样的界面,可能是因为没有选中“3D”的原因。在这里面需要选择Point 3D,然后OK即可。如果希望改变点型或是颜色等属性,可以自己试一试进行修改,这并不难。编辑完成后的TeeChart控件如下图所示:
最后进入代码编写部分。先要将TeeChart控件关联到Dialog类的对象的成员变量,然后在OnInitDialog()函数中添加一行代码:
//显示3D效果
m_ctrChart1.GetAspect().SetView3D(TRUE);
需要在while循环最后添加添加如下代码:
//value[0]、value[1]、value[2]分别是三维方向上的X、Y、Z值
m_ctrChart1.Series(0).GetAsPoint3D().AddXYZ(value[0],value[1],value[2], NULL, RGB(255,0,0));
然后在fclose(fp_write)后面添加如下代码:
m_ctrChart1.GetLegend().SetVisible(FALSE); //隐藏图例
m_ctrChart1.GetAxis().GetDepth().SetVisible(TRUE); //显示Z轴
m_ctrChart1.GetAxis().GetDepth().GetLabels().SetVisible(TRUE); //显示Z轴上的坐标
m_ctrChart1.GetAxis().GetDepth().GetLabels().SetStyle(0); //设置显示坐标的风格
这样就完成了最后界面的设计,并能够显示出三维曲线图形!效果如下图:由于数据是某初始数据,因为基本处于静止,而三维曲线图也反映出这种情况。如果需要无点图,可以编辑控件使其不显示点。