Ejemplo n.º 1
0
        public static MoveTo Parse(String strCommand, IGeometryDataFigure previousFigure)
        {
            if (String.IsNullOrWhiteSpace(strCommand) || !strCommand.StartsWith("M", StringComparison.InvariantCultureIgnoreCase))
            {
                return(null);
            }

            var datas = Helper.GetSplitStrings(strCommand.Substring(1), true, ',');

            if (datas.Count != 2)
            {
                return(null);
            }

            Double x, y;

            if (!Double.TryParse(datas[0], out x))
            {
                return(null);
            }
            if (!Double.TryParse(datas[1], out y))
            {
                return(null);
            }

            return(new MoveTo(new Point(x, y), previousFigure, strCommand.StartsWith("m")));
        }
Ejemplo n.º 2
0
 private MoveTo(Point point, IGeometryDataFigure previousFigure, Boolean isOffset = false)
 {
     this.PreviousFigure = previousFigure;
     this.StartPoint     = point;
     if (isOffset && previousFigure != null)
     {
         this.StartPoint = new Point(previousFigure.EndPoint.X + point.X, previousFigure.EndPoint.Y + point.Y);
     }
 }
Ejemplo n.º 3
0
        public static CloseTo Parse(String strCommand, IGeometryDataFigure previousFigure)
        {
            if (String.IsNullOrWhiteSpace(strCommand) || !strCommand.StartsWith("Z", StringComparison.InvariantCultureIgnoreCase))
            {
                return(null);
            }

            return(new CloseTo(previousFigure));
        }
Ejemplo n.º 4
0
        private CloseTo(IGeometryDataFigure previousFigure)
        {
            this.PreviousFigure = previousFigure;
            this.StartPoint     = previousFigure != null ? previousFigure.EndPoint : new Point(0, 0);
            var moveFigure = GetPreviousMoveFigure();

            if (moveFigure != null)
            {
                this.EndPoint = moveFigure.StartPoint;
            }
        }
Ejemplo n.º 5
0
        private LineTo(List <Point> points, IGeometryDataFigure previousFigure, Boolean isOffset = false)
        {
            Debug.Assert(points != null && points.Any());

            this.Points = points;
            if (isOffset && previousFigure != null)
            {
                this.Points = points.Select(p => new Point(previousFigure.EndPoint.X + p.X, previousFigure.EndPoint.Y + p.Y)).ToList();
            }

            this.PreviousFigure = previousFigure;
            this.StartPoint     = previousFigure != null ? previousFigure.EndPoint : new Point(0, 0);
            this.EndPoint       = this.Points.LastOrDefault();
        }
Ejemplo n.º 6
0
        public static List <IGeometryDataFigure> GetDataFigures(String strGeometryData)
        {
            if (String.IsNullOrWhiteSpace(strGeometryData) || !strGeometryData.StartsWith("M"))
            {
                return(null);
            }

            var figures      = new List <IGeometryDataFigure>();
            var commandChars = strGeometryData.Where(p => (p >= 'A' && p <= 'Z') || (p >= 'a' && p <= 'z')).ToList();
            var leftString   = strGeometryData.ToString();

            for (int i = 0; i < commandChars.Count; i++)
            {
                int iTo = leftString.Length;
                if (i + 1 < commandChars.Count)
                {
                    iTo = leftString.IndexOf(commandChars[i + 1]);
                }

                IGeometryDataFigure figure = null;
                var strCommand             = leftString.Substring(0, iTo);
                if (strCommand.StartsWith("M", StringComparison.InvariantCultureIgnoreCase))
                {
                    figure = MoveTo.Parse(strCommand, figures.LastOrDefault());
                }
                else if (strCommand.StartsWith("L", StringComparison.InvariantCultureIgnoreCase))
                {
                    figure = LineTo.Parse(strCommand, figures.LastOrDefault());
                }
                else if (strCommand.StartsWith("A", StringComparison.InvariantCultureIgnoreCase))
                {
                    figure = ArcTo.Parse(strCommand, figures.LastOrDefault());
                }
                else if (strCommand.StartsWith("Z", StringComparison.InvariantCultureIgnoreCase))
                {
                    figure = CloseTo.Parse(strCommand, figures.LastOrDefault());
                }
                else
                {
                    ExceptionHandler.ThrowException(String.Format("Unsupported geometry command: \"{0}\"", strCommand));
                }
                if (figure != null)
                {
                    figures.Add(figure);
                }

                leftString = leftString.Substring(iTo);
            }
            return(figures);
        }
