/// <summary> /// Create quadratic bezier path /// </summary> public void QuadraticBezierTo(Point point1, Point point2, bool isStroked, bool isSmoothJoin) { var bezier = new GraphicQuadraticBezierSegment(); currentPath.Segments.Add(bezier); bezier.ControlPoint = point1; bezier.EndPoint = point2; }
private List <GraphicPathSegment> TransformSegments(List <GraphicPathSegment> segments) { var transformedSegments = new List <GraphicPathSegment>(); foreach (var segment in segments) { switch (segment) { case GraphicMoveSegment graphicMove: { var normalizedMove = new GraphicMoveSegment(); transformedSegments.Add(normalizedMove); normalizedMove.StartPoint = MatrixUtilities.TransformPoint(graphicMove.StartPoint, transformMatrix); normalizedMove.IsClosed = graphicMove.IsClosed; break; } case GraphicLineSegment graphicLineTo: { var normalizedLineTo = new GraphicLineSegment(); transformedSegments.Add(normalizedLineTo); normalizedLineTo.To = MatrixUtilities.TransformPoint(graphicLineTo.To, transformMatrix); break; } case GraphicCubicBezierSegment graphicCubicBezier: { var normalizedCubicBezier = new GraphicCubicBezierSegment(); transformedSegments.Add(normalizedCubicBezier); normalizedCubicBezier.ControlPoint1 = MatrixUtilities.TransformPoint(graphicCubicBezier.ControlPoint1, transformMatrix); normalizedCubicBezier.ControlPoint2 = MatrixUtilities.TransformPoint(graphicCubicBezier.ControlPoint2, transformMatrix); normalizedCubicBezier.EndPoint = MatrixUtilities.TransformPoint(graphicCubicBezier.EndPoint, transformMatrix); break; } case GraphicQuadraticBezierSegment graphicQuadraticBezier: { var normalizedQuadraticBezier = new GraphicQuadraticBezierSegment(); transformedSegments.Add(normalizedQuadraticBezier); normalizedQuadraticBezier.ControlPoint = MatrixUtilities.TransformPoint(graphicQuadraticBezier.ControlPoint, transformMatrix); normalizedQuadraticBezier.EndPoint = MatrixUtilities.TransformPoint(graphicQuadraticBezier.EndPoint, transformMatrix); break; } default: break; } } return(transformedSegments); }
/// <summary> /// Normalizes the specified graphic path. /// </summary> private GraphicPathGeometry NormalizeGeometry(GraphicPathGeometry graphicPathGeometry) { GraphicPathGeometry normalizedGeometry = new GraphicPathGeometry(); normalizedGeometry.FillRule = graphicPathGeometry.FillRule; foreach (var pathElement in graphicPathGeometry.Segments) { switch (pathElement) { case GraphicMoveSegment graphicMove: { var normalizedMove = new GraphicMoveSegment(); normalizedGeometry.Segments.Add(normalizedMove); normalizedMove.StartPoint = NormalizePoint(graphicMove.StartPoint); normalizedMove.IsClosed = graphicMove.IsClosed; break; } case GraphicLineSegment graphicLineTo: { var normalizedLineTo = new GraphicLineSegment(); normalizedGeometry.Segments.Add(normalizedLineTo); normalizedLineTo.To = NormalizePoint(graphicLineTo.To); break; } case GraphicCubicBezierSegment graphicCubicBezier: { var normalizedCubicBezier = new GraphicCubicBezierSegment(); normalizedGeometry.Segments.Add(normalizedCubicBezier); normalizedCubicBezier.ControlPoint1 = NormalizePoint(graphicCubicBezier.ControlPoint1); normalizedCubicBezier.ControlPoint2 = NormalizePoint(graphicCubicBezier.ControlPoint2); normalizedCubicBezier.EndPoint = NormalizePoint(graphicCubicBezier.EndPoint); break; } case GraphicQuadraticBezierSegment graphicQuadraticBezier: { var normalizedQuadraticBezier = new GraphicQuadraticBezierSegment(); normalizedGeometry.Segments.Add(normalizedQuadraticBezier); normalizedQuadraticBezier.ControlPoint = NormalizePoint(graphicQuadraticBezier.ControlPoint); normalizedQuadraticBezier.EndPoint = NormalizePoint(graphicQuadraticBezier.EndPoint); break; } } } return(normalizedGeometry); }