轉帖|其它|編輯:郝浩|2010-10-14 14:53:55.000|閱讀 3027 次
概述: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 TChartAxis(Chart1->CustomAxes);
Series=new TFastLineSeries(Chart1);
Chart1->AddSeries(Series);
Series->CustomVertAxis=Axis;
Tool=new TColorLineTool(Chart1);
Tool->Axis=Series->GetVertAxis ;
Tool->Pen->Color=clWhite;
Tool->AllowDrag=false;
Tool->Value=0;
Series->SeriesColor=(TColor)RGB(random(255),random(250),random(250));
Axis->LabelsFont->Color=clWhite;
Axis->Axis->Color=clWhite;
Series->AddXY(point,value,FloatToStr(point));
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->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-1020或023-66090381活動詳情://fc6vip.cn/zh-CN/Products_cn/TeeChart_chinese.html
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客轉載