ProEssentialsv5图表组件研究论文

时间:2022-03-20 02:18:00

导语:ProEssentialsv5图表组件研究论文一文来源于网友上传,不代表本站观点,若需要原创文章可咨询客服老师,欢迎参考。

ProEssentialsv5图表组件研究论文

1proessentialsv5简介:

ProEssentialsv5是于windows服务器端和客户端开发的一系列图表组件,它是对绘制图表以及图表功能所需要的数据和的简单封装。可以提供Winforms、Webforms、ActiveX、VCL和DLL五种界面。它的图表类型很多,包括:一般图表、图表、3维图表、极坐标图表、饼状图表,几乎覆盖了所有常见的图表类型论文。我们可以很方便的调用ProEssentialsv5的函数库,添加绘制图表的功能,并可以对图表进行分析,如:回归,求最大值,拟合曲线等。我们还可以很方便的将图表文件的数据文件进行保存,或者导出我们希望格式的图片,如bmp、jpg、png。注:一般图表与科学图表之间的区别在于,一般图表仅提供一维坐标数据绘图,而另一维坐标数据是等间距的。科学图表提供二维坐标数据,绘制任意的散点数据。

2具体应用方法:

(1)无论开发的是OCX的应用程序、DLL的应用程序还是VCL的应用程序,首先要做的就是根据开发环境的操作系统类型,拷贝PEGRP32C.DLL到相应的在本地硬盘系统盘中去。如果是win95或者win98操作系统,拷贝PEGRP32C.DLL到System目录下;如果是win2000操作系统,拷贝PEGRP32C.DLL到System32目录下。PEGRAPHS.HLP文件是可选的

(2)工程里面添加头文件Pegrpapi.h。

选择需要调用的函数,完成图表的绘制功能。在此简介,ProEssentialsv5函数和变量的命名规则。以PEP_为前缀的变量类型如下:

PEP_bBoolean(4bytes)

PEP_nInteger(4bytes)

PEP_dwDoubleWord(4bytes)

PEP_szNullTerminatedarrayofcharacters.

PEP_fSingle(4bytes)orDouble(8bytes)floatingpoint.

PEP_naArrayofInteger(4bytes)

PEP_dwaArrayofDoubleWord(4bytes)

PEP_szaArrayofNullTerminatedstrings.

PEP_faArrayofSingle(4bytes)orDouble(8bytes)floatingpoint.

PEP_structVariousstructures

要用DLL调用来设定获取以上变量类型的值,可以根据以上变量类型的前缀来判断应该:

PEP_bPEnset/PEnget

PEP_nPEnset/PEnget

PEP_dwPElset/PElget(16bit)PEnset/PEnget(32bit)

PEP_szPEszset/PEszget.

PEP_fPEvset/PEvget

PEP_naPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx

PEP_dwaPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx

PEP_szaPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx

PEP_faPEvset,PEvsetcell,PEvsetcellEx/PEvget,PEvgetcell,PEvgetcellEx

PEP_structPEvset,/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++中实现线型设定方法。

intnTmpStyles[3];

nTmpStyles[0]=PELT_THINSOLID;

nTmpStyles[1]=PELT_DASH;

nTmpStyles[2]=PELT_DOT;

PEvset(hPE,PEP_naSUBSETLINETYPES,nTmpStyles,3);

注:以上代码使用的Pevset()函数,也可以使用Pevsetcell()函数来实现线型的设定方法。代码如下:

intnTmpStyle;

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实现结果:

绘制了一个图表,带游标和坐标显示功能,以下函数分别实现基本图表功能和游标显示功能。

voidCPEView::CreateSimpleSGraph()

{

RECTrect;

GetClientRect(&rect)

m_hPE=PEcreate(PECONTROL_SGRAPH,WS_VISIBLE,&rect,m_hWnd,1001);

if(m_hPE)

{

floatfY;

floatfX;

//设置子集数和每个子集的点数//

PEnset(m_hPE,PEP_nSUBSETS,4);

PEnset(m_hPE,PEP_nPOINTS,12);

for(ints=0;s<=3;s++)

{for(intp=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,"ExampleData");

PEszset(m_hPE,PEP_szSUBTITLE,"");//nosubtitle

PEszset(m_hPE,PEP_szYAXISLABEL,"UnitsSold");

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

DWORDdwArray[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);

//子集点的线型

intnLineTypes[]={PELT_MEDIUMSOLID,PELT_MEDIUMSOLID,PELT_MEDIUMSOLID,PELT_MEDIUMSOLID};

PEvset(m_hPE,PEP_naSUBSETLINETYPES,nLineTypes,4);

//子集点的类型

intnPointTypes[]={PEPT_DOTSOLID,PEPT_UPTRIANGLESOLID,PEPT_SQUARESOLID,PEPT_DOWNTRIANGLESOLID};

PEvset(m_hPE,PEP_naSUBSETPOINTTYPES,nPointTypes,4)

//Version4.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);}

}

voidCPEView::CreateDataCursor()

{

CreateSimpleSGraph();

//创建游标//

PEnset(m_hPE,PEP_nCURSORMODE,PECM_DATACROSS);

//可以方便的查看数据点//

PEnset(m_hPE,PEP_bMARKDATAPOINTS,TRUE);

//可以点击数据点来移动游标//

PEnset(m_hPE,PEP_bMOUSECURSORCONTROL,TRUE);

PEnset(m_hPE,PEP_bALLOWDATAHOTSPOTS,TRUE);

//Cursorpromptingintopleftcorner//

PEnset(m_hPE,PEP_bCURSORPROMPTTRACKING,TRUE);

PEnset(m_hPE,PEP_nCURSORPROMPTSTYLE,PECPS_XYVALUES);

PEnset(m_hPE,PEP_nCURSORPROMPTLOCATION,PECPL_TOP_RIGHT);

//取消放大功能

PEnset(m_hPE,PEP_nALLOWZOOMING,PEAZ_NONE);

//其他可能的游标模式如下:

//PECM_NOCURSOR=0

//PECM_POINT=1

//PECM_DATACROSS=2

//PECM_DATASQUARE=3

//PECM_FLOATINGY=4

//PECM_FLOATINGXY=5

//注意:必须重新初始化

elseif((m_nLastSelection==105)&&(HIWORD(wp)==PEWN_CURSORMOVE))

{intnSubset,nPoint;

floatxvalue,yvalue;

charbuffer[64];

nSubset=PEnget(m_hPE,PEP_nCURSORSUBSET);

nPoint=PEnget(m_hPE,PEP_nCURSORPOINT);

PEvgetcellEx(m_hPE,PEP_faXDATA,nSubset,nPoint,&xvalue);

PEvgetcellEx(m_hPE,PEP_faYDATA,nSubset,nPoint,&yvalue);

sprintf(buffer,"Cursorat%d,%d=(%.2f,%.2f)",nSubset,nPoint,xvalue,yvalue);

CWnd*pParent=GetParent()->GetParent();

if(pParent){pParent->SetWindowText(buffer);}

pParent=AfxGetMainWnd();

if(pParent){pParent->SetWindowText("PEWN_CURSORMOVE");

returnTRUE;

}

}

以上代码在Win2000,VC6环境下调试通过。