mirror of
https://bitbucket.org/anguist/ntpa
synced 2026-09-24 18:01:31 +00:00
128 lines
3.6 KiB
C#
Executable File
128 lines
3.6 KiB
C#
Executable File
/*
|
||
* NPlot - A charting library for .NET
|
||
*
|
||
* PiePlot.cs
|
||
* Copyright (C) 2003-2006 Matt Howlett and others.
|
||
* All rights reserved.
|
||
*
|
||
* Redistribution and use in source and binary forms, with or without modification,
|
||
* are permitted provided that the following conditions are met:
|
||
*
|
||
* 1. Redistributions of source code must retain the above copyright notice, this
|
||
* list of conditions and the following disclaimer.
|
||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||
* this list of conditions and the following disclaimer in the documentation
|
||
* and/or other materials provided with the distribution.
|
||
* 3. Neither the name of NPlot nor the names of its contributors may
|
||
* be used to endorse or promote products derived from this software without
|
||
* specific prior written permission.
|
||
*
|
||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||
* IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
*/
|
||
|
||
/*
|
||
using System;
|
||
using System.Drawing;
|
||
|
||
namespace scpl
|
||
{
|
||
/// <summary>
|
||
/// Description résumée de PiePlot.
|
||
/// </summary>
|
||
public class PiePlot : BasePlot, IPlot
|
||
{
|
||
public PiePlot(ISequenceAdapter datas)
|
||
{
|
||
//
|
||
// TODO : ajoutez ici la logique du constructeur
|
||
//
|
||
this.Data=datas;
|
||
|
||
_brushes=new Brush[_MaxBrush];
|
||
|
||
_brushes[0] = Brushes.DarkBlue;
|
||
_brushes[1] = Brushes.Yellow;
|
||
_brushes[2] = Brushes.Green;
|
||
_brushes[3] = Brushes.Brown;
|
||
_brushes[4] = Brushes.Blue;
|
||
_brushes[5] = Brushes.Red;
|
||
_brushes[6] = Brushes.LightGreen;
|
||
_brushes[7] = Brushes.Salmon;
|
||
}
|
||
|
||
private ISequenceAdapter data_;
|
||
private double _Total;
|
||
const int _MaxBrush=8;
|
||
private Brush[] _brushes;
|
||
|
||
public ISequenceAdapter Data
|
||
{
|
||
get
|
||
{
|
||
return data_;
|
||
}
|
||
set
|
||
{
|
||
data_ = value;
|
||
|
||
// calculate the sum of all value (this is related to 360°)
|
||
_Total = 0;
|
||
for ( int i=0; i<data_.Count; ++i )
|
||
{
|
||
_Total += data_[i].Y;
|
||
}
|
||
}
|
||
}
|
||
|
||
#region SuggestXAxis
|
||
public virtual Axis SuggestXAxis()
|
||
{
|
||
return data_.SuggestXAxis();
|
||
}
|
||
#endregion
|
||
|
||
#region SuggestXAxis
|
||
public virtual Axis SuggestYAxis()
|
||
{
|
||
return data_.SuggestYAxis();
|
||
}
|
||
#endregion
|
||
|
||
public virtual void Draw( Graphics g, PhysicalAxis xAxis, PhysicalAxis yAxis )
|
||
{
|
||
int LastAngle=0,ReelAngle;
|
||
|
||
float rx=(xAxis.PhysicalMax.X - xAxis.PhysicalMin.X);
|
||
float ry=(yAxis.PhysicalMin.Y - yAxis.PhysicalMax.Y);
|
||
|
||
int h=(int) (ry * 0.8);
|
||
int w= (int) (rx * 0.8);
|
||
|
||
// This is to keep the pie based on a circle (i.e. inside a square)
|
||
int s=Math.Min(h,w);
|
||
|
||
// calculate boundary rectangle coordinate
|
||
int cy=(int) (yAxis.PhysicalMax.Y + (h * 1.2 - s) / 2);
|
||
int cx=(int) (xAxis.PhysicalMin.X + (w * 1.2 - s) / 2);
|
||
|
||
for (int i=0; i<this.Data.Count; ++i)
|
||
{
|
||
ReelAngle = (int) (data_[i].Y * 360 / _Total);
|
||
g.FillPie(_brushes[i % _MaxBrush], cx, cy, s, s, LastAngle, ReelAngle);
|
||
LastAngle += ReelAngle;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
*/
|
||
|