mirror of
https://bitbucket.org/anguist/ntpa
synced 2026-09-30 22:28:28 +00:00
Initial commit
This commit is contained in:
Executable
+126
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
Reference in New Issue
Block a user