internal static FlattenedSegment Create(Line?previousCenter, Line center, Line?nextCenter, double strokeThickness) { return(CreateOffset(center, Offset(strokeThickness / 2), Offset(-strokeThickness / 2))); Line Offset(double offset) { var ol = center.Offset(offset); if (previousCenter is { } pl&& pl.Length > 0 && ol.TrimOrExtendStartWith(pl.Offset(offset)) is { } temp1) { ol = temp1; } if (nextCenter is { } nl&& nl.Length > 0 && ol.TrimOrExtendEndWith(nl.Offset(offset)) is { } temp2) { ol = temp2; } return(ol); } }
internal static FlattenedSegment CreateEndLineCap(Line line, PenLineCap endLineCap, double strokeThickness) { switch (endLineCap) { case PenLineCap.Square: var cl = new Line(line.EndPoint, line.EndPoint + (strokeThickness / 2 * line.Direction)); return(CreateOffset(cl, cl.Offset(strokeThickness / 2), cl.Offset(-strokeThickness / 2))); case PenLineCap.Round: return(CreateRound(line, strokeThickness, isStart: false)); case PenLineCap.Triangle: return(CreateTriangle(line, strokeThickness, isStart: false)); case PenLineCap.Flat: default: throw new ArgumentOutOfRangeException(nameof(endLineCap), endLineCap, "Unknown line cap."); } }