private void DrawMajorTicksVert(FRPaintEventArgs e) { Graphics g = e.Graphics; Pen pen = e.Cache.GetPen(MajorTicks.Color, MajorTicks.Width * e.ScaleX, DashStyle.Solid); Brush brush = TextFill.CreateBrush(new RectangleF(Parent.AbsLeft * e.ScaleX, Parent.AbsTop * e.ScaleY, Parent.Width * e.ScaleX, Parent.Height * e.ScaleY), e.ScaleX, e.ScaleY); float y = top + height; float x1 = left; float x2 = left + width; float step = height / (majorTicksNum - 1); int textStep = (int)((Parent.Maximum - Parent.Minimum) / (majorTicksNum - 1)); Font font = e.Cache.GetFont(Font.Name, Parent.IsPrinting ? Font.Size : Font.Size * e.ScaleX * 96f / DrawUtils.ScreenDpi, Font.Style); string text = Parent.Minimum.ToString(); for (int i = 0; i < majorTicksNum; i++) { g.DrawLine(pen, x1, y, x2, y); SizeF strSize = g.MeasureString(text, Font); float x3 = x1 - strSize.Width * e.ScaleX - 0.04f * Units.Centimeters * e.ScaleX; if ((Parent as LinearGauge).Inverted) { x3 = x2 + 0.04f * Units.Centimeters * e.ScaleX; } g.DrawString(text, font, brush, x3, y - strSize.Height / 2 * e.ScaleY); text = Convert.ToString(textStep * (i + 1) + Parent.Minimum); y -= step; } brush.Dispose(); }
private void DrawMajorTicksHorz(FRPaintEventArgs e) { Graphics g = e.Graphics; Pen pen = e.Cache.GetPen(MajorTicks.Color, MajorTicks.Width * e.ScaleX, DashStyle.Solid); Brush brush = TextFill.CreateBrush(new RectangleF(Parent.AbsLeft * e.ScaleX, Parent.AbsTop * e.ScaleY, Parent.Width * e.ScaleX, Parent.Height * e.ScaleY), e.ScaleX, e.ScaleY); float x = left; float y1 = top; float y2 = top + height; float step = width / (majorTicksNum - 1); int textStep = (int)((Parent.Maximum - Parent.Minimum) / (majorTicksNum - 1)); Font font = e.Cache.GetFont(Font.Name, Parent.IsPrinting ? Font.Size : Font.Size * e.ScaleX * 96f / DrawUtils.ScreenDpi, Font.Style); string text = Parent.Minimum.ToString(); float y3 = y1 - 0.4f * Units.Centimeters * e.ScaleY; if ((Parent as LinearGauge).Inverted) { y3 = y2 - g.MeasureString(text, Font).Height + 0.4f * Units.Centimeters * e.ScaleY; } for (int i = 0; i < majorTicksNum; i++) { g.DrawLine(pen, x, y1, x, y2); SizeF strSize = g.MeasureString(text, Font); g.DrawString(text, font, brush, x - strSize.Width / 2 * e.ScaleX, y3); text = Convert.ToString(textStep * (i + 1) + Parent.Minimum); x += step; } brush.Dispose(); }
private void DrawMajorTicksVert(FRPaintEventArgs e) { IGraphics g = e.Graphics; Pen pen = e.Cache.GetPen(MajorTicks.Color, MajorTicks.Width * e.ScaleY, DashStyle.Solid); Brush brush = TextFill.CreateBrush(new RectangleF(Parent.AbsLeft * e.ScaleX, Parent.AbsTop * e.ScaleY, Parent.Width * e.ScaleX, Parent.Height * e.ScaleY), e.ScaleX, e.ScaleY); pointerWidthOffset = (Parent.Pointer as SimplePointer).Width / 2 + Parent.Pointer.BorderWidth * 2 * e.ScaleX; float y = top + height; float x1 = left; float x2 = left + width / 2 - pointerWidthOffset; float x3 = left + width / 2 + pointerWidthOffset; float x4 = left + width; float step = height / (majorTicksNum - 1); int textStep = (int)((Parent.Maximum - Parent.Minimum) / (majorTicksNum - 1)); Font font = e.Cache.GetFont(Font.Name, Parent.IsPrinting ? Font.Size : Font.Size * e.ScaleX * 96f / DrawUtils.ScreenDpi, Font.Style); string text = Parent.Minimum.ToString(); if (firstSubScale.Enabled) { for (int i = 0; i < majorTicksNum; i++) { g.DrawLine(pen, x1, y, x2, y); if (firstSubScale.ShowCaption) { SizeF strSize = g.MeasureString(text, Font); g.DrawString(text, font, brush, x1 - strSize.Width * e.ScaleX / (DrawUtils.ScreenDpi / 96f) - 0.04f * Units.Centimeters * e.ScaleX, y - strSize.Height / 2 * e.ScaleY / (DrawUtils.ScreenDpi / 96f)); text = Convert.ToString(textStep * (i + 1) + Parent.Minimum); } y -= step; } } y = top + height; text = Parent.Minimum.ToString(); if (secondSubScale.Enabled) { for (int i = 0; i < majorTicksNum; i++) { g.DrawLine(pen, x3, y, x4, y); if (secondSubScale.ShowCaption) { SizeF strSize = g.MeasureString(text, Font); g.DrawString(text, font, brush, x4 + 0.04f * Units.Centimeters * e.ScaleX, y - strSize.Height / 2 * e.ScaleY / (DrawUtils.ScreenDpi / 96f)); text = Convert.ToString(textStep * (i + 1) + Parent.Minimum); } y -= step; } } brush.Dispose(); }
private void DrawMajorTicksHorz(FRPaintEventArgs e) { IGraphics g = e.Graphics; Pen pen = e.Cache.GetPen(MajorTicks.Color, MajorTicks.Width * e.ScaleX, DashStyle.Solid); Brush brush = TextFill.CreateBrush(new RectangleF(Parent.AbsLeft, Parent.AbsTop, Parent.Width, Parent.Height), e.ScaleX, e.ScaleY); pointerHeightOffset = (Parent.Pointer as SimplePointer).Height / 2 + Parent.Pointer.BorderWidth * 2 * e.ScaleY; float x = left; float y1 = top; float y2 = top + height / 2 - pointerHeightOffset; float y3 = top + height / 2 + pointerHeightOffset; float y4 = top + height; float step = width / (majorTicksNum - 1); int textStep = (int)((Parent.Maximum - Parent.Minimum) / (majorTicksNum - 1)); Font font = e.Cache.GetFont(Font.Name, Parent.IsPrinting ? Font.Size : Font.Size * e.ScaleX * 96f / DrawUtils.ScreenDpi, Font.Style); string text = Parent.Minimum.ToString(); if (firstSubScale.Enabled) { for (int i = 0; i < majorTicksNum; i++) { g.DrawLine(pen, x, y1, x, y2); if (firstSubScale.ShowCaption) { SizeF strSize = g.MeasureString(text, Font); g.DrawString(text, font, brush, x - strSize.Width / 2 * e.ScaleX / (DrawUtils.ScreenDpi / 96f), y1 - 0.4f * Units.Centimeters * e.ScaleY); text = Convert.ToString(textStep * (i + 1) + Parent.Minimum); } x += step; } } x = left; text = Parent.Minimum.ToString(); if (secondSubScale.Enabled) { for (int i = 0; i < majorTicksNum; i++) { g.DrawLine(pen, x, y3, x, y4); if (secondSubScale.ShowCaption) { SizeF strSize = g.MeasureString(text, Font); g.DrawString(text, font, brush, x - strSize.Width / 2 * e.ScaleX / (DrawUtils.ScreenDpi / 96f), y4 + 0.08f * Units.Centimeters * e.ScaleY); text = Convert.ToString(textStep * (i + 1) + Parent.Minimum); } x += step; } } brush.Dispose(); }
private void DrawMajorTicks(FRPaintEventArgs e) { center = (Parent as RadialGauge).Center; stepValue = (Parent.Maximum - Parent.Minimum) / (MajorTicks.Count - 1); if (RadialUtils.IsQuadrant(Parent)) { stepValue *= 2; } avrValue = Parent.Minimum + (Parent.Maximum - Parent.Minimum) / 2; bool isRightPart = true; bool isLeftPart = false; PointF txtPoint; Graphics g = e.Graphics; Pen pen = e.Cache.GetPen(MajorTicks.Color, MajorTicks.Width * e.ScaleX, DashStyle.Solid); Brush brush = TextFill.CreateBrush(new RectangleF(Parent.AbsLeft * e.ScaleX, Parent.AbsTop * e.ScaleY, Parent.Width * e.ScaleX, Parent.Height * e.ScaleY), e.ScaleX, e.ScaleY); sideTicksCount = (MajorTicks.Count - 1) / 2; MajorTicks.Length = width / 12; SizeF maxTxt = RadialUtils.GetStringSize(e, Parent, Font, Parent.Maximum.ToString()); SizeF minTxt = RadialUtils.GetStringSize(e, Parent, Font, Parent.Minimum.ToString()); float maxTxtOffset = maxTxt.Height > maxTxt.Width ? maxTxt.Height : maxTxt.Width; float minTxtOffset = minTxt.Height > minTxt.Width ? minTxt.Height : minTxt.Width; majorTicksOffset = maxTxtOffset > minTxtOffset ? maxTxtOffset : minTxtOffset; PointF[] tick0 = new PointF[2]; avrTick = new PointF(left + width / 2, top + majorTicksOffset); //first tick tick0[0] = avrTick; tick0[1] = new PointF(tick0[0].X, tick0[0].Y + MajorTicks.Length); double angle = 0; HorAlign horAlign = HorAlign.Middle; VertAlign vertAlign = VertAlign.Bottom; double startValue = avrValue; if (RadialUtils.IsSemicircle(Parent)) { drawRight = true; drawLeft = true; if (RadialUtils.IsBottom(Parent)) { angle = 180 * RadialGauge.Radians; horAlign = HorAlign.Middle; vertAlign = VertAlign.Top; majorStep *= -1; isRightPart = true; isLeftPart = false; } else if (RadialUtils.IsLeft(Parent)) { angle = -90 * RadialGauge.Radians; horAlign = HorAlign.Right; vertAlign = VertAlign.Middle; isRightPart = false; isLeftPart = false; } else if (RadialUtils.IsRight(Parent)) { angle = 90 * RadialGauge.Radians; horAlign = HorAlign.Left; vertAlign = VertAlign.Middle; majorStep *= -1; isRightPart = true; //false isLeftPart = true; // false } } else if (RadialUtils.IsQuadrant(Parent)) { if (RadialUtils.IsTop(Parent) && RadialUtils.IsLeft(Parent)) { startValue = Parent.Maximum; //angle = 180 * RadialGauge.Radians; horAlign = HorAlign.Middle; vertAlign = VertAlign.Bottom; //majorStep *= -1; //isRightPart = true; //isLeftPart = false; drawRight = false; drawLeft = true; isRightPart = false; isLeftPart = false; } else if (RadialUtils.IsBottom(Parent) && RadialUtils.IsLeft(Parent)) { startValue = Parent.Minimum; angle = 180 * RadialGauge.Radians; horAlign = HorAlign.Middle; vertAlign = VertAlign.Top; drawRight = true; drawLeft = false; isRightPart = false; isLeftPart = false; } else if (RadialUtils.IsTop(Parent) && RadialUtils.IsRight(Parent)) { stepValue *= -1; startValue = Parent.Maximum; angle = 0; horAlign = HorAlign.Middle; vertAlign = VertAlign.Bottom; drawRight = true; drawLeft = false; isRightPart = true; isLeftPart = true; } else if (RadialUtils.IsBottom(Parent) && RadialUtils.IsRight(Parent)) { stepValue *= -1; startValue = Parent.Minimum; angle = 180 * RadialGauge.Radians; horAlign = HorAlign.Middle; vertAlign = VertAlign.Top; drawRight = false; drawLeft = true; isRightPart = true; isLeftPart = true; } } else { drawRight = true; drawLeft = true; } tick0 = RadialUtils.RotateVector(tick0, angle, center); g.DrawLine(pen, tick0[0].X, tick0[0].Y, tick0[1].X, tick0[1].Y); string text = startValue.ToString(); DrawText(e, text, brush, tick0[0].X, tick0[0].Y, horAlign, vertAlign); //rest of ticks PointF[] tick = new PointF[2]; angle = majorStep * RadialGauge.Radians; for (int i = 0; i < sideTicksCount; i++) { //right side if (drawRight) { tick = RadialUtils.RotateVector(tick0, angle, center); g.DrawLine(pen, tick[0].X, tick[0].Y, tick[1].X, tick[1].Y); text = Convert.ToString(Math.Round(startValue + stepValue * (i + 1))); if (i == sideTicksCount / 2) { if (RadialUtils.IsSemicircle(Parent) || RadialUtils.IsQuadrant(Parent)) { if (RadialUtils.IsLeft(Parent) && RadialUtils.IsTop(Parent)) { horAlign = HorAlign.Right; vertAlign = VertAlign.Middle; } else if (RadialUtils.IsLeft(Parent) && RadialUtils.IsBottom(Parent)) { horAlign = HorAlign.Right; vertAlign = VertAlign.Middle; } else if (RadialUtils.IsRight(Parent) && RadialUtils.IsTop(Parent)) { horAlign = HorAlign.Left; vertAlign = VertAlign.Middle; } else if (RadialUtils.IsLeft(Parent)) { horAlign = HorAlign.Middle; vertAlign = VertAlign.Bottom; } else if (RadialUtils.IsRight(Parent)) { horAlign = HorAlign.Middle; vertAlign = VertAlign.Bottom; } else { horAlign = HorAlign.Left; vertAlign = VertAlign.Middle; } } else { horAlign = HorAlign.Left; vertAlign = VertAlign.Middle; } } else if (i < sideTicksCount / 2) { horAlign = HorAlign.Left; if (RadialUtils.IsSemicircle(Parent) || RadialUtils.IsQuadrant(Parent)) { if (RadialUtils.IsLeft(Parent) && RadialUtils.IsTop(Parent)) { horAlign = HorAlign.Right; vertAlign = VertAlign.Middle; } if (RadialUtils.IsLeft(Parent) && RadialUtils.IsBottom(Parent)) { vertAlign = VertAlign.Top; horAlign = HorAlign.Right; } else if (RadialUtils.IsBottom(Parent)) { vertAlign = VertAlign.Top; } else if (RadialUtils.IsLeft(Parent)) { horAlign = HorAlign.Right; vertAlign = VertAlign.Bottom; } else if (RadialUtils.IsRight(Parent)) { horAlign = HorAlign.Left; vertAlign = VertAlign.Bottom; } } else { vertAlign = VertAlign.Bottom; } } else { horAlign = HorAlign.Left; vertAlign = VertAlign.Top; } txtPoint = GetTextPoint(tick, -1 * e.ScaleX, isNegative(i, true), isRightPart); DrawText(e, text, brush, txtPoint.X, txtPoint.Y, horAlign, vertAlign); } if (drawLeft) { //left side angle *= -1; tick = RadialUtils.RotateVector(tick0, angle, center); g.DrawLine(pen, tick[0].X, tick[0].Y, tick[1].X, tick[1].Y); text = Convert.ToString(Math.Round(startValue - stepValue * (i + 1))); if (i == sideTicksCount / 2) { if (RadialUtils.IsSemicircle(Parent) || RadialUtils.IsQuadrant(Parent)) { if ((RadialUtils.IsTop(Parent) || RadialUtils.IsBottom(Parent)) && RadialUtils.IsSemicircle(Parent)) { horAlign = HorAlign.Right; vertAlign = VertAlign.Middle; } else if (RadialUtils.IsLeft(Parent) && RadialUtils.IsTop(Parent)) { horAlign = HorAlign.Right; vertAlign = VertAlign.Middle; } else if (RadialUtils.IsRight(Parent) && RadialUtils.IsBottom(Parent)) { horAlign = HorAlign.Left; vertAlign = VertAlign.Middle; } else if (RadialUtils.IsLeft(Parent)) { horAlign = HorAlign.Middle; vertAlign = VertAlign.Top; } else if (RadialUtils.IsRight(Parent)) { horAlign = HorAlign.Middle; vertAlign = VertAlign.Top; } } else { horAlign = HorAlign.Right; vertAlign = VertAlign.Middle; } } else if (i < sideTicksCount / 2) { horAlign = HorAlign.Right; if (RadialUtils.IsSemicircle(Parent) || RadialUtils.IsQuadrant(Parent)) { if (RadialUtils.IsRight(Parent) && RadialUtils.IsBottom(Parent)) { vertAlign = VertAlign.Top; horAlign = HorAlign.Left; } else if (RadialUtils.IsTop(Parent) && RadialUtils.IsLeft(Parent)) { vertAlign = VertAlign.Bottom; horAlign = HorAlign.Right; } else if (RadialUtils.IsBottom(Parent)) { vertAlign = VertAlign.Top; } else if (RadialUtils.IsLeft(Parent)) { horAlign = HorAlign.Right; vertAlign = VertAlign.Top; } else if (RadialUtils.IsRight(Parent)) { horAlign = HorAlign.Left; vertAlign = VertAlign.Top; } } else { vertAlign = VertAlign.Bottom; } } else { horAlign = HorAlign.Right; vertAlign = VertAlign.Top; } txtPoint = GetTextPoint(tick, -1 * e.ScaleX, isNegative(i, false), isLeftPart); DrawText(e, text, brush, txtPoint.X, txtPoint.Y, horAlign, vertAlign); angle *= -1; } angle += majorStep * RadialGauge.Radians; } }
/// <summary> /// Draws a text. /// </summary> /// <param name="e">Paint event data.</param> public void DrawText(FRPaintEventArgs e) { if (!String.IsNullOrEmpty(Text)) { Graphics g = e.Graphics; RectangleF textRect = new RectangleF( (AbsLeft + Padding.Left) * e.ScaleX, (AbsTop + Padding.Top) * e.ScaleY, (Width - Padding.Horizontal) * e.ScaleX, (Height - Padding.Vertical) * e.ScaleY); StringFormat format = GetStringFormat(e.Cache, 0); Font font = e.Cache.GetFont(Font.Name, IsPrinting ? Font.Size : Font.Size * e.ScaleX * 96f / DrawUtils.ScreenDpi, Font.Style); Brush textBrush = null; if (TextFill is SolidFill) { textBrush = e.Cache.GetBrush((TextFill as SolidFill).Color); } else { textBrush = TextFill.CreateBrush(textRect); } Report report = Report; if (report != null && report.TextQuality != TextQuality.Default) { g.TextRenderingHint = GetTextQuality(report.TextQuality); } if (textRect.Width > 0 && textRect.Height > 0) { if (LineHeight == 0 && HorzAlign != HorzAlign.Justify && !Wysiwyg && !HtmlTags) { // use simple rendering if (Angle == 0 && FontWidthRatio == 1) { g.DrawString(Text, font, textBrush, textRect, format); } else { StandardTextRenderer.Draw(Text, g, font, textBrush, textRect, format, Angle, FontWidthRatio); } } else { // use advanced rendering AdvancedTextRenderer renderer = new AdvancedTextRenderer(Text, g, font, textBrush, textRect, format, HorzAlign, VertAlign, LineHeight * e.ScaleY, Angle, FontWidthRatio, ForceJustify, Wysiwyg, HtmlTags, false); renderer.Draw(); } } if (!(TextFill is SolidFill)) { textBrush.Dispose(); } if (report != null && report.TextQuality != TextQuality.Default) { g.TextRenderingHint = TextRenderingHint.SystemDefault; } } DrawUnderlines(e); }