예제 #1
0
        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();
        }
예제 #2
0
        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();
        }
예제 #3
0
        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();
        }
예제 #4
0
        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();
        }
예제 #5
0
        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;
            }
        }
예제 #6
0
        /// <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);
        }