【问题标题】:Draw only the portion of the QPainter Path bezier curve仅绘制 QPainter Path 贝塞尔曲线的一部分
【发布时间】:2015-11-05 01:24:58
【问题描述】:

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

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

【问题讨论】:

    标签: qt bezier qpainterpath


    【解决方案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;
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 2014-09-29
      • 1970-01-01
      • 2013-03-31
      • 2017-05-18
      • 1970-01-01
      相关资源
      最近更新 更多