public VcGenStroke() { m_stroker = new MathStroke(); m_src_vertices = new vertex_sequence(); m_out_vertices = new point_d_vector(); m_status = status_e.initial; }
public static void ShortenPath(vertex_sequence vs, double s, uint closed) { //typedef typename VertexSequence::value_type vertex_type; if(s > 0.0 && vs.Size() > 1) { double d; int n = (int)(vs.Size() - 2); while(n != 0) { d = vs[n].dist; if(d > s) break; vs.RemoveLast(); s -= d; --n; } if(vs.Size() < 2) { vs.RemoveAll(); } else { n = (int)vs.Size() - 1; VertexDistance prev = vs[n - 1]; VertexDistance last = vs[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)) vs.RemoveLast(); vs.close(closed != 0); } } }