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
 | |
|     }
 | |
| 
 | |
| }
 |