彩票走势图

利用TeeChart动态绘制平面剖面图

转帖|其它|编辑:郝浩|2010-10-14 14:53:55.000|阅读 2990 次

概述:TeeChart Pro ActiveX是西班牙Steema SL公司开发的图表类控件,主要用来生成各种复杂的图表。它是一款行业领先的图表及图形报表工具,它从1997年开始不断更新并响应客户的需求,目前已经成为全球最具竞争力的图表产品之一。本文主要讲解如何利用TeeChart动态绘制平面剖面图。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  TeeChart Pro ActiveX是西班牙Steema SL公司开发的图表类控件,主要用来生成各种复杂的图表。它是一款行业领先的图表及图形报表工具,它从1997年开始不断更新并响应客户的需求,目前已经成为全球最具竞争力的图表产品之一。TeeChart Pro提供几百种2D和3D图表样式,40种数学统计学函数及无限数量的轴和22种选项板控件供选择。它为每一个控件及子控件提供了强大且全面的编辑器,使用户可以快速创建综合性的图表应用程序。这个图表编辑器通过TeeCommander控件(一个拥有图表特效按钮的工具条)得到了增强,其具有一键访问TeeChart Editors及共享功能。另外这个图表编辑器可在设计时和运行时使用。TeeChart Pro完全面向对象,并分为多个模块,从而缩小了可执行文件的尺寸,并使开发者可以根据自己的需要创建自定义分组模块。

  在工程上,常常要绘制平面等值线图、剖面图、表面图、平面剖面图等等,前三种图形可直接利用TeeChart绘制,而平面剖面图却不能直接绘制,本文简单介绍如何利用TeeChart动态绘制工程上的平面剖面图,其中编译环境为C++Builder 6.0,TeeChart版本为TeeChart.v8.01。(在安装C++ Builder6.0时并非此版本,用户可自行下载安装)。

  首先新建一工程,在Form1上添加一个Panel,一个Chart,一个按钮和一个OpenDialog,去掉Chart的3D效果,将Panel的Align属性设为“alTop”,将Chart的Align属性设为“alClient”,将按钮的Caption设为“打开数据”,用以打开数据文件。如下图所示:

  双击按钮,并在按钮的函数下写上如下代码:

#include "stdio.h"

int n=0;

void __fastcall TForm1::SpeedButton4Click(TObject *Sender)

{double maxvalue=-10000,minvalue=10000;

FILE *fp1;  

int line,linetmp=-1;double value; float point;

TChartAxis *Axis;

TFastLineSeries *Series;

TColorLineTool *Tool;

if(OpenDialog1->Execute())

{ if((fp1=fopen(OpenDialog1->FileName.c_str(),"r"))!=NULL)

 {  while(!feof(fp1))

  {if(fscanf(fp1,"%d%f%lf",&line,&point,&value)!=EOF)

   {  maxvalue=(value>maxvalue)?value:maxvalue;

      minvalue=(value<minvalue)?value:minvalue;

   if(line!=linetmp)

      {

     Axis=new&nbsp;TChartAxis(Chart1->CustomAxes);

   &nbsp; Series=new TFastLineSeries(Chart1);

     Chart1->AddSeries(Series);

    &nbsp;Series->CustomVertAxis=Axis;

 &nbsp;   Tool=new TColorLineTool(Chart1); 

     Tool->Axis=Series->GetVertAxis ; 

     Tool->Pen->Color=clWhite;

     Tool-&gt;AllowDrag=false;

     Tool->Value=0;

     

&nbsp;   Series->SeriesColor=(TColor)RGB(random(255),random(250),random(250));

 ;   Axis->LabelsFont->Color=clWhite;

    Axis->Axis->Color=clWhite;

  &nbsp; Series->AddXY(point,value,FloatToStr(point));

 &nbsp;&nbsp; Series->Title="Line"+IntToStr(line);

    linetmp=line;

    n=n+1;

   }

    else  Series->AddXY(point,value,FloatToStr(point));

   }

}

fclose(fp1);

for(int i=0;i<n;i++)

{Chart1->Series[n-i-1]->CustomVertAxis->StartPosition=(int)(100*i/n);

Chart1->Series[n-i-1]->CustomVertAxis-&gt;EndPosition=(int)(100*(i+1)/n);

Chart1->Series[i]->CustomVertAxis->Automatic=false;

Chart1->Series[i]->CustomVertAxis->Maximum=maxvalue;

Chart1->Series[i]->CustomVertAxis->Minimum=minvalue;

}

Chart1->MarginLeft=5;Chart1->MarginRight=0;

Chart1->MarginTop=2; Chart1->MarginBottom=2;

}

}       

}

