PageRenderTime 5ms CodeModel.GetById 2ms app.highlight 1ms RepoModel.GetById 1ms app.codeStats 1ms

/Main/src/DynamicDataDisplay/Charts/Isolines/Enums.cs

#
C# | 67 lines | 47 code | 4 blank | 16 comment | 15 complexity | a87cc969d238b04061c4ffa43dc3f5c6 MD5 | raw file
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Text;
 5
 6namespace Microsoft.Research.DynamicDataDisplay.Charts.Isolines
 7{
 8	/// <summary>
 9	/// Edge identifier - indicates which side of cell isoline crosses.
10	/// </summary>
11	internal enum Edge
12	{
13		// todo check if everything is ok with None.
14		None = 0,
15		/// <summary>
16		/// Isoline crosses left boundary of cell (bit 0)
17		/// </summary>
18		Left = 1,
19		/// <summary>
20		/// Isoline crosses top boundary of cell (bit 1)
21		/// </summary>
22		Top = 2,
23		/// <summary>
24		/// Isoline crosses right boundary of cell (bit 2)
25		/// </summary>
26		Right = 4,
27		/// <summary>
28		/// Isoline crosses bottom boundary of cell (bit 3)
29		/// </summary>
30		Bottom = 8
31	}
32
33	[Flags]
34	internal enum CellBitmask
35	{
36		None = 0,
37		LeftTop = 1,
38		LeftBottom = 8,
39		RightBottom = 4,
40		RightTop = 2
41	}
42
43	internal static class IsolineExtensions
44	{
45		internal static bool IsDiagonal(this CellBitmask bitmask)
46		{
47			return bitmask == (CellBitmask.RightBottom | CellBitmask.LeftTop) ||
48				bitmask == (CellBitmask.LeftBottom | CellBitmask.RightTop);
49		}
50
51		internal static bool IsAppropriate(this SubCell sub, Edge edge)
52		{
53			switch (sub)
54			{
55				case SubCell.LeftBottom:
56					return edge == Edge.Left || edge == Edge.Bottom;
57				case SubCell.LeftTop:
58					return edge == Edge.Left || edge == Edge.Top;
59				case SubCell.RightBottom:
60					return edge == Edge.Right || edge == Edge.Bottom;
61				case SubCell.RightTop:
62				default:
63					return edge == Edge.Right || edge == Edge.Top;
64			}
65		}
66	}
67}