public override void rewind(int idx) { m_poly.rewind(0); m_idx = idx; m_curve.approximation_scale(1); switch (idx) { default: case 0: // Control line 1 m_curve.init(m_poly.GetXN(0), m_poly.GetYN(0), (m_poly.GetXN(0) + m_poly.GetXN(1)) * 0.5, (m_poly.GetYN(0) + m_poly.GetYN(1)) * 0.5, (m_poly.GetXN(0) + m_poly.GetXN(1)) * 0.5, (m_poly.GetYN(0) + m_poly.GetYN(1)) * 0.5, m_poly.GetXN(1), m_poly.GetYN(1)); m_stroke.rewind(0); break; case 1: // Control line 2 m_curve.init(m_poly.GetXN(2), m_poly.GetYN(2), (m_poly.GetXN(2) + m_poly.GetXN(3)) * 0.5, (m_poly.GetYN(2) + m_poly.GetYN(3)) * 0.5, (m_poly.GetXN(2) + m_poly.GetXN(3)) * 0.5, (m_poly.GetYN(2) + m_poly.GetYN(3)) * 0.5, m_poly.GetXN(3), m_poly.GetYN(3)); m_stroke.rewind(0); break; case 2: // Curve itself m_curve.init(m_poly.GetXN(0), m_poly.GetYN(0), m_poly.GetXN(1), m_poly.GetYN(1), m_poly.GetXN(2), m_poly.GetYN(2), m_poly.GetXN(3), m_poly.GetYN(3)); m_stroke.rewind(0); break; case 3: // Point 1 m_ellipse.init(m_poly.GetXN(0), m_poly.GetYN(0), point_radius(), point_radius(), 20); m_ellipse.rewind(0); break; case 4: // Point 2 m_ellipse.init(m_poly.GetXN(1), m_poly.GetYN(1), point_radius(), point_radius(), 20); m_ellipse.rewind(0); break; case 5: // Point 3 m_ellipse.init(m_poly.GetXN(2), m_poly.GetYN(2), point_radius(), point_radius(), 20); m_ellipse.rewind(0); break; case 6: // Point 4 m_ellipse.init(m_poly.GetXN(3), m_poly.GetYN(3), point_radius(), point_radius(), 20); m_ellipse.rewind(0); break; } }