PolyBezierCurve::PolyBezierCurve( const VectorX1i & degs, const VectorX2s & points ) : m_degs(degs) , m_controlPoints(points) , m_segments(degs.rows()) , m_iter(pointsBegin()) , m_currentSegment(0) {}
VectorX1s PolyBezierCurve::getSegmentCtrlPtsIndices( const int & segment ) { // std::cout << "m_segments" << m_segments << std::endl; // std::cout << "segment" << segment << std::endl; assert( (segment >= 0) && (segment < m_segments) ); VectorX2sIterator pointsBeginIter = pointsBegin(); int segCount = 0; // Advance the iterator of the control points by the degree of each precedented segment while (segCount < segment) { pointsBeginIter += m_degs[segCount]; ++segCount; } // Return indices of control points VectorX1s pointIndices; mathdef::resize(pointIndices, m_degs[segment] + 1); for (int i = 0; i <= m_degs[segment]; i++, pointsBeginIter++) { pointIndices[i] = pointsBeginIter.getCurrentRow(); } return pointIndices; }
VectorX2sIterator& PolyBezierCurve::resetToFirstSegment() { m_iter = pointsBegin(); m_currentSegment = 0; return m_iter; }
PolyBezierCurve::PolyBezierCurve() : m_degs() , m_controlPoints() , m_segments(0) , m_iter(pointsBegin()) , m_currentSegment(0) {}
Interface0DIterator Curve::verticesBegin() { return pointsBegin(0); }