/// <summary>
        /// https://stackoverflow.com/questions/16667072/how-to-draw-arc-with-radius-and-start-and-stop-angle
        /// </summary>
        /// <param name="drawing"></param>
        /// <param name="thisDC"></param>
        /// <param name="pen"></param>
        /// <param name="center"></param>
        /// <param name="radius"></param>
        /// <param name="startAngle"></param>
        /// <param name="endAngle"></param>
        /// <param name="mdoelToCanvas"></param>
        protected static void DrawArc(IDrawing drawing, DrawingContext thisDC, Pen pen, CADPoint center, double radius, double startAngle, double endAngle, bool mdoelToCanvas = true)
        {
            CADPoint centerInCanvas = mdoelToCanvas ? drawing.ModelToCanvas(center) : center;
            double   radiusInCanvas = mdoelToCanvas ? drawing.ModelToCanvas(radius) : radius;

            double startAngleInCanvas = MathUtils.NormalizeRadianAngle(-startAngle);
            double endAngleInCanvas   = MathUtils.NormalizeRadianAngle(-endAngle);

            //
            double angle = endAngle - startAngle;

            if (endAngle < startAngle)
            {
                angle += Utils.PI * 2;
            }


            if (radiusInCanvas > 0)
            {
                double a0 = startAngleInCanvas < 0 ? startAngleInCanvas + 2 * Math.PI : startAngleInCanvas;
                double a1 = endAngleInCanvas < 0 ? endAngleInCanvas + 2 * Math.PI : endAngleInCanvas;

                if (a1 < a0)
                {
                    a1 += Math.PI * 2;
                }

                SweepDirection d = SweepDirection.Counterclockwise;
                bool           large;

                bool SmallAngle = false;
                if (SmallAngle)
                {
                    large = false;
                    d     = (a1 - a0) > Math.PI ? SweepDirection.Counterclockwise : SweepDirection.Clockwise;
                }
                else
                {
                    large = (Math.Abs(a1 - a0) < Math.PI);
                }

                Point p0 = centerInCanvas.AsWPF() + new Vector(Math.Cos(a0), Math.Sin(a0)) * radiusInCanvas;
                Point p1 = centerInCanvas.AsWPF() + new Vector(Math.Cos(a1), Math.Sin(a1)) * radiusInCanvas;

                List <PathSegment> segments = new List <PathSegment>
                {
                    new ArcSegment(p1, new Size(radiusInCanvas, radiusInCanvas), 0.0, large, d, true)
                };

                List <PathFigure> figures = new List <PathFigure>
                {
                    new PathFigure(p0, segments, true)
                    {
                        IsClosed = false
                    }
                };

                thisDC.DrawGeometry(null, pen, new PathGeometry(figures, FillRule.EvenOdd, null));
            }
        }