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