仅绘制QPainter Path贝塞尔曲线的一部分

时间:2015-08-12 12:24:29

标签: qt bezier qpainterpath

我想只绘制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]);

现在这将绘制路径,如 Fig 1

所示

enter image description here

但现在我只想绘制2点之间的曲线,比如p(1)和p(2)。

如何只绘制贝塞尔曲线的一部分?

1 个答案:

答案 0 :(得分: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;
}

现在这个多边形可以用路径绘制。