189 lines
4.9 KiB
C#
189 lines
4.9 KiB
C#
//============================================================================
|
|
//ZedGraph Class Library - A Flexible Line Graph/Bar Graph Library in C#
|
|
//Copyright ?2004 John Champion
|
|
//
|
|
//This library is free software; you can redistribute it and/or
|
|
//modify it under the terms of the GNU Lesser General Public
|
|
//License as published by the Free Software Foundation; either
|
|
//version 2.1 of the License, or (at your option) any later version.
|
|
//
|
|
//This library is distributed in the hope that it will be useful,
|
|
//but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
//Lesser General Public License for more details.
|
|
//
|
|
//You should have received a copy of the GNU Lesser General Public
|
|
//License along with this library; if not, write to the Free Software
|
|
//Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
//=============================================================================
|
|
|
|
using System;
|
|
using Color = System.Drawing.Color;
|
|
|
|
namespace DrawGraph
|
|
{
|
|
/// <summary>
|
|
/// Class used to get the next color/symbol for GraphPane.AddCurve methods.
|
|
/// </summary>
|
|
///
|
|
/// <author> Jerry Vos modified by John Champion </author>
|
|
/// <version> $Revision: 3.4 $ $Date: 2006/06/24 20:26:43 $ </version>
|
|
public class ColorSymbolRotator
|
|
{
|
|
#region Static fields
|
|
/// <summary>
|
|
/// The <see cref="Color"/>s <see cref="ColorSymbolRotator"/>
|
|
/// rotates through.
|
|
/// </summary>
|
|
public static readonly Color[] COLORS = new Color[]
|
|
{
|
|
Color.Red,
|
|
Color.Blue,
|
|
Color.Green,
|
|
Color.Purple,
|
|
Color.Cyan,
|
|
Color.Pink,
|
|
Color.LightBlue,
|
|
Color.PaleVioletRed,
|
|
Color.SeaGreen,
|
|
Color.Yellow
|
|
};
|
|
|
|
/// <summary>
|
|
/// The <see cref="SymbolType"/>s <see cref="ColorSymbolRotator"/>
|
|
/// rotates through.
|
|
/// </summary>
|
|
public static readonly SymbolType[] SYMBOLS = new SymbolType[]
|
|
{
|
|
SymbolType.Circle,
|
|
SymbolType.Diamond,
|
|
SymbolType.Plus,
|
|
SymbolType.Square,
|
|
SymbolType.Star,
|
|
SymbolType.Triangle,
|
|
SymbolType.TriangleDown,
|
|
SymbolType.XCross,
|
|
SymbolType.HDash,
|
|
SymbolType.VDash
|
|
};
|
|
|
|
private static ColorSymbolRotator _staticInstance;
|
|
#endregion
|
|
|
|
#region Fields
|
|
/// <summary>
|
|
/// The index of the next color to be used. Note: may be
|
|
/// > COLORS.Length, it is reset to 0 on the next call if it is.
|
|
/// </summary>
|
|
protected int colorIndex = 0;
|
|
|
|
/// <summary>
|
|
/// The index of the next symbol to be used. Note: may be
|
|
/// > SYMBOLS.Length, it is reset to 0 on the next call if it is.
|
|
/// </summary>
|
|
protected int symbolIndex = 0;
|
|
#endregion
|
|
|
|
#region Properties
|
|
/// <summary>
|
|
/// Retrieves the next color in the rotation Calling this
|
|
/// method has the side effect of incrementing the color index.
|
|
/// <seealso cref="NextSymbol"/>
|
|
/// <seealso cref="NextColorIndex"/>
|
|
/// </summary>
|
|
public Color NextColor
|
|
{
|
|
get { return COLORS[NextColorIndex]; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieves the index of the next color to be used. Calling this
|
|
/// method has the side effect of incrementing the color index.
|
|
/// </summary>
|
|
public int NextColorIndex
|
|
{
|
|
get
|
|
{
|
|
if (colorIndex >= COLORS.Length)
|
|
colorIndex = 0;
|
|
|
|
return colorIndex++;
|
|
}
|
|
set
|
|
{
|
|
colorIndex = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieves the next color in the rotation. Calling this
|
|
/// method has the side effect of incrementing the symbol index.
|
|
/// <seealso cref="NextColor"/>
|
|
/// <seealso cref="NextSymbolIndex"/>
|
|
/// </summary>
|
|
public SymbolType NextSymbol
|
|
{
|
|
get { return SYMBOLS[NextSymbolIndex]; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieves the index of the next symbol to be used. Calling this
|
|
/// method has the side effect of incrementing the symbol index.
|
|
/// </summary>
|
|
public int NextSymbolIndex
|
|
{
|
|
get
|
|
{
|
|
if (symbolIndex >= SYMBOLS.Length)
|
|
symbolIndex = 0;
|
|
|
|
return symbolIndex++;
|
|
}
|
|
set
|
|
{
|
|
symbolIndex = value;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieves the <see cref="ColorSymbolRotator"/> instance used by the
|
|
/// static methods.
|
|
/// <seealso cref="StaticNextColor"/>
|
|
/// <seealso cref="StaticNextSymbol"/>
|
|
/// </summary>
|
|
public static ColorSymbolRotator StaticInstance
|
|
{
|
|
get
|
|
{
|
|
if (_staticInstance == null)
|
|
_staticInstance = new ColorSymbolRotator();
|
|
|
|
return _staticInstance;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieves the next color from this class's static
|
|
/// <see cref="ColorSymbolRotator"/> instance
|
|
/// <seealso cref="StaticInstance"/>
|
|
/// <seealso cref="StaticNextSymbol"/>
|
|
/// </summary>
|
|
public static Color StaticNextColor
|
|
{
|
|
get { return StaticInstance.NextColor; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Retrieves the next symbol type from this class's static
|
|
/// <see cref="ColorSymbolRotator"/> instance
|
|
/// <seealso cref="StaticInstance"/>
|
|
/// <seealso cref="StaticNextColor"/>
|
|
/// </summary>
|
|
public static SymbolType StaticNextSymbol
|
|
{
|
|
get { return StaticInstance.NextSymbol; }
|
|
}
|
|
#endregion
|
|
}
|
|
}
|