Exemplo n.º 1
0
        protected internal override Path GetPath()
        {
            var points = ControlPoints;
            var path   = new Path();

            path.MoveTo(points[0].ToPointF());

            for (var i = 1; i < points.Length; i++)
            {
                path.LineTo(points[i].ToPointF());
            }

            var transform = Transform;

            if (!transform.IsEmpty)
            {
                using (var matrix = new Matrix())
                {
                    var bounds = ControlBounds;

                    matrix.Translate(-bounds.X - bounds.Width / 2, -bounds.Y - bounds.Height / 2);
                    matrix.Scale((float)transform.ScaleX, (float)transform.ScaleY, MatrixOrder.Append);
                    matrix.Rotate((float)transform.Angle, MatrixOrder.Append);
                    matrix.Translate(bounds.X + bounds.Width / 2, bounds.Y + bounds.Height / 2, MatrixOrder.Append);
                    matrix.Translate((float)transform.TranslateX, (float)transform.TranslateY, MatrixOrder.Append);

                    path.ApplyTransform(matrix);
                }
            }

            return(path);
        }
Exemplo n.º 2
0
        private Path[] GetPaths()
        {
            var horizontalLineLength = Cols * StepX;
            var verticalLineLength   = Rows * StepY;

            var left = ControlPoints[0].X;
            var top  = ControlPoints[0].Y;

            var verticalPath = new Path();

            for (int i = 0; i <= Cols; i++)
            {
                var x = left + i * StepX;
                verticalPath.MoveTo(x, top);
                verticalPath.LineTo(x, verticalLineLength + top);
            }

            var horizonltalPath = new Path();

            for (int i = 0; i <= Rows; i++)
            {
                var y = top + i * StepY;
                horizonltalPath.MoveTo(left, y);
                horizonltalPath.LineTo(horizontalLineLength + left, y);
            }

            return(new[] { verticalPath, horizonltalPath });
        }
Exemplo n.º 3
0
        private Path[] GetPaths()
        {
            var path    = new Path();
            var altPath = new Path();

            var p0 = Point0;
            var p1 = Point1;

            var lineWidth  = p1.X - p0.X;
            var lineHeight = p1.Y - p0.Y;
            var lineLength = SMath.Sqrt(SMath.Pow(lineWidth, 2) + SMath.Pow(lineHeight, 2));
            var sin        = lineHeight / lineLength;
            var cos        = lineWidth / lineLength;

            var dashCount = (int)SMath.Ceiling(lineLength / (DashWidth + AltDashWidth));
            var point     = p0.Clone();

            for (var i = 0; i < dashCount; i++)
            {
                path.MoveTo(point.ToPointF());
                point.Translate(DashWidth * cos, DashWidth * sin);

                if (SMath.Abs(point.X - p0.X) <= SMath.Abs(lineWidth) && SMath.Abs(point.Y - p0.Y) <= SMath.Abs(lineHeight))
                {
                    path.LineTo(point.ToPointF());

                    altPath.MoveTo(point.ToPointF());
                    point.Translate(AltDashWidth * cos, AltDashWidth * sin);

                    if (SMath.Abs(point.X - p0.X) <= SMath.Abs(lineWidth) && SMath.Abs(point.Y - p0.Y) <= SMath.Abs(lineHeight))
                    {
                        altPath.LineTo(point.ToPointF());
                    }
                    else
                    {
                        altPath.LineTo(p1.ToPointF());
                    }
                }
                else
                {
                    path.LineTo(p1.ToPointF());
                }
            }

            return(new[] { path, altPath });
        }
Exemplo n.º 4
0
        internal AdvancedPath ToAdvancedPath()
        {
            var path = new AdvancedPath();

            foreach (var segment in _segments)
            {
                switch (segment.Name.ToUpper())
                {
                case "Z":
                    path.Close();
                    break;

                case "M":
                    if (segment.Points.Count == 1)
                    {
                        path.MoveTo(segment.Points[0].ToPointF());
                    }
                    break;

                case "L":
                    if (segment.Points.Count == 1)
                    {
                        path.LineTo(segment.Points[0].ToPointF());
                    }
                    break;

                case "Q":
                    if (segment.Points.Count == 2)
                    {
                        path.CurveTo(segment.Points[0].ToPointF(), segment.Points[1].ToPointF());
                    }
                    break;

                case "C":
                    if (segment.Points.Count == 3)
                    {
                        path.CurveTo(segment.Points[0].ToPointF(), segment.Points[1].ToPointF(), segment.Points[2].ToPointF());
                    }
                    break;
                }
            }

            return(path);
        }