VC6中调用 ProEssentials v5图表组件实现科学图表绘制
作者:佚名; 更新时间:2014-12-05

1  ProEssentials v5简介:
ProEssentials v5是应用于windows 服务器端和客户端开发的一系列图表组件,它是对绘制图表以及图表分析功能所需要的数据和方法的简单封装。可以提供Winforms、Webforms、ActiveX、VCL和DLL五种界面。它的图表类型很多,包括:一般图表、科学图表、3维图表、极坐标图表、饼状图表,几乎覆盖了所有常见的图表类型。我们可以很方便的调用ProEssentials v5的函数库,添加绘制图表的功能,并可以对图表进行分析,如:回归,信捷职称论文写作发表网,求最大值,拟合曲线等。我们还可以很方便的将图表文件的数据文件进行保存,或者导出我们希望格式的图片,如bmp、jpg、png。注:一般图表与科学图表之间的区别在于,一般图表仅提供一维坐标数据绘图,而另一维坐标数据是等间距的。科学图表提供二维坐标数据,绘制任意的散点数据。
2  具体应用方法:
(1)无论开发的是OCX的应用程序、DLL的应用程序还是VCL的应用程序,首先要做的就是根据开发环境的操作系统类型,拷贝PEGRP32C.DLL到相应的在本地硬盘系统盘中去。如果是win95或者win98操作系统,拷贝PEGRP32C.DLL到System目录下;如果是win2000操作系统,拷贝PEGRP32C.DLL到System32目录下。PEGRAPHS.HLP文件是可选的
(2)工程里面添加头文件Pegrpapi.h。
选择需要调用的函数,完成图表的绘制功能。在此简介,ProEssentials v5函数和变量的命名规则。以PEP_为前缀的变量类型如下:
PEP_b      Boolean (4 bytes)
PEP_n      Integer (4 bytes)
PEP_dw      Double Word (4 bytes)
PEP_sz      Null Terminated array of characters.
PEP_f      Single (4 bytes) or Double (8 bytes) floating point.
PEP_na      Array of Integer (4 bytes)
PEP_dwa      Array of Double Word (4 bytes)
PEP_sza      Array of Null Terminated strings.
PEP_fa      Array of Single (4 bytes) or Double (8 bytes) floating point.
PEP_struct      Various structures
要用DLL调用来设定获取以上变量类型的值,可以根据以上变量类型的前缀来判断应该:
PEP_b      PEnset / PEnget
PEP_n      PEnset / PEnget
PEP_dw      PElset / PElget (16 bit)  PEnset / PEnget (32 bit)
PEP_sz      PEszset / PEszget.
PEP_f      PEvset / PEvget
PEP_na      PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell, PEvgetcellEx
PEP_dwa      PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell, PEvgetcellEx
PEP_sza      PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell, PEvgetcellEx
PEP_fa      PEvset, PEvsetcell, PEvsetcellEx / PEvget, PEvgetcell, PEvgetcellEx
PEP_struct      PEvset, / Pevget
(3)选择适当的变量,将数据赋予这些变量。
一般图表需要给PEP_faYDATA 、PEP_szaPOINTLABELS赋值。
科学图表和极坐标图表需要給PEP_faXDATA 、PEP_faYDATA和 PEP_faZDATA赋值。
3D的科学图表需要给PEP_faXDATA, PEP_faYDATA,  PEP_faZDATA赋值,但是3D的柱状图仅需要PEP_faYDATA。
饼状图用PEP_faXDATA 来控制“饼”的厚度,
有以下的几个DLL函数可以为图表赋值:
PEvset ():一次可以全部的完成所有数据的赋值。
PEvsetEx ():一次可以完成部分数据的赋值。.
Pevsetcell():一次仅可以为一维数据赋值。
PevsetcellEx():一次仅可以为一个点赋值。
因此Pevset()是最快的赋值方法。
(4)选择选择图表中线(点)颜色的方法
颜色是由PEP_dwaSUBSETCOLORS控制的,线型是由PEP_naSUBSETLINETYPES控制的,点型是由PEP_naSUBSETPOINTTYPES控制的。
以下代码是在C/C++中实现线型设定方法。
int nTmpStyles[3];
nTmpStyles[0] = PELT_THINSOLID;
nTmpStyles[1] = PELT_DASH;
nTmpStyles[2] = PELT_DOT;
PEvset(hPE, PEP_naSUBSETLINETYPES, nTmpStyles, 3);
注:以上代码使用的Pevset()函数,也可以使用Pevsetcell()函数来实现线型的设定方法。代码如下:
int nTmpStyle;
nTmpStyle = PELT_THINSOLID;
PEvsetcell(hPE, PEP_naSUBSETLINETYPES, 0, &nTmpStyle);
nTmpStyle = PELT_DASH;
PEvsetcell(hPE, PEP_naSUBSETLINETYPES, 1, &nTmpStyle);

nTmpStyle = PELT_DOT;
PEvsetcell(hPE, PEP_naSUBSETLINETYPES, 2, &nTmpStyle);
其他设定颜色和点类型的方法与以上方法类似,在此不再赘述。



