Рисовать только часть кривой Безье QPainter Path

Я хочу нарисовать только часть изогнутого пути QPainter. У меня такой путь:

QPointF p[4];
p[0] = QPoint(100, 200);
p[1] = QPoint(200,  60);
p[2] = QPoint(500, 180);
p[3] = QPoint(600, 100);
cPath.cubicTo(p[1], -a*p[0] + p[1] + a*p[2], a*p[1] + p[2] -a*p[3], p[2]);

Теперь это рисует путь, как показано на рис. 1.

введите здесь описание изображения

Но теперь я хочу нарисовать кривую только между двумя точками, скажем, p(1) и p(2).

Как я могу нарисовать только часть кривой Безье?


person Gurjot Bhatti    schedule 12.08.2015    source источник


Ответы (1)


Вот как я решил это.

Я использовал QPainterPath::toSubpathPolygons для возврата списка полигонов и получил QPolygonF.

const QMatrix m = QMatrix();
QPolygonF cPoly = cPath.cubicTo(p[1], -a*p[0] + p[1] + a*p[2], a*p[1] + p[2] -a*p[3], p[2]).toSubpathPolygons(m).first();

Затем я перебрал это QPolygonF и проверил, лежат ли точки в этом многоугольнике между двумя точками, которые мне нужны. А затем добавил эти точки в новый полигон.

QPolygonF nPoly;
QPolygonF::iterator i;
for (i = cPoly.begin(); i != cPoly.end(); ++i){
    QPointF pnt = *i;
    if (pnt.rx() >= p[1].rx() && pnt.rx() <= p[2].rx())
    nPoly << pnt;
}

И теперь этот многоугольник можно нарисовать с помощью пути.

person Gurjot Bhatti    schedule 13.08.2015