/// <summary>
        /// 画空间体
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <returns></returns>
        public virtual bool DrawKnob(Graphics Gr, RectangleF rc)
        {
            if (this.Knob == null)
            {
                return(false);
            }

            Color cKnob     = this.Knob.KnobColor;
            Color cKnobDark = HMIColorManager.StepColor(cKnob, 60);

            LinearGradientBrush br = new LinearGradientBrush(rc, cKnob, cKnobDark, 45);

            Gr.FillEllipse(br, rc);

            if (this.Knob.State == HMIKnob.ButtonState.Pressed)
            {
                RectangleF _rc = rc;
                _rc.Inflate(-15F * this.drawRatio, -15F * drawRatio);
                LinearGradientBrush br2 = new LinearGradientBrush(_rc,
                                                                  cKnobDark,
                                                                  cKnob,
                                                                  45);
                Gr.FillEllipse(br2, _rc);
                br2.Dispose();
            }

            br.Dispose();

            return(true);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 画表盘
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <returns></returns>
        public virtual bool DrawBody(Graphics Gr, RectangleF rc)
        {
            if (this.AnalogMeter == null)
            {
                return(false);
            }

            Color bodyColor = this.AnalogMeter.BodyColor;
            Color cDark     = HMIColorManager.StepColor(bodyColor, 20);

            LinearGradientBrush br1 = new LinearGradientBrush(rc,
                                                              bodyColor,
                                                              cDark,
                                                              45);

            Gr.FillEllipse(br1, rc);

            RectangleF _rc = rc;

            _rc.X      += 3 * drawRatio;
            _rc.Y      += 3 * drawRatio;
            _rc.Width  -= 6 * drawRatio;
            _rc.Height -= 6 * drawRatio;

            LinearGradientBrush br2 = new LinearGradientBrush(_rc,
                                                              cDark,
                                                              bodyColor,
                                                              45);

            Gr.FillEllipse(br2, _rc);

            br1.Dispose();
            br2.Dispose();
            return(true);
        }
        /// <summary>
        /// 画控件实体
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <returns></returns>
        public virtual bool DrawBody(Graphics Gr, RectangleF rc)
        {
            if (this.Button == null)
            {
                return(false);
            }

            Color bodyColor = this.Button.ButtonColor;
            Color cDark     = HMIColorManager.StepColor(bodyColor, 20);

            LinearGradientBrush br1 = new LinearGradientBrush(rc,
                                                              bodyColor,
                                                              cDark,
                                                              45);

            if ((this.Button.Style == HMIButton.ButtonStyle.Circular) ||
                (this.Button.Style == HMIButton.ButtonStyle.Elliptical))
            {
                Gr.FillEllipse(br1, rc);
            }
            else
            {
                GraphicsPath path = this.RoundedRect(rc, 15F);
                Gr.FillPath(br1, path);
                path.Dispose();
            }

            if (this.Button.State == HMIButton.ButtonState.Pressed)
            {
                RectangleF _rc = rc;
                _rc.Inflate(-15F * this.drawRatio, -15F * drawRatio);
                LinearGradientBrush br2 = new LinearGradientBrush(_rc,
                                                                  cDark,
                                                                  bodyColor,
                                                                  45);
                if ((this.Button.Style == HMIButton.ButtonStyle.Circular) ||
                    (this.Button.Style == HMIButton.ButtonStyle.Elliptical))
                {
                    Gr.FillEllipse(br2, _rc);
                }
                else
                {
                    GraphicsPath path = this.RoundedRect(_rc, 10F);
                    Gr.FillPath(br2, path);
                    path.Dispose();
                }

                br2.Dispose();
            }

            br1.Dispose();
            return(true);
        }
        /// <summary>
        /// 画刻度
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <returns></returns>
        public virtual bool DrawScale(Graphics Gr, RectangleF rc)
        {
            if (this.Knob == null)
            {
                return(false);
            }

            Color cKnob     = this.Knob.ScaleColor;
            Color cKnobDark = HMIColorManager.StepColor(cKnob, 60);

            LinearGradientBrush br = new LinearGradientBrush(rc, cKnobDark, cKnob, 45);

            Gr.FillEllipse(br, rc);

            PointF       pf     = new PointF(0.0F, 0.0F);
            Font         ft     = new Font(this.Knob.Font.FontFamily, (float)15F * drawRatio);
            SolidBrush   sb     = new SolidBrush(this.Knob.ScaleValueColor);
            StringFormat format = new StringFormat();

            format.Alignment = StringAlignment.Center;
            if (this.Knob.MaxValue - this.Knob.MinValue != 0)
            {
                for (float i = this.Knob.MinValue; i <= this.Knob.MaxValue; i += this.Knob.StepValue)
                {
                    float degree = 270F * (i - this.Knob.MinValue) / (this.Knob.MaxValue - this.Knob.MinValue);
                    degree = (degree + 135F) * (float)Math.PI / 180F;

                    pf.X = (int)(Math.Cos(degree) * ((rc.Width * 0.5F) - 10F * drawRatio) + rc.X + (rc.Width * 0.5F));
                    pf.Y = (int)(Math.Sin(degree) * ((rc.Width * 0.5F) - 10F * drawRatio) + rc.Y + (rc.Height * 0.5F));

                    string str  = i.ToString();
                    SizeF  size = Gr.MeasureString(str, ft);

                    RectangleF _rc = rc;
                    _rc.X      = pf.X - size.Width / 2F;
                    _rc.Y      = pf.Y - size.Height / 2F;
                    _rc.Width  = size.Width;
                    _rc.Height = size.Height;

                    Gr.DrawString(str, ft, sb, _rc, format);
                }
            }
            ft.Dispose();
            sb.Dispose();
            format.Dispose();
            br.Dispose();

            return(true);
        }
        /// <summary>
        /// 画位置点和当前值
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <param name="pos"></param>
        /// <returns></returns>
        public virtual bool DrawKnobIndicator(Graphics Gr, RectangleF rc, PointF pos)
        {
            if (this.Knob == null)
            {
                return(false);
            }

            RectangleF _rc = rc;

            _rc.X      = pos.X - 4;
            _rc.Y      = pos.Y - 4;
            _rc.Width  = 8;
            _rc.Height = 8;

            Color cKnob     = this.Knob.IndicatorColor;
            Color cKnobDark = HMIColorManager.StepColor(cKnob, 60);

            LinearGradientBrush br = new LinearGradientBrush(_rc, cKnobDark, cKnob, 45);

            Gr.FillEllipse(br, _rc);

            SolidBrush sb  = new SolidBrush(this.Knob.ValueColor);
            Font       f   = new Font(this.Knob.Font.FontFamily, (float)40F * drawRatio);
            string     str = this.Knob.Value.ToString();

            SizeF size = Gr.MeasureString(str, f);

            Gr.DrawString(str,
                          f,
                          sb,
                          this.knobCenter.X - (float)(size.Width * 0.5),
                          this.knobCenter.Y - (float)(size.Height * 0.5));
            sb.Dispose();
            f.Dispose();
            br.Dispose();

            return(true);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 画指针的圆
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <returns></returns>
        public virtual bool DrawNeedleCover(Graphics Gr, RectangleF rc)
        {
            if (this.AnalogMeter == null)
            {
                return(false);
            }

            Color clr = this.AnalogMeter.NeedleColor;

            if (this.AnalogMeter.Value < this.AnalogMeter.MinNValueNor ||
                this.AnalogMeter.Value > this.AnalogMeter.MaxValueNor)
            {
                clr = this.AnalogMeter.UnNormalColor;
            }
            RectangleF _rc = rc;

            Color clr1 = Color.FromArgb(70, clr);

            _rc.Inflate(5 * drawRatio, 5 * drawRatio);

            SolidBrush brTransp = new SolidBrush(clr1);

            Gr.FillEllipse(brTransp, _rc);

            clr1 = clr;
            Color clr2 = HMIColorManager.StepColor(clr, 75);
            LinearGradientBrush br1 = new LinearGradientBrush(rc,
                                                              clr1,
                                                              clr2,
                                                              45);

            Gr.FillEllipse(br1, rc);

            brTransp.Dispose();
            br1.Dispose();
            return(true);
        }
        /// <summary>
        /// 画控件体
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <returns></returns>
        public virtual bool DrawLed(Graphics Gr, RectangleF rc)
        {
            if (this.Led == null)
            {
                return(false);
            }

            Color cDarkOff = HMIColorManager.StepColor(Color.LightGray, 20);
            Color cDarkOn  = HMIColorManager.StepColor(this.Led.LedColor, 60);

            LinearGradientBrush brOff = new LinearGradientBrush(rc,
                                                                Color.Gray,
                                                                cDarkOff,
                                                                45);

            LinearGradientBrush brOn = new LinearGradientBrush(rc,
                                                               this.Led.LedColor,
                                                               cDarkOn,
                                                               45);

            if (this.Led.State == HMILed.LedState.Blink)
            {
                if (this.Led.BlinkIsOn == false)
                {
                    if (this.Led.Style == HMILed.LedStyle.Circular)
                    {
                        Gr.FillEllipse(brOff, rc);
                    }
                    else if (this.Led.Style == HMILed.LedStyle.Rectangular)
                    {
                        Gr.FillRectangle(brOff, rc);
                    }
                }
                else
                {
                    if (this.Led.Style == HMILed.LedStyle.Circular)
                    {
                        Gr.FillEllipse(brOn, rc);
                    }
                    else if (this.Led.Style == HMILed.LedStyle.Rectangular)
                    {
                        Gr.FillRectangle(brOn, rc);
                    }
                }
            }
            else
            {
                if (this.Led.State == HMILed.LedState.Off)
                {
                    if (this.Led.Style == HMILed.LedStyle.Circular)
                    {
                        Gr.FillEllipse(brOff, rc);
                    }
                    else if (this.Led.Style == HMILed.LedStyle.Rectangular)
                    {
                        Gr.FillRectangle(brOff, rc);
                    }
                }
                else
                {
                    if (this.Led.Style == HMILed.LedStyle.Circular)
                    {
                        Gr.FillEllipse(brOn, rc);
                    }
                    else if (this.Led.Style == HMILed.LedStyle.Rectangular)
                    {
                        Gr.FillRectangle(brOn, rc);
                    }
                }
            }

            brOff.Dispose();
            brOn.Dispose();

            return(true);
        }
        /// <summary>
        /// 画文本
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <returns></returns>
        public virtual bool DrawText(Graphics Gr, RectangleF rc)
        {
            if (this.Button == null)
            {
                return(false);
            }
            switch (this.Button.LableStyl)
            {
            case HMIButton.ButtonLabelSylt.Text:
                //画字符串
                Font font = new Font(this.Button.Font.FontFamily,
                                     this.Button.Font.Size * this.drawRatio,
                                     this.Button.Font.Style);

                String str = this.Button.Label;

                Color bodyColor = this.Button.ForeColor;
                Color cDark     = HMIColorManager.StepColor(bodyColor, 20);

                SizeF size = Gr.MeasureString(str, font);

                SolidBrush br1 = new SolidBrush(bodyColor);
                SolidBrush br2 = new SolidBrush(cDark);

                Gr.DrawString(str,
                              font,
                              br1,
                              rc.Left + ((rc.Width * 0.5F) - (float)(size.Width * 0.5F)) + (float)(1 * this.drawRatio),
                              rc.Top + ((rc.Height * 0.5F) - (float)(size.Height * 0.5)) + (float)(1 * this.drawRatio));

                Gr.DrawString(str,
                              font,
                              br2,
                              rc.Left + ((rc.Width * 0.5F) - (float)(size.Width * 0.5F)),
                              rc.Top + ((rc.Height * 0.5F) - (float)(size.Height * 0.5)));

                br1.Dispose();
                br2.Dispose();
                font.Dispose();
                break;

            case HMIButton.ButtonLabelSylt.Image:
                if (this.Button.LableImage != null)
                {
                    RectangleF temp = rc;
                    temp.Inflate(-25F * this.drawRatio, -25F * drawRatio);
                    Rectangle temprc = new Rectangle();
                    temprc.X      = (int)temp.X;
                    temprc.Y      = (int)temp.Y;
                    temprc.Height = (int)temp.Height;
                    temprc.Width  = (int)temp.Width;

                    Rectangle src = new Rectangle();
                    src.X                = 0;
                    src.Y                = 0;
                    src.Width            = this.Button.LableImage.Width;
                    src.Height           = this.Button.LableImage.Height;
                    Gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    Gr.DrawImage(this.Button.LableImage, temprc, src, GraphicsUnit.Pixel);
                }
                break;

            default:
                break;
            }


            return(false);
        }
        /// <summary>
        /// 画环形刻度指示
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <returns></returns>
        public virtual bool DrawCircularScale(Graphics Gr, RectangleF rc)
        {
            if (this.Knob == null)
            {
                return(false);
            }

            Color cKnob     = this.Knob.ScaleColor;
            Color cKnobDark = HMIColorManager.StepColor(cKnob, 60);

            LinearGradientBrush br1 = new LinearGradientBrush(rc, cKnobDark, cKnob, 45);

            Gr.FillEllipse(br1, rc);

            Color cKnob1     = this.Knob.ScaleColor;
            Color cKnob2     = this.Knob.ScaleOtherColor;
            Color cKnobDark1 = HMIColorManager.StepColor(cKnob1, this.Knob.ScaleColorStep);
            Color cKnobDark2 = HMIColorManager.StepColor(cKnob2, this.Knob.ScaleColorStep);
            Color tempColor  = cKnobDark2;

            GraphicsPath pth = new GraphicsPath();
            SolidBrush   br  = new SolidBrush(tempColor);
            Pen          pen = new Pen(tempColor);

            if (this.Knob.MaxValue - this.Knob.MinValue != 0)
            {
                float startDegree = 90F;
                if (this.Knob.ScaleInterverlFlag)
                {
                    startDegree = 89F;
                }
                PointF[] points = new PointF[(int)(this.Knob.MaxValue - this.Knob.MinValue + this.Knob.StepValue)];
                points[0] = new PointF();
                float degree      = 360F * (0 - this.Knob.MinValue) / (this.Knob.MaxValue - this.Knob.MinValue + this.Knob.StepValue);
                float begindegree = (degree + startDegree) * (float)Math.PI / 180F;
                degree      = (degree + 90F) * (float)Math.PI / 180F;
                points[0].X = (float)(Math.Cos(degree) * (this.derectionRect.Width * 0.5F - this.drawRatio * this.Knob.Knob8DerectionWight) + this.derectionRect.Width * 0.5F);
                points[0].Y = (float)(Math.Sin(degree) * (this.derectionRect.Width * 0.5F - this.drawRatio * this.Knob.Knob8DerectionWight) + this.derectionRect.Height * 0.5F);
                PointF realBeginPoint = new PointF();
                realBeginPoint.X = (float)(Math.Cos(begindegree) * (this.derectionRect.Width * 0.5F - this.drawRatio * this.Knob.Knob8DerectionWight) + this.derectionRect.Width * 0.5F);
                realBeginPoint.Y = (float)(Math.Sin(begindegree) * (this.derectionRect.Width * 0.5F - this.drawRatio * this.Knob.Knob8DerectionWight) + this.derectionRect.Height * 0.5F);
                for (float i = this.Knob.MinValue; i <= this.Knob.MaxValue; i += this.Knob.StepValue)
                {
                    PointF realEndPoint = new PointF();
                    if (i < this.Knob.MaxValue)
                    {
                        points[(int)(i + this.Knob.StepValue)] = new PointF();

                        degree = 360F * (i + this.Knob.StepValue - this.Knob.MinValue) / (this.Knob.MaxValue - this.Knob.MinValue + this.Knob.StepValue);
                        float degree2 = (degree + startDegree) * (float)Math.PI / 180F;
                        degree = (degree + 90F) * (float)Math.PI / 180F;
                        points[(int)(i + this.Knob.StepValue)].X = (float)(Math.Cos(degree) * (this.derectionRect.Width * 0.5F - this.drawRatio * this.Knob.Knob8DerectionWight) + this.derectionRect.Width * 0.5F);
                        points[(int)(i + this.Knob.StepValue)].Y = (float)(Math.Sin(degree) * (this.derectionRect.Width * 0.5F - this.drawRatio * this.Knob.Knob8DerectionWight) + this.derectionRect.Height * 0.5F);
                        realEndPoint.X = (float)(Math.Cos(degree2) * (this.derectionRect.Width * 0.5F - this.drawRatio * this.Knob.Knob8DerectionWight) + this.derectionRect.Width * 0.5F);
                        realEndPoint.Y = (float)(Math.Sin(degree2) * (this.derectionRect.Width * 0.5F - this.drawRatio * this.Knob.Knob8DerectionWight) + this.derectionRect.Height * 0.5F);
                        //points[(int)(i + this.Knob.StepValue)].X = (float)(Math.Cos(degree) * ((this.drawRect.Width * 0.5F)) + (this.drawRect.Width * 0.5F));
                        //points[(int)(i + this.Knob.StepValue)].Y = (float)(Math.Sin(degree) * ((this.drawRect.Height * 0.5F)) + (this.drawRect.Height * 0.5F));
                    }
                    //if (i % 2 == 0)
                    //{
                    if (Knob.Value >= i)
                    {
                        tempColor = cKnob2;
                    }
                    else
                    {
                        tempColor = cKnobDark1;
                    }
                    //}
                    //else
                    //{
                    //    if (Knob.Value >= i) tempColor = cKnob1;
                    //    else tempColor = cKnobDark1;
                    //}

                    float degreeBegin = 360F * (i - this.Knob.MinValue) / (this.Knob.MaxValue - this.Knob.MinValue + this.Knob.StepValue) + 90;
                    float degreeEnd   = 360F * (i + 1 - this.Knob.MinValue) / (this.Knob.MaxValue - this.Knob.MinValue + this.Knob.StepValue) + 90;
                    pth = new GraphicsPath();
                    pth.AddLine(this.knobCenter, points[(int)i]);
                    pth.AddArc(rc.X, rc.Y, rc.Width, rc.Height, degreeBegin, degreeEnd - degreeBegin);
                    if (i == this.Knob.MaxValue)
                    {
                        pth.AddLine(realBeginPoint, this.knobCenter);
                    }
                    else
                    {
                        pth.AddLine(realEndPoint, this.knobCenter);
                    }
                    //pth.AddArc(rectKnob.X, rectKnob.Y, rectKnob.Width, rectKnob.Height, degreeEnd, degreeBegin - degreeEnd);
                    br  = new SolidBrush(tempColor);
                    pen = new Pen(tempColor);
                    Gr.DrawPath(pen, pth);
                    Gr.FillPath(br, pth);
                    //br.Dispose();
                    //pen.Dispose();
                    //pth.Dispose();
                }
            }


            return(true);
        }
        /// <summary>
        /// 画外圈8向指示
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <returns></returns>
        public virtual bool DrawDerection(Graphics Gr, RectangleF rc)
        {
            if (this.Knob == null)
            {
                return(false);
            }
            if (!this.Knob.Display8DerectionFlag)
            {
                return(true);
            }

            PointF[] points = this.Knob.GetDerectionPoints();

            //上方
            Color tempColor = this.Knob.TopColor;

            if (this.Knob.KnobDerectionType != HMIKnob.Knob8DerectionType.Top)
            {
                tempColor = HMIColorManager.StepColor(tempColor, this.Knob.DerectionColorStep);
            }
            GraphicsPath pth = new GraphicsPath();

            pth.AddLine(points[0], points[1]);
            pth.AddArc(this.derectionRect.X, this.derectionRect.Y, this.derectionRect.Width, this.derectionRect.Height, 247.5F, 45F);
            pth.AddLine(points[2], points[3]);
            pth.AddArc(this.derectionRect.X + this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Y + this.Knob.Knob8DerectionWight * drawRatio,
                       this.derectionRect.Width - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Height - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, 292.5F, -45F);
            SolidBrush br  = new SolidBrush(tempColor);
            Pen        pen = new Pen(tempColor);

            Gr.DrawPath(pen, pth);
            Gr.FillPath(br, pth);
            br.Dispose();
            pen.Dispose();
            pth.Dispose();

            //右上
            tempColor = this.Knob.Top_Right_Color;
            if (this.Knob.KnobDerectionType != HMIKnob.Knob8DerectionType.Top_Right)
            {
                tempColor = HMIColorManager.StepColor(tempColor, this.Knob.DerectionColorStep);
            }
            pth = new GraphicsPath();
            pth.AddLine(points[3], points[2]);
            pth.AddArc(this.derectionRect.X, this.derectionRect.Y, this.derectionRect.Width, this.derectionRect.Height, 292.5F, 45F);
            pth.AddLine(points[5], points[4]);
            pth.AddArc(this.derectionRect.X + this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Y + this.Knob.Knob8DerectionWight * drawRatio,
                       this.derectionRect.Width - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Height - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, 337.5F, -45F);
            br  = new SolidBrush(tempColor);
            pen = new Pen(tempColor);
            Gr.DrawPath(pen, pth);
            Gr.FillPath(br, pth);
            br.Dispose();
            pen.Dispose();
            pth.Dispose();

            //右
            tempColor = this.Knob.RightColor;
            if (this.Knob.KnobDerectionType != HMIKnob.Knob8DerectionType.Right)
            {
                tempColor = HMIColorManager.StepColor(tempColor, this.Knob.DerectionColorStep);
            }
            pth = new GraphicsPath();
            pth.AddLine(points[4], points[5]);
            pth.AddArc(this.derectionRect.X, this.derectionRect.Y, this.derectionRect.Width, this.derectionRect.Height, 337.5F, 45F);
            pth.AddLine(points[6], points[7]);
            pth.AddArc(this.derectionRect.X + this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Y + this.Knob.Knob8DerectionWight * drawRatio,
                       this.derectionRect.Width - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Height - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, 22.5F, -45F);
            br  = new SolidBrush(tempColor);
            pen = new Pen(tempColor);
            Gr.DrawPath(pen, pth);
            Gr.FillPath(br, pth);
            br.Dispose();
            pen.Dispose();
            pth.Dispose();

            //右下
            tempColor = this.Knob.Buttom_Right_Color;
            if (this.Knob.KnobDerectionType != HMIKnob.Knob8DerectionType.Buttom_Right)
            {
                tempColor = HMIColorManager.StepColor(tempColor, this.Knob.DerectionColorStep);
            }
            pth = new GraphicsPath();
            pth.AddLine(points[7], points[6]);
            pth.AddArc(this.derectionRect.X, this.derectionRect.Y, this.derectionRect.Width, this.derectionRect.Height, 22.5F, 45F);
            pth.AddLine(points[9], points[8]);
            pth.AddArc(this.derectionRect.X + this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Y + this.Knob.Knob8DerectionWight * drawRatio,
                       this.derectionRect.Width - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Height - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, 67.5F, -45F);
            br  = new SolidBrush(tempColor);
            pen = new Pen(tempColor);
            Gr.DrawPath(pen, pth);
            Gr.FillPath(br, pth);
            br.Dispose();
            pen.Dispose();
            pth.Dispose();

            //下
            tempColor = this.Knob.ButtomColor;
            if (this.Knob.KnobDerectionType != HMIKnob.Knob8DerectionType.Buttom)
            {
                tempColor = HMIColorManager.StepColor(tempColor, this.Knob.DerectionColorStep);
            }
            pth = new GraphicsPath();
            pth.AddLine(points[8], points[9]);
            pth.AddArc(this.derectionRect.X, this.derectionRect.Y, this.derectionRect.Width, this.derectionRect.Height, 67.5F, 45F);
            pth.AddLine(points[10], points[11]);
            pth.AddArc(this.derectionRect.X + this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Y + this.Knob.Knob8DerectionWight * drawRatio,
                       this.derectionRect.Width - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Height - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, 112.5F, -45F);
            br  = new SolidBrush(tempColor);
            pen = new Pen(tempColor);
            Gr.DrawPath(pen, pth);
            Gr.FillPath(br, pth);
            br.Dispose();
            pen.Dispose();
            pth.Dispose();

            //左下
            tempColor = this.Knob.Buttom_Left_Color;
            if (this.Knob.KnobDerectionType != HMIKnob.Knob8DerectionType.Buttom_Left)
            {
                tempColor = HMIColorManager.StepColor(tempColor, this.Knob.DerectionColorStep);
            }
            pth = new GraphicsPath();
            pth.AddLine(points[11], points[10]);
            pth.AddArc(this.derectionRect.X, this.derectionRect.Y, this.derectionRect.Width, this.derectionRect.Height, 112.5F, 45F);
            pth.AddLine(points[13], points[12]);
            pth.AddArc(this.derectionRect.X + this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Y + this.Knob.Knob8DerectionWight * drawRatio,
                       this.derectionRect.Width - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Height - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, 157.5F, -45F);
            br  = new SolidBrush(tempColor);
            pen = new Pen(tempColor);
            Gr.DrawPath(pen, pth);
            Gr.FillPath(br, pth);
            br.Dispose();
            pen.Dispose();
            pth.Dispose();

            //左
            tempColor = this.Knob.LeftColor;
            if (this.Knob.KnobDerectionType != HMIKnob.Knob8DerectionType.Left)
            {
                tempColor = HMIColorManager.StepColor(tempColor, this.Knob.DerectionColorStep);
            }
            pth = new GraphicsPath();
            pth.AddLine(points[12], points[13]);
            pth.AddArc(this.derectionRect.X, this.derectionRect.Y, this.derectionRect.Width, this.derectionRect.Height, 157.5F, 45F);
            pth.AddLine(points[14], points[15]);
            pth.AddArc(this.derectionRect.X + this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Y + this.Knob.Knob8DerectionWight * drawRatio,
                       this.derectionRect.Width - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Height - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, 202.5F, -45F);
            br  = new SolidBrush(tempColor);
            pen = new Pen(tempColor);
            Gr.DrawPath(pen, pth);
            Gr.FillPath(br, pth);
            br.Dispose();
            pen.Dispose();
            pth.Dispose();

            //左上
            tempColor = this.Knob.Top_Left_Color;
            if (this.Knob.KnobDerectionType != HMIKnob.Knob8DerectionType.Top_Left)
            {
                tempColor = HMIColorManager.StepColor(tempColor, this.Knob.DerectionColorStep);
            }
            pth = new GraphicsPath();
            pth.AddLine(points[15], points[14]);
            pth.AddArc(this.derectionRect.X, this.derectionRect.Y, this.derectionRect.Width, this.derectionRect.Height, 202.5F, 45F);
            pth.AddLine(points[1], points[0]);
            pth.AddArc(this.derectionRect.X + this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Y + this.Knob.Knob8DerectionWight * drawRatio,
                       this.derectionRect.Width - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, this.derectionRect.Height - 2.0F * this.Knob.Knob8DerectionWight * drawRatio, 247.5F, -45F);
            br  = new SolidBrush(tempColor);
            pen = new Pen(tempColor);
            Gr.DrawPath(pen, pth);
            Gr.FillPath(br, pth);
            br.Dispose();
            pen.Dispose();
            pth.Dispose();

            return(true);
        }