翻譯|使用教程|編輯:況魚杰|2019-08-07 11:43:30.170|閱讀 338 次
概述:本教程將會介紹圖表面板上的自定義繪圖。在TeeChart圖表內(nèi),通過TCanvas3D組件提供廣泛的定制繪圖設(shè)施,使用畫布您可以在圖表面板的任何位置添加形狀,線條和文本,并定義其顏色,筆和畫筆樣式。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
TeeChart for PHP包含100%的PHP源代碼。它支持PHP5及更高的版本。它可作為一個調(diào)色板組件整合到針對PHP的Delphi編程環(huán)境中,從而讓其他人在運行時以創(chuàng)建組件的方式來引用。第一個版本提供17種圖表類型(2D和3D的多種組合),11個數(shù)學(xué)函數(shù)和一些圖表工具組件以擴(kuò)展功能。
本教程是TeeChart for PHP教程中圖表面板上的自定義繪圖這一節(jié),這一節(jié)內(nèi)容主要介紹TeeChart Canvas。在此功能下面又分為繪圖線、Canvas筆和畫筆、添加2D形狀、添加3D形狀、添加文字和應(yīng)用實例。下面就開始介紹具體操作過程。
TeeChart Canvas
繪圖線
2D圖表
讓我們添加一個畫布線:
private function Load() {
$line1->fillSampleValues(20);
$line1->setVertAxis(VerticalAxis::$BOTH);
$line1->setHorizAxis(HorizontalAxis::$BOTH);
$tChart1->getAspect->setView3D(false);
}
public function chartEvent($e) {
if ($e instanceof AfterDrawEventArgs) {
$g = $tChart1->getGraphics3D();
$s = new TeePoint($tChart1->getAxes()->getLeft()->getPosition(), $tChart1->getAxes()->getTop()->getPosition());
$e = new TeePoint($tChart1->getAxes()->getRight()->getPosition(), $tChart1->getAxes()->getBottom()->getPosition());
$g->MoveTo($s);
$g->LineTo($e,0);
}
}3D圖表
在3D圖表上,由于3D正交位移,軸位置會偏離圖表區(qū)域,我們需要相應(yīng)地移動線路(在3D圖表的圖表區(qū)域中從左上角到右下角對角繪制線條):
private function Load() {
$line1->fillSampleValues(20);
$line1->setVertAxis(VerticalAxis::$BOTH);
$line1->setHorizAxis(HorizontalAxis::$BOTH);
$tChart1->getAspect->setChart3DPercent(50);
}
public function chartEvent(EventArgs e) {
if ($e instanceof AfterDrawEventArgs) {
$g = $tChart1->getGraphics3D();
$s = Point3D();
$s->x = $tChart1->getAxes()->getLeft()->getPosition();
$s->y = tChart1->getAxes()->getTop()->getPosition();
$s->z = 0;
C$e = Point3D();
$e->x = $tChart1->getAxes()->getRight()->getPosition();
$e->y = $tChart1->getAxes()->getBottom()->getPosition();
$e->z = $tChart1->getAspect()->width3D;
$g->moveTo($s);
$g->lineTo($e);
}
}Canvas筆和畫筆
上面呈現(xiàn)的線是使用在繪畫線之前繪制的最后一個對象時的筆和筆刷,那可能不是您想要的的效果,您可以自己定義(在繪制線之前定義筆):
public function chartEvent(EventArgs $e) {
if ($e instanceof AfterDrawEventArgs) {
$g = $tChart1->getGraphics3D();
$p5 = new TeePoint($line1->calcXPos(5), $line1->calcYPos(5));
$p15 = new TeePoint($line1->calcXPos(15), $line1->calcYPos(15));
$g->getPen()->setDashCap(DashCap::$SQUARE);
$g->getPen()->setEndCap(LineCap::$MITER);
$g->getPen()->setStyle(DashStyle::$DASHDOTDOT);
$g->getPen()->setTransparency(70);
$g->getPen()->setWidth(3);
$g->getPen()->setColor(Color::BLUE());
$g->moveTo($p5);
$g->lineTo($p15, 0);
}
}添加2D形狀
以與Canvas Lines類似的方式添加2D Canvas Shapes。以下示例在圖表區(qū)域的中心添加一個Rectangle:
2D圖表(2D圖表僅支持2D形狀)
public function chartEvent(EventArgs $e) {
if ($e instanceof AfterDrawEventArgs) {
$g = $tChart1->getGraphics3D();
$d = new Dimension(100,100);
$p = new TeePoint(((int)($g->getXCenter() - ($d->getWidth()/2))),((int)($g->getYCenter() - ($d->getHeight()/2))));
$r = new Rectangle($p,$d);
$g->getPen()->setColor(Color::CYAN());
$g->getBrush()->setColor(Color::BLUE());
$g->rectangle($r);
}
}3D圖表
在3D圖表上,您也可以在Z平面中移動矩形。此示例即將矩形放置在左側(cè)墻壁上,但將其移向圖表后部的中間位置(朝向后墻)。
private function Load() {
$point3D1->LinePen->Visible = false;
$point3D1->fillSampleValues(20);
$point3D1->setVertAxis(VerticalAxis::$BOTH);
$point3D1->setHorizAxis(HorizontalAxis::$BOTH);
$tChart1->getAspect->setChart3DPercent(50);
$tChart1->getAxes()->getDepth()->setVisible(true);
}
public function chartEvent(EventArgs $e) {
if ($e instanceof AfterDrawEventArgs) {
$g = $tChart1->getGraphics3D();
$d = new Dimension(100, 100);
$l = new TeePoint(((int)$tChart1->getAxes()->getLeft()->getPosition()),((int)(g->getYCenter() –
($d->getHeight() / 2))));
$r = new Rectangle($l,$d);
$g->getPen()->setColor(Color::CYAN());
$g->getBrush().setColor(Color::BLUE());
$g->rectangle($r, $tChart1->getAspect()->width3D/2);
}添加3D形狀
您可以將3D形狀添加到3D圖表中,此示例即在Chart矩形的中間繪制一個Cube:
private function Load() {
$point3D1->getLinePen()->setVisible(false);
$point3D1->fillSampleValues(20);
$tChart1->getAspect()->setChart3DPercent(50);
$tChart1->getLegend()->setVisible(false);
$tChart1->getAxes()->getDepth()->setVisible(true);
}
public function chartEvent(EventArgs $e) {
if (e instanceof AfterDrawEventArgs) {
IGraphics3D g = tChart1.getGraphics3D();
$d = new Dimension(50,50);
$p = new TeePoint(((int)($g->getXCenter() - ($d->getWidth()/2))),((int)($g->getYCenter() –
($d->getHeight()/2))));
$r = new Rectangle($p,$d);
$g->cube($r, 0, 20, true);
}
}添加文本
2D文本位置
將文本添加到最后一個Rectangle:
public function chartEvent(EventArgs $e) {
if (e instanceof AfterDrawEventArgs) {
$text = "My Text";
$g = $tChart1->getGraphics3D();
$d = new Dimension(150, 50);
$p = new TeePoint(((int)($g->getXCenter() - ($d->getWidth()/2))),((int)($g->getYCenter() –
($d->getHeight()/2))));
$r = new Rectangle($p,$d);
$g->getPen()->setColor(Color::BLUE());
$g->rectangle($r);
$g->textOut(((int)($g->getXCenter() - ($g->textWidth($text)/2))),
((int)($g->getYCenter() - ($g->textHeight($text)/2))), $text);
}
}3D文本位置
通過使用帶有Z坐標(biāo)的TextOut重載,可以將Text放置在不同的3D平面中。
private function Load() {
$point3D1->fillSampleValues(20);
$point3D1->getLinePen()->setVisible(false);
$tChart1->getAspect()->setChart3DPercent(50);
}
public function chartEvent(EventArgs $e) {
if ($e instanceof AfterDrawEventArgs) {
$text = "My Text";
$g = $tChart1->getGraphics3D();
$g->textOut($g->getXCenter(), $g->getYCenter(), $tChart1->getAspect()->width3D / 2, $text);
}
}應(yīng)用實例
此示例將會獲取系列的第3和第10個值,在它們之間繪制一條直線,并告訴我們新線的第一個和最后一個點的值以及它們之間的差異:
'First add some data to the empty Chart
Public function button1_Click();
begin
$Series1->FillSampleValues(20);
end;
private function Load() {
$tChart1->getAspect()->setView3D(false);
$line1->fillSampleValues(20);
}
public void chartEvent(EventArgs e) {
if ($e instanceof AfterDrawEventArgs) {
$g = $tChart1->getGraphics3D();
if($tChart1->getSeriesCount() > 0){
if($tChart1->getSeries(0)->getCount() > 10) {
$s = $tChart1->getSeries(0);
$h = $g->textHeight("H");
$p1 = new TeePoint($s->calcXPos(3), $s->calcYPos(3));
$p2 = new TeePoint($s->calcXPos(10), $s->calcYPos(10));
$g->getPen()->setColor(Color::BLUE());
$g->getPen()->setWidth(2);
$g->getPen()->setStyle(DashStyle::$DASH);
$g->moveTo($p1);
$g->lineTo($p2, 0);
$g->textOut($p1->x, $p1->y - $h, "Point value: " . $s->getYValues(3));
$g->textOut($p2->x, $p2->y, "Point value: " . $s.getYValues(10));
$g->textOut($p2->x, $p2->y + $h, "Change is: " + $s->getYValues(3) -
$s->getYValues(10));
}
}
}本節(jié)教程就到這里了,下一章我們將會介紹TeeChart for PHP的插件和附加功能。如果您有什么建議或者疑惑都可以在評論區(qū)留言或者聯(lián)系
TeeChart for .NET,TeeChart for JavaScript/HTML5,TeeChart for Xamarin.Android均已加入在線訂購,現(xiàn)在搶購可立享特別優(yōu)惠?。?!
關(guān)注慧聚IT微信公眾號???,了解產(chǎn)品的最新動態(tài)及最新資訊。

本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自: