翻譯|使用教程|編輯:況魚杰|2019-08-07 11:43:30.170|閱讀 332 次
概述:本教程將會(huì)介紹圖表面板上的自定義繪圖。在TeeChart圖表內(nèi),通過TCanvas3D組件提供廣泛的定制繪圖設(shè)施,使用畫布您可以在圖表面板的任何位置添加形狀,線條和文本,并定義其顏色,筆和畫筆樣式。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
TeeChart for PHP包含100%的PHP源代碼。它支持PHP5及更高的版本。它可作為一個(gè)調(diào)色板組件整合到針對(duì)PHP的Delphi編程環(huán)境中,從而讓其他人在運(yùn)行時(shí)以創(chuàng)建組件的方式來引用。第一個(gè)版本提供17種圖表類型(2D和3D的多種組合),11個(gè)數(shù)學(xué)函數(shù)和一些圖表工具組件以擴(kuò)展功能。
本教程是TeeChart for PHP教程中圖表面板上的自定義繪圖這一節(jié),這一節(jié)內(nèi)容主要介紹TeeChart Canvas。在此功能下面又分為繪圖線、Canvas筆和畫筆、添加2D形狀、添加3D形狀、添加文字和應(yīng)用實(shí)例。下面就開始介紹具體操作過程。
TeeChart Canvas
繪圖線
2D圖表
讓我們添加一個(gè)畫布線:
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正交位移,軸位置會(huì)偏離圖表區(qū)域,我們需要相應(yīng)地移動(dòng)線路(在3D圖表的圖表區(qū)域中從左上角到右下角對(duì)角繪制線條):
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)的線是使用在繪畫線之前繪制的最后一個(gè)對(duì)象時(shí)的筆和筆刷,那可能不是您想要的的效果,您可以自己定義(在繪制線之前定義筆):
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ū)域的中心添加一個(gè)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平面中移動(dòng)矩形。此示例即將矩形放置在左側(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矩形的中間繪制一個(gè)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文本位置
將文本添加到最后一個(gè)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)用實(shí)例
此示例將會(huì)獲取系列的第3和第10個(gè)值,在它們之間繪制一條直線,并告訴我們新線的第一個(gè)和最后一個(gè)點(diǎn)的值以及它們之間的差異:
'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é)教程就到這里了,下一章我們將會(huì)介紹TeeChart for PHP的插件和附加功能。如果您有什么建議或者疑惑都可以在評(píng)論區(qū)留言或者聯(lián)系
TeeChart for .NET,TeeChart for JavaScript/HTML5,TeeChart for Xamarin.Android均已加入在線訂購(gòu),現(xiàn)在搶購(gòu)可立享特別優(yōu)惠!!!
關(guān)注慧聚IT微信公眾號(hào)???,了解產(chǎn)品的最新動(dòng)態(tài)及最新資訊。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: