// Vertex Source Interface void RewindZero() { if (m_status == StrokeMath.Status.Init) { vertexDistanceList.Close(true); if (m_auto_detect) { if (m_orientation == EndVertexOrientation.Unknown) { m_orientation = (AggMath.CalculatePolygonArea(vertexDistanceList) > 0.0) ? EndVertexOrientation.CCW : EndVertexOrientation.CW; } } switch (m_orientation) { case EndVertexOrientation.CCW: { m_stroker.Width = m_width; } break; case EndVertexOrientation.CW: { m_stroker.Width = -m_width; } break; } } m_status = StrokeMath.Status.Ready; m_src_vertex = 0; }
public static void ShortenPath(VertexDistanceList vertexDistanceList, double s, bool closed) { if (s > 0.0 && vertexDistanceList.Count > 1) { double d; int n = (int)(vertexDistanceList.Count - 2); while (n != 0) { d = vertexDistanceList[n].dist; if (d > s) { break; } vertexDistanceList.RemoveLast(); s -= d; --n; } if (vertexDistanceList.Count < 2) { vertexDistanceList.Clear(); } else { n = (int)vertexDistanceList.Count - 1; VertexDistance prev = vertexDistanceList[n - 1]; VertexDistance last = vertexDistanceList[n]; d = (prev.dist - s) / prev.dist; double x = prev.x + (last.x - prev.x) * d; double y = prev.y + (last.y - prev.y) * d; last.x = x; last.y = y; if (!prev.IsEqual(last)) { vertexDistanceList.RemoveLast(); } vertexDistanceList.Close(closed); } } }
public static void ShortenPath(VertexDistanceList vertexDistanceList, double s, bool closed) { if (s > 0.0 && vertexDistanceList.Count > 1) { double d; int n = (int)(vertexDistanceList.Count - 2); while (n != 0) { d = vertexDistanceList[n].dist; if (d > s) break; vertexDistanceList.RemoveLast(); s -= d; --n; } if (vertexDistanceList.Count < 2) { vertexDistanceList.Clear(); } else { n = (int)vertexDistanceList.Count - 1; VertexDistance prev = vertexDistanceList[n - 1]; VertexDistance last = vertexDistanceList[n]; d = (prev.dist - s) / prev.dist; double x = prev.x + (last.x - prev.x) * d; double y = prev.y + (last.y - prev.y) * d; last.x = x; last.y = y; if (!prev.IsEqual(last)) { vertexDistanceList.RemoveLast(); } vertexDistanceList.Close(closed); } } }