//---------------------------------------------------------------------------

 编译运行,点按钮打开一个数据文件(此处要求数据为三列,分别为线号、点号、对应的值,且相同线号的数据连续排列),即可得到平面剖面图。

为了使背景和线条区分明显,可以将背景改为黑色,坐标改白色,为了实现更多的功能,可在其上加上其它功能的按钮,具体功能根据开发者的意愿添加。

如下图所示,并加上了其它一些功能,从左到右各个按钮的功能分别为:打开数据、复制图形、保存图形、打印图形、编辑图形、全部清除、放大、缩小、手绘任意线条、设置手绘线条颜色和粗细、打开辅助几何尺用以辅助画线、全屏浏览、是否显示横轴分隔线、是否分页显示、分页显示时每页显示的点数。图例上的复选框可以任意隐藏线条。

 

清除按钮下的代码如下:

//-----------------------------------------------------------------

int nn;

Chart1->RemoveAllSeries(); nn=n;n=0;

for(int i=0;i<nn;i++)

Chart1->Tools->Delete(3); //清除横轴分隔线

////在这里用Delete(3),而不是Delete(0);是因为有三个其它的ChartTool是    //之前就创建的,并非动态创建的,因此不用删掉,动态创建的只是ColorLine。

maxvalue=-10000;minvalue=10000;

//-------------------------------------------------------------------------

放大按钮下的代码如下:

float j=1;

void __fastcall TForm1::SpeedButton6Click(TObject *Sender)

{j=j+0.5;

for(int i=0;i<n;i++)

{Chart1->Series[n-i-1]->CustomVertAxis->StartPosition=(int)(j*100*i/n);

Chart1->Series[n-i-1]->CustomVertAxis->EndPosition=(int)(j*100*(i+1)/n);

}

}

//---------------------------------------------------------------------------

缩小按钮下的代码如下:

void __fastcall TForm1::SpeedButton7Click(TObject *Sender)

{if(j>1)

{j=j-0.5;

for(int i=0;i<n;i++)

{Chart1->Series[n-i-1]->CustomVertAxis->StartPosition=(int)(j*100*i/n);

Chart1->;Series[n-i-1]->CustomVertAxis->EndPosition=(int)(j*100*(i+1)/n);

}

}

}

//---------------------------------------------------------------------------

“横轴”复选框下的代码如下:

void __fastcall TForm1::CheckBox2Click(TObject *Sender)

{

if(!CheckBox2->Checked)

for(int i=3;i<n+3;i++)

Chart1->Tools->Items[i]->Active=false;

else

for(int i=3;i<n+3;i++)

Chart1->Tools->Items[i]->Active=true;

}

//---------------------------------------------------------------------------

其它按钮的功能在此不作说明了,相信读者已经会了。

    以上这种方法动态地地绘制线条,且没有数量限制,线条过多时,曲线起伏变小,区分不太明显,这时可以放大浏览,用鼠标右键可移动图形浏览。

    另外,有人用SeriesAfterDraw、SeriesBeforeDraw和ChartScroll等函数,可以通过ScrollBar上下移动线条,如下图所示。但用这种方法动态创建ChartTool、Axis和Series却不如上述方法容易,在此不作说明。

 

 

慧都2010促销季开幕,TeeChart for .NET 8折促销!详情咨询:400-700-1020023-66090381活动详情://pclwef.cn/zh-CN/Products_cn/TeeChart_chinese.html


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:博客转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP