轉(zhuǎn)帖|其它|編輯:郝浩|2010-10-14 14:53:55.000|閱讀 3027 次
概述:TeeChart Pro ActiveX是西班牙Steema SL公司開發(fā)的圖表類控件,主要用來生成各種復(fù)雜的圖表。它是一款行業(yè)領(lǐng)先的圖表及圖形報(bào)表工具,它從1997年開始不斷更新并響應(yīng)客戶的需求,目前已經(jīng)成為全球最具競爭力的圖表產(chǎn)品之一。本文主要講解如何利用TeeChart動(dòng)態(tài)繪制平面剖面圖。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
TeeChart Pro ActiveX是西班牙Steema SL公司開發(fā)的圖表類控件,主要用來生成各種復(fù)雜的圖表。它是一款行業(yè)領(lǐng)先的圖表及圖形報(bào)表工具,它從1997年開始不斷更新并響應(yīng)客戶的需求,目前已經(jīng)成為全球最具競爭力的圖表產(chǎn)品之一。TeeChart Pro提供幾百種2D和3D圖表樣式,40種數(shù)學(xué)統(tǒng)計(jì)學(xué)函數(shù)及無限數(shù)量的軸和22種選項(xiàng)板控件供選擇。它為每一個(gè)控件及子控件提供了強(qiáng)大且全面的編輯器,使用戶可以快速創(chuàng)建綜合性的圖表應(yīng)用程序。這個(gè)圖表編輯器通過TeeCommander控件(一個(gè)擁有圖表特效按鈕的工具條)得到了增強(qiáng),其具有一鍵訪問TeeChart Editors及共享功能。另外這個(gè)圖表編輯器可在設(shè)計(jì)時(shí)和運(yùn)行時(shí)使用。TeeChart Pro完全面向?qū)ο螅⒎譃槎鄠€(gè)模塊,從而縮小了可執(zhí)行文件的尺寸,并使開發(fā)者可以根據(jù)自己的需要?jiǎng)?chuàng)建自定義分組模塊。
在工程上,常常要繪制平面等值線圖、剖面圖、表面圖、平面剖面圖等等,前三種圖形可直接利用TeeChart繪制,而平面剖面圖卻不能直接繪制,本文簡單介紹如何利用TeeChart動(dòng)態(tài)繪制工程上的平面剖面圖,其中編譯環(huán)境為C++Builder 6.0,TeeChart版本為TeeChart.v8.01。(在安裝C++ Builder6.0時(shí)并非此版本,用戶可自行下載安裝)。
首先新建一工程,在Form1上添加一個(gè)Panel,一個(gè)Chart,一個(gè)按鈕和一個(gè)OpenDialog,去掉Chart的3D效果,將Panel的Align屬性設(shè)為“alTop”,將Chart的Align屬性設(shè)為“alClient”,將按鈕的Caption設(shè)為“打開數(shù)據(jù)”,用以打開數(shù)據(jù)文件。如下圖所示:
雙擊按鈕,并在按鈕的函數(shù)下寫上如下代碼:
#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;
}
}
}
//---------------------------------------------------------------------------
編譯運(yùn)行,點(diǎn)按鈕打開一個(gè)數(shù)據(jù)文件(此處要求數(shù)據(jù)為三列,分別為線號(hào)、點(diǎn)號(hào)、對應(yīng)的值,且相同線號(hào)的數(shù)據(jù)連續(xù)排列),即可得到平面剖面圖。
為了使背景和線條區(qū)分明顯,可以將背景改為黑色,坐標(biāo)改白色,為了實(shí)現(xiàn)更多的功能,可在其上加上其它功能的按鈕,具體功能根據(jù)開發(fā)者的意愿添加。
如下圖所示,并加上了其它一些功能,從左到右各個(gè)按鈕的功能分別為:打開數(shù)據(jù)、復(fù)制圖形、保存圖形、打印圖形、編輯圖形、全部清除、放大、縮小、手繪任意線條、設(shè)置手繪線條顏色和粗細(xì)、打開輔助幾何尺用以輔助畫線、全屏瀏覽、是否顯示橫軸分隔線、是否分頁顯示、分頁顯示時(shí)每頁顯示的點(diǎn)數(shù)。圖例上的復(fù)選框可以任意隱藏線條。
清除按鈕下的代碼如下:
//-----------------------------------------------------------------
int nn;
Chart1->RemoveAllSeries(); nn=n;n=0;
for(int i=0;i<nn;i++)
Chart1->Tools->Delete(3); //清除橫軸分隔線
////在這里用Delete(3),而不是Delete(0);是因?yàn)橛腥齻€(gè)其它的ChartTool是 //之前就創(chuàng)建的,并非動(dòng)態(tài)創(chuàng)建的,因此不用刪掉,動(dòng)態(tài)創(chuàng)建的只是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);
}
}
}
//---------------------------------------------------------------------------
“橫軸”復(fù)選框下的代碼如下:
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;
}
//---------------------------------------------------------------------------
其它按鈕的功能在此不作說明了,相信讀者已經(jīng)會(huì)了。
以上這種方法動(dòng)態(tài)地地繪制線條,且沒有數(shù)量限制,線條過多時(shí),曲線起伏變小,區(qū)分不太明顯,這時(shí)可以放大瀏覽,用鼠標(biāo)右鍵可移動(dòng)圖形瀏覽。
另外,有人用SeriesAfterDraw、SeriesBeforeDraw和ChartScroll等函數(shù),可以通過ScrollBar上下移動(dòng)線條,如下圖所示。但用這種方法動(dòng)態(tài)創(chuàng)建ChartTool、Axis和Series卻不如上述方法容易,在此不作說明。
慧都2010促銷季開幕,TeeChart for .NET 8折促銷!詳情咨詢:400-700-1020或023-66090381活動(dòng)詳情://fc6vip.cn/zh-CN/Products_cn/TeeChart_chinese.html
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:博客轉(zhuǎn)載