ChartDirector 6.2 (.NET Edition)

Multi-Depth Pie Chart




This example demonstrates a 3D pie chart where sectors have different 3D heights.

Instead of using PieChart.set3D to set a single 3D depth for all sectors, in this example, PieChart.set3D2 is used to set different depths for the sectors with an array of integers.

Source Code Listing

[Windows Forms - C# version] NetWinCharts\CSharpWinCharts\multidepthpie.cs
using System;
using ChartDirector;

namespace CSharpChartExplorer
{
    public class multidepthpie : DemoModule
    {
        //Name of demo module
        public string getName() { return "Multi-Depth Pie Chart"; }

        //Number of charts produced in this demo module
        public int getNoOfCharts() { return 1; }

        //Main code for creating chart.
        //Note: the argument chartIndex is unused because this demo only has 1 chart.
        public void createChart(WinChartViewer viewer, int chartIndex)
        {
            // The data for the pie chart
            double[] data = {72, 18, 15, 12};

            // The labels for the pie chart
            string[] labels = {"Labor", "Machinery", "Facilities", "Computers"};

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

            // Create a PieChart object of size 360 x 300 pixels, with a light blue (DDDDFF)
            // background and a 1 pixel 3D border
            PieChart c = new PieChart(360, 300, 0xddddff, -1, 1);

            // Set the center of the pie at (180, 175) and the radius to 100 pixels
            c.setPieSize(180, 175, 100);

            // Add a title box using 15pt Times Bold Italic font and blue (AAAAFF) as background
            // color
            c.addTitle("Project Cost Breakdown", "Times New Roman Bold Italic", 15).setBackground(
                0xaaaaff);

            // Set the pie data and the pie labels
            c.setData(data, labels);

            // Draw the pie in 3D with variable 3D depths
            c.set3D2(depths);

            // 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
            viewer.Chart = c;

            //include tool tip for the chart
            viewer.ImageMap = c.getHTMLImageMap("clickable", "",
                "title='{label}: US${value}K ({percent}%)'");
        }
    }
}

[Windows Forms - VB Version] NetWinCharts\VBNetWinCharts\multidepthpie.vb
Imports System
Imports Microsoft.VisualBasic
Imports ChartDirector

Public Class multidepthpie
    Implements DemoModule

    'Name of demo module
    Public Function getName() As String Implements DemoModule.getName
        Return "Multi-Depth Pie Chart"
    End Function

    'Number of charts produced in this demo module
    Public Function getNoOfCharts() As Integer Implements DemoModule.getNoOfCharts
        Return 1
    End Function

    'Main code for creating chart.
    'Note: the argument chartIndex is unused because this demo only has 1 chart.
    Public Sub createChart(viewer As WinChartViewer, chartIndex As Integer) _
        Implements DemoModule.createChart

        ' The data for the pie chart
        Dim data() As Double = {72, 18, 15, 12}

        ' The labels for the pie chart
        Dim labels() As String = {"Labor", "Machinery", "Facilities", "Computers"}

        ' The depths for the sectors
        Dim depths() As Double = {30, 20, 10, 10}

        ' Create a PieChart object of size 360 x 300 pixels, with a light blue (DDDDFF) background
        ' and a 1 pixel 3D border
        Dim c As PieChart = New PieChart(360, 300, &Hddddff, -1, 1)

        ' Set the center of the pie at (180, 175) and the radius to 100 pixels
        c.setPieSize(180, 175, 100)

        ' Add a title box using 15pt Times Bold Italic font and blue (AAAAFF) as background color
        c.addTitle("Project Cost Breakdown", "Times New Roman Bold Italic", 15).setBackground( _
            &Haaaaff)

        ' Set the pie data and the pie labels
        c.setData(data, labels)

        ' Draw the pie in 3D with variable 3D depths
        c.set3D2(depths)

        ' 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
        viewer.Chart = c

        'include tool tip for the chart
        viewer.ImageMap = c.getHTMLImageMap("clickable", "", _
            "title='{label}: US${value}K ({percent}%)'")

    End Sub

End Class

[WPF - C#] NetWPFCharts\multidepthpie.cs
using System;
using ChartDirector;

namespace CSharpWPFDemo
{
    public class multidepthpie : DemoModule
    {
        //Name of demo module
        public string getName() { return "Multi-Depth Pie Chart"; }

        //Number of charts produced in this demo module
        public int getNoOfCharts() { return 1; }

        //Main code for creating chart.
        //Note: the argument chartIndex is unused because this demo only has 1 chart.
        public void createChart(WPFChartViewer viewer, int chartIndex)
        {
            // The data for the pie chart
            double[] data = {72, 18, 15, 12};

            // The labels for the pie chart
            string[] labels = {"Labor", "Machinery", "Facilities", "Computers"};

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

            // Create a PieChart object of size 360 x 300 pixels, with a light blue (DDDDFF)
            // background and a 1 pixel 3D border
            PieChart c = new PieChart(360, 300, 0xddddff, -1, 1);

            // Set the center of the pie at (180, 175) and the radius to 100 pixels
            c.setPieSize(180, 175, 100);

            // Add a title box using 15pt Times Bold Italic font and blue (AAAAFF) as background
            // color
            c.addTitle("Project Cost Breakdown", "Times New Roman Bold Italic", 15).setBackground(
                0xaaaaff);

            // Set the pie data and the pie labels
            c.setData(data, labels);

            // Draw the pie in 3D with variable 3D depths
            c.set3D2(depths);

            // 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
            viewer.Chart = c;

            //include tool tip for the chart
            viewer.ImageMap = c.getHTMLImageMap("clickable", "",
                "title='{label}: US${value}K ({percent}%)'");
        }
    }
}

[ASP.NET Web Forms - C# version] NetWebCharts\CSharpASP\multidepthpie.aspx
(Click here on how to convert this code to code-behind style.)
<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="ChartDirector" %>
<%@ Register TagPrefix="chart" Namespace="ChartDirector" Assembly="netchartdir" %>

<!DOCTYPE html>

<script runat="server">

//
// Page Load event handler
//
protected void Page_Load(object sender, EventArgs e)
{
    // The data for the pie chart
    double[] data = {72, 18, 15, 12};

    // The labels for the pie chart
    string[] labels = {"Labor", "Machinery", "Facilities", "Computers"};

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

    // Create a PieChart object of size 360 x 300 pixels, with a light blue (DDDDFF) background and
    // a 1 pixel 3D border
    PieChart c = new PieChart(360, 300, 0xddddff, -1, 1);

    // Set the center of the pie at (180, 175) and the radius to 100 pixels
    c.setPieSize(180, 175, 100);

    // Add a title box using 15pt Times Bold Italic font and blue (AAAAFF) as background color
    c.addTitle("Project Cost Breakdown", "Times New Roman Bold Italic", 15).setBackground(0xaaaaff);

    // Set the pie data and the pie labels
    c.setData(data, labels);

    // Draw the pie in 3D with variable 3D depths
    c.set3D2(depths);

    // 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
    WebChartViewer1.Image = c.makeWebImage(Chart.PNG);

    // Include tool tip for the chart
    WebChartViewer1.ImageMap = c.getHTMLImageMap("", "", "title='{label}: US${value}K ({percent}%)'"
        );
}

</script>

<html>
<body>
    <chart:WebChartViewer id="WebChartViewer1" runat="server" />
</body>
</html>

[ASP.NET Web Forms - VB Version] NetWebCharts\VBNetASP\multidepthpie.aspx
(Click here on how to convert this code to code-behind style.)
<%@ Page Language="VB" Debug="true" %>
<%@ Import Namespace="ChartDirector" %>
<%@ Register TagPrefix="chart" Namespace="ChartDirector" Assembly="netchartdir" %>

<!DOCTYPE html>

<script runat="server">

'
' Page Load event handler
'
Protected Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)

    ' The data for the pie chart
    Dim data() As Double = {72, 18, 15, 12}

    ' The labels for the pie chart
    Dim labels() As String = {"Labor", "Machinery", "Facilities", "Computers"}

    ' The depths for the sectors
    Dim depths() As Double = {30, 20, 10, 10}

    ' Create a PieChart object of size 360 x 300 pixels, with a light blue (DDDDFF) background and a
    ' 1 pixel 3D border
    Dim c As PieChart = New PieChart(360, 300, &Hddddff, -1, 1)

    ' Set the center of the pie at (180, 175) and the radius to 100 pixels
    c.setPieSize(180, 175, 100)

    ' Add a title box using 15pt Times Bold Italic font and blue (AAAAFF) as background color
    c.addTitle("Project Cost Breakdown", "Times New Roman Bold Italic", 15).setBackground(&Haaaaff)

    ' Set the pie data and the pie labels
    c.setData(data, labels)

    ' Draw the pie in 3D with variable 3D depths
    c.set3D2(depths)

    ' 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
    WebChartViewer1.Image = c.makeWebImage(Chart.PNG)

    ' Include tool tip for the chart
    WebChartViewer1.ImageMap = c.getHTMLImageMap("", "", _
        "title='{label}: US${value}K ({percent}%)'")

End Sub

</script>

<html>
<body>
    <chart:WebChartViewer id="WebChartViewer1" runat="server" />
</body>
</html>

[ASP.NET MVC - Controller] NetMvcCharts\Controllers\MultidepthpieController.cs
using System;
using System.Web.Mvc;
using ChartDirector;

namespace NetMvcCharts.Controllers
{
    public class MultidepthpieController : Controller
    {
        //
        // Default Action
        //
        public ActionResult Index()
        {
            ViewBag.Title = "Multi-Depth Pie Chart";
            createChart(ViewBag.Viewer = new RazorChartViewer(HttpContext, "chart1"));
            return View("~/Views/Shared/ChartView.cshtml");
        }

        //
        // Create chart
        //
        private void createChart(RazorChartViewer viewer)
        {
            // The data for the pie chart
            double[] data = {72, 18, 15, 12};

            // The labels for the pie chart
            string[] labels = {"Labor", "Machinery", "Facilities", "Computers"};

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

            // Create a PieChart object of size 360 x 300 pixels, with a light blue (DDDDFF) background
            // and a 1 pixel 3D border
            PieChart c = new PieChart(360, 300, 0xddddff, -1, 1);

            // Set the center of the pie at (180, 175) and the radius to 100 pixels
            c.setPieSize(180, 175, 100);

            // Add a title box using 15pt Times Bold Italic font and blue (AAAAFF) as background color
            c.addTitle("Project Cost Breakdown", "Times New Roman Bold Italic", 15).setBackground(
                0xaaaaff);

            // Set the pie data and the pie labels
            c.setData(data, labels);

            // Draw the pie in 3D with variable 3D depths
            c.set3D2(depths);

            // 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
            viewer.Image = c.makeWebImage(Chart.PNG);

            // Include tool tip for the chart
            viewer.ImageMap = c.getHTMLImageMap("", "", "title='{label}: US${value}K ({percent}%)'");
        }
    }
}

[ASP.NET MVC - View] NetMvcCharts\Views\Shared\ChartView.cshtml
@{ Layout = null; }

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
</head>
<body style="margin:5px 0px 0px 5px">
    <div style="font:bold 18pt verdana;">
        @ViewBag.Title
    </div>
    <hr style="border:solid 1px #000080" />
    <div>
        @{
            if (ViewBag.Viewer is Array)
            {
                // Display multiple charts
                for (int i = 0; i < ViewBag.Viewer.Length; ++i)
                {
                    @:@Html.Raw(ViewBag.Viewer[i].RenderHTML())
                }
            }
            else
            {
                // Display one chart only
                @:@Html.Raw(ViewBag.Viewer.RenderHTML())
            }
        }
    </div>
</body>
</html>