1. 程式人生 > >ChartDirector 6.3(C ++版)教程分享——圖示餅圖

ChartDirector 6.3(C ++版)教程分享——圖示餅圖

ChartDirector是一款使用方便快捷、功能非常強大且互動性強的通用Web圖表元件。在Web伺服器以及嵌入式應用程式開發中,ChartDirector是一個非常理想的圖表工具,因為它擁有豐富的圖表圖形元件庫。

一、圖示餅圖(一)

此示例演示如何使用CDML和引數替換格式化在扇區標籤中包含圖示。它還演示了漸變背景顏色,標題的玻璃著色效果和圖表框的圓角。

  • 漸變背景顏色使用Chart.metalColor建立,藍色為基色,垂直方向。
  • 使用BaseChart.setRoundedFrame配置圓角框架。
  • 標題的玻璃著色效果使用Chart.glassEffect定義,然後使用標題TextBox物件的Box.setBackground應用於標題。
  • 使用BaseChart.addExtraField將圖示檔名作為額外欄位新增到圖表中。
  • 扇區標籤格式字串使用CDML和引數替換格式指定為:

    <* block,valign = absmiddle *> <* img = {field0} *> <* block *> {label} <* br *> {percent}%<* / *> <* / *>

    這意味著扇區標籤是一個塊,其中包含一個影象,後跟另一個文字塊。影象檔案取自額外欄位。文字塊包含兩行顯示扇區名稱和百分比。

  • 格式字串使用PieChart.setLabelFormat應用於圖表。
  • 對於Web應用程式,我們需要設定搜尋路徑以使用BaseChart.setSearchPath從當前指令碼目錄載入圖示影象。這是因為對於某些Web伺服器(例如IIS),預設的當前目錄不是指令碼目錄(例如,IIS使用IIS可執行目錄),因此需要顯式設定搜尋路徑。

原始碼清單

#include "chartdir.h"

int main(int argc, char *argv[])
{
    // The data for the pie chart
    double data[] = {72, 18, 15, 12};

    // The depths for the sectors
    double depths[] = {30, 20, 10, 10};

    // The labels for the pie chart
    const char *labels[] = {"Sunny", "Cloudy", "Rainy", "Snowy"};

    // The icons for the sectors
    const char *icons[] = {"sun.png", "cloud.png", "rain.png", "snowy.png"};

    // Create a PieChart object of size 400 x 310 pixels, with a blue (CCCCFF) vertical metal
    // gradient background, black border, 1 pixel 3D border effect and rounded corners
    PieChart *c = new PieChart(400, 310, Chart::metalColor(0xccccff, 0), 0x000000, 1);
    c->setRoundedFrame();

    // Set the center of the pie at (200, 180) and the radius to 100 pixels
    c->setPieSize(200, 180, 100);

    // Add a title box using 15pt Times Bold Italic font, on a blue (CCCCFF) background with glass
    // effect
    c->addTitle("Weather Profile in Wonderland", "timesbi.ttf", 15)->setBackground(0xccccff,
        0x000000, Chart::glassEffect());

    // Set the pie data and the pie labels
    c->setData(DoubleArray(data, (int)(sizeof(data) / sizeof(data[0]))), StringArray(labels, (int)(
        sizeof(labels) / sizeof(labels[0]))));

    // Add icons to the chart as a custom field
    c->addExtraField(StringArray(icons, (int)(sizeof(icons) / sizeof(icons[0]))));

    // Configure the sector labels using CDML to include the icon images
    c->setLabelFormat(
        "<*block,valign=absmiddle*><*img={field0}*> <*block*>{label}\n{percent}%<*/*><*/*>");

    // Draw the pie in 3D with variable 3D depths
    c->set3D(DoubleArray(depths, (int)(sizeof(depths) / sizeof(depths[0]))));

    // Set the start angle to 225 degrees may improve layout when the depths of the sector are
    // sorted in descending order, because it ensures the tallest sector is at the back.
    c->setStartAngle(225);

    // Output the chart
    c->makeChart("iconpie.png");

    //free up resources
    delete c;
    return 0;
}

二、圖示餅圖(二)