3  实现结果:
绘制了一个科学图表,带游标和坐标显示功能,以下函数分别实现基本图表功能和游标显示功能。
void CPEView::CreateSimpleSGraph()
{
      RECT rect;
   GetClientRect( &rect )
 m_hPE = PEcreate(PECONTROL_SGRAPH, WS_VISIBLE, &rect, m_hWnd, 1001);
   if( m_hPE )
   {
       float fY;
       float fX;
       // 设置子集数和每个子集的点数 //
       PEnset(m_hPE, PEP_nSUBSETS, 4);     
       PEnset(m_hPE, PEP_nPOINTS, 12);     
       for( int s=0; s<=3; s++ )
       {           for( int p=0; p<=11; p++ )
           {                                                       
               fX = ((float) (p+1)) * 100.0F;
               PEvsetcellEx (m_hPE, PEP_faXDATA, s, p, &fX);
               fY = ((float) (p+1) * 1.0F) + GetRandom(1, 250);
               PEvsetcellEx (m_hPE, PEP_faYDATA, s, p, &fY);
           }
       }
       // 设置阴影
       PEnset(m_hPE, PEP_nDATASHADOWS, PEDS_SHADOWS);
       PEszset(m_hPE, PEP_szMAINTITLE, "Example Data");
       PEszset(m_hPE, PEP_szSUBTITLE, ""); // no subtitle
       PEszset(m_hPE, PEP_szYAXISLABEL, "Units Sold");
       PEszset(m_hPE, PEP_szXAXISLABEL, "Month");
       PEnset(m_hPE, PEP_bFOCALRECT, FALSE);
       PEnset(m_hPE, PEP_bPREPAREIMAGES, TRUE);
       PEnset(m_hPE, PEP_bCACHEBMP, TRUE);
       PEnset(m_hPE, PEP_nPLOTTINGMETHOD, PEGPM_POINTSPLUSSPLINE);
       PEnset(m_hPE, PEP_nGRIDLINECONTROL, PEGLC_NONE);
       PEnset(m_hPE, PEP_nALLOWZOOMING, PEAZ_HORZANDVERT);
       PEnset(m_hPE, PEP_nZOOMSTYLE, PEZS_RO2_NOT);
       // 子集的标识
       PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 0, "Texas" );
       PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 1, "Florida" );
       PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 2, "Washington" );
       PEvsetcell( m_hPE, PEP_szaSUBSETLABELS, 3, "California" );
       // 子集点的颜色s
       DWORD dwArray[4] = { RGB(198,0,0), RGB( 0, 198, 198 ), RGB( 198,198,0 ), RGB( 0,198,0 ) };
       PEvsetEx( m_hPE, PEP_dwaSUBSETCOLORS, 0, 4, dwArray, 0 );
       // 子集点的线型
       int nLineTypes[] = { PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, PELT_MEDIUMSOLID, PELT_MEDIUMSOLID };
       PEvset(m_hPE, PEP_naSUBSETLINETYPES, nLineTypes, 4);
       // 子集点的类型
       int nPointTypes[] = { PEPT_DOTSOLID, PEPT_UPTRIANGLESOLID, PEPT_SQUARESOLID, PEPT_DOWNTRIANGLESOLID };
       PEvset(m_hPE, PEP_naSUBSETPOINTTYPES, nPointTypes, 4)
       // Version 4.0 功能 //
       PEnset(m_hPE, PEP_bFIXEDFONTS, TRUE);
       PEnset(m_hPE, PEP_bSIMPLEPOINTLEGEND, TRUE);
       PEnset(m_hPE, PEP_bSIMPLELINELEGEND, TRUE);
       PEnset(m_hPE, PEP_nLEGENDSTYLE, PELS_1_LINE);
       PEnset(m_hPE, PEP_nMULTIAXISSTYLE, PEMAS_SEPARATE_AXES);
       // 设置其他属性 //
       PEnset(m_hPE, PEP_bBITMAPGRADIENTMODE, TRUE);
       PEnset(m_hPE, PEP_nQUICKSTYLE, PEQS_MEDIUM_NO_BORDER);
       PEnset(m_hPE, PEP_nGRADIENTBARS, 8);
       PEnset(m_hPE, PEP_nTEXTSHADOWS, PETS_BOLD_TEXT);
       PEnset(m_hPE, PEP_bMAINTITLEBOLD, TRUE);
       PEnset(m_hPE, PEP_bSUBTITLEBOLD, TRUE);
       PEnset(m_hPE, PEP_bLABELBOLD, TRUE);
       PEnset(m_hPE, PEP_bLINESHADOWS, TRUE);
       PEnset(m_hPE, PEP_nFONTSIZE, PEFS_LARGE);
       PEnset(m_hPE, PEP_bSCROLLINGHORZZOOM, TRUE);
   }
}
void CPEView::CreateDataCursor(
核心期刊快速发表
Copyright@2000-2030 论文期刊网 Corporation All Rights Reserved.
《中华人民共和国信息产业部》备案号:ICP备07016076号;《公安部》备案号:33010402003207
本网站专业、正规提供职称论文发表和写作指导服务,并收录了海量免费论文和数百个经国家新闻出版总署审批过的具有国内统一CN刊号与国际标准ISSN刊号的合作期刊,供诸位正确选择和阅读参考,免费论文版权归原作者所有,谨防侵权。联系邮箱:256081@163.com