// Draw the pointy ends on a line. void DrawPointyEnds(GraphicsTarget g, SymPath longPath, float pointyLengthStart, float pointyLengthEnd, float lineWidth) { // Get locations of points at the tip, half-way, and base of the pointy tips. float length = longPath.BizzarroLength; float[] distances, angles; if (length >= pointyLengthStart + pointyLengthEnd) { distances = new float[6] { 0, pointyLengthStart / 2, pointyLengthStart / 2, length - pointyLengthEnd - pointyLengthStart, pointyLengthEnd / 2, pointyLengthEnd / 2 }; } else { float scaleFactor = length / (pointyLengthStart + pointyLengthEnd); distances = new float[6] { 0, (pointyLengthStart / 2) * scaleFactor, (pointyLengthStart / 2) * scaleFactor, 0, (pointyLengthEnd / 2) * scaleFactor, (pointyLengthEnd / 2) * scaleFactor }; } PointF[] pointsAlongPath = longPath.FindPointsAlongLineBizzarro(distances, out angles); // Each pointy tip is composed of a polygon of 5 points. PointF[] tipCorners = new PointF[5]; float midpointWidth = lineWidth * 0.666F; // Makes a sort of curvy tip. if (pointyLengthStart > 0) { // Draw point at beginning. tipCorners[0] = pointsAlongPath[0]; tipCorners[1] = Util.MoveDistance(pointsAlongPath[1], midpointWidth / 2, angles[1] - 90.0F); tipCorners[4] = Util.MoveDistance(pointsAlongPath[1], midpointWidth / 2, angles[1] + 90.0F); tipCorners[2] = Util.MoveDistance(pointsAlongPath[2], lineWidth / 2, angles[2] - 90.0F); tipCorners[3] = Util.MoveDistance(pointsAlongPath[2], lineWidth / 2, angles[2] + 90.0F); g.FillPolygon(pointyEndsBrush, tipCorners, true); } if (pointyLengthEnd > 0) { // Draw point at end. tipCorners[0] = pointsAlongPath[5]; tipCorners[1] = Util.MoveDistance(pointsAlongPath[4], midpointWidth / 2, angles[4] - 90.0F); tipCorners[4] = Util.MoveDistance(pointsAlongPath[4], midpointWidth / 2, angles[4] + 90.0F); tipCorners[2] = Util.MoveDistance(pointsAlongPath[3], lineWidth / 2, angles[3] - 90.0F); tipCorners[3] = Util.MoveDistance(pointsAlongPath[3], lineWidth / 2, angles[3] + 90.0F); g.FillPolygon(pointyEndsBrush, tipCorners, true); } }