Click here to Skip to main content
6,291,722 members and growing! (14,653 online)
Email Password   helpLost your password?
Desktop Development » Miscellaneous » Miscellaneous Controls     Intermediate

C# 3D Charting

By Vincent DUVERNET (Nolmë Informatique)

A simple article for easy charting.
C#, Windows, .NET 1.1, GDI+, WinForms, VS.NET2003, Dev
Posted:4 Oct 2005
Updated:24 May 2006
Views:98,471
Bookmarked:168 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
50 votes for this article.
Popularity: 7.52 Rating: 4.43 out of 5
3 votes, 6.0%
1

2
3 votes, 6.0%
3
13 votes, 26.0%
4
31 votes, 62.0%
5

Introduction

I want to begin with a special thanks to CodeProject for providing so many useful samples, and thanks especially to the author of this article: Customizing the .NET Panel control.

Background

If you know about the EBP products, then you'll remember their main board with a simple but cool isometric 3D chart. So, let's do the same here. All the code has been verified under Microsoft FxCop 1.35.

I'm not very comfortable in writing articles even in French, so English isn't better ;p.

Using the code

Let's see the creation code:

// Object declaration

Nolme.WinForms.Chart m_chartSample1;

// Create object

this.m_chartSample1 = new Nolme.WinForms.Chart(this.components);
this.m_chartSample1.BackColor = System.Drawing.Color.Silver;
this.m_chartSample1.BottomMargin = 20;
this.m_chartSample1.ColumnFont = new System.Drawing.Font(
                  "Arial", 8F, System.Drawing.FontStyle.Italic);
this.m_chartSample1.ColumnTitleFont = new System.Drawing.Font(
              "Arial", 10F, System.Drawing.FontStyle.Underline);
this.m_chartSample1.Curvature = 15;
this.m_chartSample1.DeltaDepth = 10;
this.m_chartSample1.DisplayHiddenSides = true;
this.m_chartSample1.DisplayTextOnColumns = true;
this.m_chartSample1.GradientMode = 
     System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.m_chartSample1.LeftMargin = 50;
this.m_chartSample1.LegendFont = new System.Drawing.Font(
                    "Arial", 11F, System.Drawing.FontStyle.Bold);
this.m_chartSample1.Location = new System.Drawing.Point(8, 8);
this.m_chartSample1.MainTitle = "Main title";
this.m_chartSample1.MainTitleFont = new System.Drawing.Font(
    "Arial", 16F, 
    ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | 
                          System.Drawing.FontStyle.Underline))));
this.m_chartSample1.MarginBetweenColumn = 20;
this.m_chartSample1.Name = "m_chartSample1";
this.m_chartSample1.RightMargin = 20;
this.m_chartSample1.Size = new System.Drawing.Size(456, 304);
this.m_chartSample1.TabIndex = 4;
this.m_chartSample1.TopMargin = 20;
this.m_chartSample1.VerticalAxisMaxValue = 10000;
this.m_chartSample1.VerticalAxisStep = 1000;

Adding a column to the chart is done with the following code:

ChartColumn column1 = 
    m_chartSample1.AddColumn (1500, 210, 0, 500);

Each number represents a sub-value in the new column. You can pass an integer array if you have more values.

You can set the column title like this:

column1.Title = "January";

Other attributes like the margins, main title, etc., can be changed.

There were two choices on the legend of the graph. We could either integrate the legend into the current panel, or make another independent object. The main intention is to provide a centralized unique legend if multiple charts are used on the same page.

To summarize, a Chart (derived from CustomPanel) contains one or more CharColumns. A ChartLegend is composed of CharLegendItems. There are as many CharLegendItems as sub-values in a CharColumn.

Points of interest

I've tried to make the code as simple as possible so that anyone can upgrade it.

Bug report

Nothing actually.

