153 lines
3.7 KiB
C#
153 lines
3.7 KiB
C#
using System.Drawing;
|
|
|
|
namespace DevComponents.Instrumentation
|
|
{
|
|
internal class LabelPoint
|
|
{
|
|
#region Private variables
|
|
|
|
private Point _Point;
|
|
private float _Angle;
|
|
private double _Interval;
|
|
|
|
private bool _Visible = true;
|
|
|
|
#endregion
|
|
|
|
#region Public properties
|
|
|
|
#region Angle
|
|
|
|
public float Angle
|
|
{
|
|
get { return (_Angle); }
|
|
set { _Angle = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Point
|
|
|
|
public Point Point
|
|
{
|
|
get { return (_Point); }
|
|
set { _Point = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Interval
|
|
|
|
public double Interval
|
|
{
|
|
get { return (_Interval); }
|
|
set { _Interval = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Visible
|
|
|
|
public bool Visible
|
|
{
|
|
get { return (_Visible); }
|
|
set { _Visible = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region PaintRotatedLabel
|
|
|
|
public void PaintRotatedLabel(Graphics g,
|
|
string text, LabelLayout layout, int height, Brush br, Font font)
|
|
{
|
|
SizeF sz = g.MeasureString(text, font);
|
|
Size size = sz.ToSize();
|
|
|
|
Point pt = new Point(0, 0);
|
|
|
|
switch (layout.Placement)
|
|
{
|
|
case DisplayPlacement.Far:
|
|
pt.Y = -height / 2;
|
|
break;
|
|
|
|
case DisplayPlacement.Near:
|
|
pt.Y = height / 2;
|
|
break;
|
|
}
|
|
|
|
g.TranslateTransform(_Point.X, _Point.Y);
|
|
g.RotateTransform((_Angle + 90) % 360);
|
|
g.TranslateTransform(pt.X, pt.Y);
|
|
|
|
float fontAngle = layout.Angle;
|
|
|
|
if (layout.AutoOrientLabel == true)
|
|
{
|
|
if (((_Angle + layout.Angle) % 360) < 180)
|
|
fontAngle += 180;
|
|
}
|
|
|
|
g.RotateTransform(fontAngle);
|
|
|
|
g.DrawString(text, font, br,
|
|
new Point(-size.Width / 2, -size.Height / 2));
|
|
|
|
g.ResetTransform();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region PaintNonRotatedLabel
|
|
|
|
public void PaintNonRotatedLabel(Graphics g, string text,
|
|
LabelLayout layout, Point center, int radius, Brush br, Font font)
|
|
{
|
|
SizeF sz = g.MeasureString(text, font);
|
|
|
|
int x = _Point.X - center.X;
|
|
int y = _Point.Y - center.Y;
|
|
|
|
Point pt = new Point();
|
|
|
|
switch (layout.Placement)
|
|
{
|
|
case DisplayPlacement.Far:
|
|
{
|
|
int dx = (int)(((float)(x - radius) / (radius * 2)) * sz.Width);
|
|
int dy = (int)(((float)(y - radius) / (radius * 2)) * sz.Height);
|
|
|
|
pt = new Point(_Point.X + dx, _Point.Y + dy);
|
|
}
|
|
break;
|
|
|
|
case DisplayPlacement.Near:
|
|
{
|
|
int dx = (int)(((float)(x + radius) / (radius * 2)) * sz.Width);
|
|
int dy = (int)(((float)(y + radius) / (radius * 2)) * sz.Height);
|
|
|
|
pt = new Point(_Point.X - dx, _Point.Y - dy);
|
|
}
|
|
break;
|
|
|
|
case DisplayPlacement.Center:
|
|
{
|
|
int dx = (int)(sz.Width / 2);
|
|
int dy = (int)(sz.Height / 2);
|
|
|
|
pt = new Point(_Point.X - dx, _Point.Y - dy);
|
|
}
|
|
break;
|
|
}
|
|
|
|
g.DrawString(text, font, br, pt);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
}
|