此示例擴充套件了Icon Pie Chart(1)示例,演示如何使用CDML在圖表標題,扇區標籤和繪製徽標中包含多種字型和顏色。它還演示了銀色背景顏色,圓角和標題的玻璃陰影效果。

  • 銀背景通過使用實現Chart.silverColor建立銀色,然後用它在PieChart.PieChart作為圖表背景顏色。
  • 使用BaseChart.setRoundedFrame配置圓角框架。
  • 包含多種字型和顏色的標題以CDML編寫,並使用BaseChart.addTitle新增到圖表中。
  • 標題的玻璃著色效果使用Chart.glassEffect定義,然後使用標題TextBox物件的Box.setBackground應用於標題。
  • 使用CDML設計的徽標使用BaseChart.addTitle2與BottomRight對齊新增到圖表中作為另一個標題。
  • 扇區標籤的圖示檔名使用BaseChart.addExtraField作為額外欄位新增到圖表中。
  • 扇區標籤格式字串使用CDML和引數替換和格式指定為:

    <* block,valign = absmiddle *> <* img = {field0} *> {label}({percent | 0}%)

    這意味著扇區標籤是一個塊,其中包含一個影象,後跟扇區名稱和百分比。影象檔案取自額外欄位。

  • 格式字串使用PieChart.setLabelFormat應用於圖表。
  • 對於Web應用程式,我們需要設定搜尋路徑以使用BaseChart.setSearchPath從當前指令碼目錄載入圖示影象。這是因為對於某些Web伺服器(例如IIS),預設的當前目錄不是指令碼目錄(例如,IIS使用IIS可執行目錄),因此需要顯式設定搜尋路徑。

原始碼清單

#include "chartdir.h"

int main(int argc, char *argv[])
{
    // The data for the pie chart
    double data[] = {28, 45, 5, 1, 12};

    // The labels for the pie chart
    const char *labels[] = {"Excellent", "Good", "Bad", "Very Bad", "Neutral"};

    // The icons for the sectors
    const char *icons[] = {"laugh.png", "smile.png", "sad.png", "angry.png", "nocomment.png"};

    // Create a PieChart object of size 560 x 300 pixels, with a silver background, black border, 1
    // pxiel 3D border effect and rounded corners
    PieChart *c = new PieChart(560, 300, Chart::silverColor(), 0x000000, 1);
    c->setRoundedFrame();

    // Set the center of the pie at (280, 150) and the radius to 120 pixels
    c->setPieSize(280, 150, 120);

    // Add a title box with title written in CDML, on a sky blue (A0C8FF) background with glass
    // effect
    c->addTitle(
        "<*block,valign=absmiddle*><*img=doc.png*> Customer Survey: "
        "<*font=timesi.ttf,color=000000*>Do you like our <*font,color=dd0000*>Hyper<*super*>TM"
        "<*/font*> molecules?", "timesbi.ttf", 15, 0x000080)->setBackground(0xa0c8ff, 0x000000,
        Chart::glassEffect());

    // Add a logo to the chart written in CDML as the bottom title aligned to the bottom right
    c->addTitle(Chart::BottomRight,
        "<*block,valign=absmiddle*><*img=molecule.png*> <*block*><*color=FF*>"
        "<*font=timesbi.ttf,size=12*>Molecular Engineering\n<*font=arial.ttf,size=10*>Creating "
        "better molecules");

    // Set the pie data and the pie labels
    c->setData(DoubleArray(data, (int)(sizeof(data) / sizeof(data[0]))), StringArray(labels, (int)(
        sizeof(labels) / sizeof(labels[0]))));

    // Set 3D style
    c->set3D();

    // Use the side label layout method
    c->setLabelLayout(Chart::SideLayout);

    // Set the label background color to transparent
    c->setLabelStyle()->setBackground(Chart::Transparent);

    // Add icons to the chart as a custom field
    c->addExtraField(StringArray(icons, (int)(sizeof(icons) / sizeof(icons[0]))));

    // Configure the sector labels using CDML to include the icon images
    c->setLabelFormat("<*block,valign=absmiddle*><*img={field0}*> {label} ({percent|0}%)");

    // Explode the 3rd and 4th sectors as a group (index = 2 and 3)
    c->setExplodeGroup(2, 3);

    // Set the start angle to 135 degrees may improve layout when there are many small sectors at
    // the end of the data array (that is, data sorted in descending order). It is because this
    // makes the small sectors position near the horizontal axis, where the text label has the least
    // tendency to overlap. For data sorted in ascending order, a start angle of 45 degrees can be
    // used instead.
    c->setStartAngle(135);

    // Output the chart
    c->makeChart("iconpie2.png");

    //free up resources
    delete c;
    return 0;
}

想要了解更多ChartDirector相關內容請點選這裡。