示例#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);
        }
        protected Path GetWrappingPath(float dpi = 72)
        {
            var rectangle = Rectangle;
            var path      = new Path();

            foreach (var r in WrappingRectangles.Where(r => !r.IsEmpty && rectangle.IntersectsWith(r)))
            {
                var rectToWrap = r.Clone();
                rectToWrap.Width  += WrappingMargin * 2;
                rectToWrap.Height += WrappingMargin * 2;

                path.DrawPath(rectToWrap.GetPath());
            }

            if (path.Points.Count > 0)
            {
                using (var matrix = new Matrix())
                {
                    if (!Utils.EqualsOfFloatNumbers(Angle, 0))
                    {
                        matrix.RotateAt(-(float)Angle, rectangle.Center.ToPointF());
                    }

                    if (!Utils.EqualsOfFloatNumbers(1, HorizontalScale) || !Utils.EqualsOfFloatNumbers(1, VerticalScale))
                    {
                        matrix.Scale(1 / HorizontalScale, 1 / VerticalScale, MatrixOrder.Append);
                    }

                    if (!Utils.EqualsOfFloatNumbers(dpi, 72))
                    {
                        matrix.Scale(dpi / 72, dpi / 72, MatrixOrder.Append);
                    }

                    path.ApplyTransform(matrix);
                }
            }

            return(path);
        }