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); }