Ejemplo n.º 7
0
        public static ArcTo Parse(String strCommand, IGeometryDataFigure previousFigure)
        {
            if (String.IsNullOrWhiteSpace(strCommand) || !strCommand.StartsWith("A", StringComparison.InvariantCultureIgnoreCase))
            {
                return(null);
            }

            var datas = Helper.GetSplitStrings(strCommand.Substring(1), true, ',');

            if (datas.Count != 7)
            {
                return(null);
            }

            double radiusX, radiusY, rotationAngle, endPointX, endPointY;
            int    isLargeArc, sweepDirection;

            if (!Double.TryParse(datas[0], out radiusX))
            {
                return(null);
            }
            if (!Double.TryParse(datas[1], out radiusY))
            {
                return(null);
            }
            if (!Double.TryParse(datas[2], out rotationAngle))
            {
                return(null);
            }
            if (!Int32.TryParse(datas[3], out isLargeArc))
            {
                return(null);
            }
            if (!Int32.TryParse(datas[4], out sweepDirection))
            {
                return(null);
            }
            if (!Double.TryParse(datas[5], out endPointX))
            {
                return(null);
            }
            if (!Double.TryParse(datas[6], out endPointY))
            {
                return(null);
            }

            return(new ArcTo(radiusX, radiusY, rotationAngle, isLargeArc, sweepDirection, new Point(endPointX, endPointY), previousFigure, strCommand.StartsWith("a")));
        }
Ejemplo n.º 8
0
        public static LineTo Parse(String strCommand, IGeometryDataFigure previousFigure)
        {
            if (String.IsNullOrWhiteSpace(strCommand) || !strCommand.StartsWith("L", StringComparison.InvariantCultureIgnoreCase))
            {
                return(null);
            }

            var pointStrings = Helper.GetSplitStrings(strCommand.Substring(1), true, ' ');

            if (!pointStrings.Any())
            {
                return(null);
            }

            var points = new List <Point>();

            foreach (var pointString in pointStrings)
            {
                var datas = Helper.GetSplitStrings(pointString, true, ',');
                if (datas.Count != 2)
                {
                    return(null);
                }

                Double x, y;
                if (!Double.TryParse(datas[0], out x))
                {
                    return(null);
                }
                if (!Double.TryParse(datas[1], out y))
                {
                    return(null);
                }

                points.Add(new Point(x, y));
            }
            return(new LineTo(points, previousFigure, strCommand.StartsWith("l")));
        }
Ejemplo n.º 9
0
        private ArcTo(Double radiusX, Double radiusY, Double rotationAngle, int isLargeArc, int sweepDirection, Point endPoint, IGeometryDataFigure previousFigure, Boolean isOffset = false)
        {
            this.RadiusX        = radiusX;
            this.RadiusY        = radiusY;
            this.RotationAngle  = rotationAngle;
            this.IsLargeArc     = isLargeArc == 1;
            this.SweepDirection = sweepDirection == 1;
            this.EndPoint       = endPoint;
            if (isOffset && previousFigure != null)
            {
                this.EndPoint = new Point(previousFigure.EndPoint.X + endPoint.X, previousFigure.EndPoint.Y + endPoint.Y);
            }

            this.PreviousFigure = previousFigure;
            this.StartPoint     = previousFigure != null ? previousFigure.EndPoint : new Point(0, 0);
        }