History

  • 2006-04-08
    • Thanks timbits214, changes have been done.
    • So, I've added a new mode for 'real time' rendering.
    • Chart.cs has a new method, ShiftLeft, to shift columns from one step to the left.
    • With these changes, ChartColumn integrates a default constructor and ResetValues.
  • 2006-03-31
    • The new version contains a new rendering mode: 3D with gradient.
    • Bug fixed: Left grid text starting at 0.
    • Bug fixed: Vertical axis auto-adjusts when min and max don't have the same digit numbers (100 and 1000, for example).
    • Bug fixed: Border drawings and optimization.
    • Bug fixed: Label on the column with negative values.
    • New function: DisplayBorders in ChartColumn.cs.
    • Some changes have been made in the function parameters list to support gradient drawing mode.
  • 2005-10-07
    • New version contains a new rendering mode. See the ChartRenderingMode enum.
    • Associated to this new mode, ChartCumulativeMode enum can define where a label on the column is placed.
    • Some changes have been made in the function parameters list.
  • 2005-10-08
    • Negative values are now managed.
    • The function AdjustVerticalAxis has been reviewed.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Vincent DUVERNET (Nolmë Informatique)


Member

Occupation: Web Developer
Location: France France

Other popular Miscellaneous articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 36 (Total in Forum: 36) (Refresh)FirstPrevNext
General3d chart plotting PinmemberFaysal1:16 26 Mar '08  
GeneralRe: 3d chart plotting PinmemberVincent DUVERNET (Nolmë Informatique)5:10 28 Mar '08  
GeneralRe: 3d chart plotting PinmemberFaysal16:08 28 Mar '08  
GeneralRe: 3d chart plotting PinmemberVincent DUVERNET (Nolmë Informatique)4:40 29 Mar '08  
GeneralWonderful ! PinmemberJulienV3:02 3 Sep '07  
Generallmd Pinmemberkurnikov7:36 11 Apr '07  
GeneralRe: lmd PinmemberVincent DUVERNET (Nolmë Informatique)9:24 13 Apr '07  
GeneralAdding control to VS? Pinmembermikemohr8:30 3 Nov '06  
GeneralRe: Adding control to VS? PinmemberVincent DUVERNET (Nolmë Informatique)12:30 3 Nov '06  
QuestionWhat about a web based solution? PinmemberMarcus D7:22 18 Oct '06  
AnswerRe: What about a web based solution? PinmemberVincent DUVERNET (Nolmë Informatique)8:16 18 Oct '06  
GeneralOne Suggession Pinmemberjayvardhanpatil23:48 28 Sep '06  
QuestionCool Pinmembertechno_adi21:14 29 Aug '06  
AnswerRe: Cool PinmemberVincent DUVERNET (Nolmë Informatique)22:09 29 Aug '06  
GeneralImpressive! PinmemberDanilo Corallo4:16 20 Jul '06  
GeneralNice Try PinmemberSendilkumar.M19:27 24 May '06  
GeneralVery Nice PinmemberPaul Conrad17:53 24 May '06  
GeneralSave & Print PinmemberChestah0:27 18 May '06  
GeneralRe: Save & Print PinmemberVincent DUVERNET (Nolmë Informatique)1:26 18 May '06  
JokeRe: Save & Print PinmemberChestah12:04 18 May '06  
Questionlicensing / usage query PinmemberSimonS6:18 11 Apr '06  
AnswerRe: licensing / usage query PinmemberVincent DUVERNET (Nolmë Informatique)8:04 11 Apr '06  
GeneralRe: licensing / usage query PinmemberSimonS8:15 11 Apr '06  
GeneralRe: licensing / usage query PinmemberVincent DUVERNET (Nolmë Informatique)8:38 11 Apr '06  
GeneralFlickering Pinmembertimbits21421:54 7 Apr '06  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 24 May 2006
Editor: Smitha Vijayan
Copyright 2005 by Vincent DUVERNET (Nolmë Informatique)
Everything else Copyright © CodeProject, 1999-2009
Web19 | Advertise on the Code Project