コード例 #1
0
        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;
            }
        }