319 lines
10 KiB
C#

using System.Drawing;
namespace DevComponents.Instrumentation
{
public class Seg7Element : DigitalElement
{
public Seg7Element(NumericIndicator numIndicator)
: base(numIndicator, 7, 6)
{
}
#region RecalcSegments
public override void RecalcSegments()
{
CalcSegment0();
CalcSegment1();
CalcSegment2();
CalcSegment3();
CalcSegment4();
CalcSegment5();
CalcSegment6();
}
#region CalcSegment0
private void CalcSegment0()
{
Point[] pts = SegPoints[0];
pts[0].X = SegWidth + 1; pts[0].Y = 0;
pts[1].X = ElemWidth - SegWidth - 1; pts[1].Y = 0;
pts[2].X = ElemWidth - SegWidthHalf - 1; pts[2].Y = SegWidthHalf;
pts[3].X = pts[1].X; pts[3].Y = SegWidth;
pts[4].X = pts[0].X; pts[4].Y = SegWidth;
pts[5].X = SegWidthHalf + 1; pts[5].Y = pts[2].Y;
}
#endregion
#region CalcSegment1
private void CalcSegment1()
{
Point[] pts = SegPoints[1];
pts[0].X = 0; pts[0].Y = SegWidth + 1;
pts[1].X = SegWidthHalf; pts[1].Y = SegWidthHalf + 1;
pts[2].X = SegWidth; pts[2].Y = SegWidth + 1;
pts[3].X = SegWidth; pts[3].Y = ElemHeightHalf - SegWidthHalf - 1;
pts[4].X = 4; pts[4].Y = ElemHeightHalf - 1;
pts[5].X = 0; pts[5].Y = ElemHeightHalf - 1;
}
#endregion
#region CalcSegment2
private void CalcSegment2()
{
Point[] pts = SegPoints[2];
pts[0].X = ElemWidth - SegWidth; pts[0].Y = SegWidth + 1;
pts[1].X = ElemWidth - SegWidthHalf; pts[1].Y = SegWidthHalf + 1;
pts[2].X = ElemWidth; pts[2].Y = SegWidth + 1;
pts[3].X = ElemWidth; pts[3].Y = ElemHeightHalf - 1;
pts[4].X = ElemWidth - 4; pts[4].Y = ElemHeightHalf - 1;
pts[5].X = ElemWidth - SegWidth; pts[5].Y = ElemHeightHalf - SegWidthHalf - 1;
}
#endregion
#region CalcSegment3
private void CalcSegment3()
{
Point[] pts = SegPoints[3];
pts[0].X = SegWidth + 1; pts[0].Y = ElemHeightHalf - SegWidthHalf;
pts[1].X = ElemWidth - SegWidth - 1; pts[1].Y = ElemHeightHalf - SegWidthHalf;
pts[2].X = ElemWidth - 5; pts[2].Y = ElemHeightHalf;
pts[3].X = ElemWidth - SegWidth - 1; pts[3].Y = ElemHeightHalf + SegWidthHalf;
pts[4].X = SegWidth + 1; pts[4].Y = ElemHeightHalf + SegWidthHalf;
pts[5].X = 5; pts[5].Y = ElemHeightHalf;
}
#endregion
#region CalcSegment4
private void CalcSegment4()
{
Point[] pts = SegPoints[4];
pts[0].X = 0; pts[0].Y = ElemHeightHalf + 1;
pts[1].X = 4; pts[1].Y = ElemHeightHalf + 1;
pts[2].X = SegWidth; pts[2].Y = ElemHeightHalf + SegWidthHalf + 1;
pts[3].X = SegWidth; pts[3].Y = ElemHeight - SegWidth - 1;
pts[4].X = SegWidthHalf; pts[4].Y = ElemHeight - SegWidthHalf - 1;
pts[5].X = 0; pts[5].Y = ElemHeight - SegWidth - 1;
}
#endregion
#region CalcSegment5
private void CalcSegment5()
{
Point[] pts = SegPoints[5];
pts[0].X = ElemWidth - SegWidth; pts[0].Y = ElemHeightHalf + SegWidthHalf + 1;
pts[1].X = ElemWidth - 4; pts[1].Y = ElemHeightHalf + 1;
pts[2].X = ElemWidth; pts[2].Y = ElemHeightHalf + 1;
pts[3].X = ElemWidth; pts[3].Y = ElemHeight - SegWidth - 1;
pts[4].X = ElemWidth - SegWidthHalf; pts[4].Y = ElemHeight - SegWidthHalf - 1;
pts[5].X = ElemWidth - SegWidth; pts[5].Y = ElemHeight - SegWidth - 1;
}
#endregion
#region CalcSegment6
private void CalcSegment6()
{
Point[] pts = SegPoints[6];
pts[0].X = SegWidth + 1; pts[0].Y = ElemHeight - SegWidth;
pts[1].X = ElemWidth - SegWidth - 1; pts[1].Y = ElemHeight - SegWidth;
pts[2].X = ElemWidth - SegWidthHalf - 1; pts[2].Y = ElemHeight - SegWidthHalf;
pts[3].X = ElemWidth - SegWidth - 1; pts[3].Y = ElemHeight;
pts[4].X = SegWidth + 1; pts[4].Y = ElemHeight;
pts[5].X = SegWidthHalf + 1; pts[5].Y = ElemHeight - SegWidthHalf;
}
#endregion
#endregion
#region GetCharSegments
public override int GetDigitSegments(char value)
{
switch (value)
{
case '0': return ((int)Seg7Segments.Zero);
case '1': return ((int)Seg7Segments.One);
case '2': return ((int)Seg7Segments.Two);
case '3': return ((int)Seg7Segments.Three);
case '4': return ((int)Seg7Segments.Four);
case '5': return ((int)Seg7Segments.Five);
case '6': return ((int)Seg7Segments.Six);
case '7': return ((int)Seg7Segments.Seven);
case '8': return ((int)Seg7Segments.Eight);
case '9': return ((int)Seg7Segments.Nine);
case 'a': return ((int)Seg7Segments.a);
case 'b': return ((int)Seg7Segments.b);
case 'c': return ((int)Seg7Segments.c);
case 'd': return ((int)Seg7Segments.d);
case 'e': return ((int)Seg7Segments.e);
case 'f': return ((int)Seg7Segments.f);
case 'g': return ((int)Seg7Segments.g);
case 'h': return ((int)Seg7Segments.h);
case 'i': return ((int)Seg7Segments.i);
case 'j': return ((int)Seg7Segments.j);
case 'k': return ((int)Seg7Segments.k);
case 'l': return ((int)Seg7Segments.l);
case 'm': return ((int)Seg7Segments.m);
case 'n': return ((int)Seg7Segments.n);
case 'o': return ((int)Seg7Segments.o);
case 'p': return ((int)Seg7Segments.p);
case 'q': return ((int)Seg7Segments.q);
case 'r': return ((int)Seg7Segments.r);
case 's': return ((int)Seg7Segments.s);
case 't': return ((int)Seg7Segments.t);
case 'u': return ((int)Seg7Segments.u);
case 'v': return ((int)Seg7Segments.v);
case 'w': return ((int)Seg7Segments.w);
case 'x': return ((int)Seg7Segments.x);
case 'y': return ((int)Seg7Segments.y);
case 'z': return ((int)Seg7Segments.z);
case 'A': return ((int)Seg7Segments.A);
case 'B': return ((int)Seg7Segments.B);
case 'C': return ((int)Seg7Segments.C);
case 'D': return ((int)Seg7Segments.D);
case 'E': return ((int)Seg7Segments.E);
case 'F': return ((int)Seg7Segments.F);
case 'G': return ((int)Seg7Segments.G);
case 'H': return ((int)Seg7Segments.H);
case 'I': return ((int)Seg7Segments.I);
case 'J': return ((int)Seg7Segments.J);
case 'K': return ((int)Seg7Segments.K);
case 'L': return ((int)Seg7Segments.L);
case 'M': return ((int)Seg7Segments.M);
case 'N': return ((int)Seg7Segments.N);
case 'O': return ((int)Seg7Segments.O);
case 'P': return ((int)Seg7Segments.P);
case 'Q': return ((int)Seg7Segments.Q);
case 'R': return ((int)Seg7Segments.R);
case 'S': return ((int)Seg7Segments.S);
case 'T': return ((int)Seg7Segments.T);
case 'U': return ((int)Seg7Segments.U);
case 'V': return ((int)Seg7Segments.V);
case 'W': return ((int)Seg7Segments.W);
case 'X': return ((int)Seg7Segments.X);
case 'Y': return ((int)Seg7Segments.Y);
case 'Z': return ((int)Seg7Segments.Z);
case ' ': return ((int)Seg7Segments.Space);
case '-': return ((int)Seg7Segments.Dash);
case '=': return ((int)Seg7Segments.Equals);
case '(': return ((int)Seg7Segments.LParen);
case '}': return ((int)Seg7Segments.RParen);
case '[': return ((int)Seg7Segments.LBracket);
case ']': return ((int)Seg7Segments.RBracket);
case '_': return ((int)Seg7Segments.Underline);
// Add callout code to get pattern
default: return ((int)Seg7Segments.None);
}
}
#endregion
}
#region Enums
#region Seg7Segments
// ReSharper disable InconsistentNaming
public enum Seg7Segments : int
{
None = 0x0,
Zero = 0x77,
One = 0x24,
Two = 0x5D,
Three = 0x6D,
Four = 0x2E,
Five = 0x6B,
Six = 0x7B,
Seven = 0x25,
Eight = 0x7F,
Nine = 0x6F,
a = 0x7D,
b = 0x7A,
c = 0x58,
d = 0x7C,
e = 0x5F,
f = 0x1B,
g = 0x6F,
h = 0x3A,
i = 0x51,
j = 0x61,
k = 0x3E,
l = 0x50,
m = 0x31,
n = 0x38,
o = 0x78,
p = 0x1F,
q = 0x2F,
r = 0x18,
s = 0x6B,
t = 0x5A,
u = 0x70,
v = 0x70,
w = 0x46,
x = 0x3E,
y = 0x6E,
z = 0x5D,
A = 0x3F,
B = 0x7F,
C = 0x53,
D = 0x77,
E = 0x5B,
F = 0x1B,
G = 0x73,
H = 0x3E,
I = 0x24,
J = 0x74,
K = 0x3E,
L = 0x52,
M = 0x31,
N = 0x38,
O = 0x77,
P = 0x1F,
Q = 0x2F,
R = 0x13,
S = 0x6B,
T = 0x13,
U = 0x76,
V = 0x76,
W = 0x46,
X = 0x3E,
Y = 0x6E,
Z = 0x5D,
Space = 0x00,
Dash = 0x08,
Equals = 0x48,
LParen = 0x63,
RParen = 0x65,
LBracket = 0x63,
RBracket = 0x65,
Underline = 0x40,
}
// ReSharper restore InconsistentNaming
#endregion
#endregion
}