src/gui/painting/qbezier.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
   495         qreal cos_a = normals[i].x()*normals[i+1].x() + normals[i].y()*normals[i+1].y();
   495         qreal cos_a = normals[i].x()*normals[i+1].x() + normals[i].y()*normals[i+1].y();
   496         if (cos_a > 1.)
   496         if (cos_a > 1.)
   497             cos_a = 1.;
   497             cos_a = 1.;
   498         if (cos_a < -1.)
   498         if (cos_a < -1.)
   499             cos_a = -1;
   499             cos_a = -1;
   500         angles[i] = acos(cos_a)/Q_PI;
   500         angles[i] = qAcos(cos_a)/Q_PI;
   501     }
   501     }
   502 
   502 
   503     if (angles[0] + angles[1] > 1.) {
   503     if (angles[0] + angles[1] > 1.) {
   504         // more than 180 degrees
   504         // more than 180 degrees
   505         normals[1] = -normals[1];
   505         normals[1] = -normals[1];
   814 
   814 
   815 bool QBezier::findIntersections(const QBezier &a, const QBezier &b,
   815 bool QBezier::findIntersections(const QBezier &a, const QBezier &b,
   816                                 QVector<QPair<qreal, qreal> > *t)
   816                                 QVector<QPair<qreal, qreal> > *t)
   817 {
   817 {
   818     if (IntersectBB(a, b)) {
   818     if (IntersectBB(a, b)) {
   819         QPointF la1(fabs((a.x3 - a.x2) - (a.x2 - a.x1)),
   819         QPointF la1(qFabs((a.x3 - a.x2) - (a.x2 - a.x1)),
   820                     fabs((a.y3 - a.y2) - (a.y2 - a.y1)));
   820                     qFabs((a.y3 - a.y2) - (a.y2 - a.y1)));
   821 	QPointF la2(fabs((a.x4 - a.x3) - (a.x3 - a.x2)),
   821 	QPointF la2(qFabs((a.x4 - a.x3) - (a.x3 - a.x2)),
   822                     fabs((a.y4 - a.y3) - (a.y3 - a.y2)));
   822                     qFabs((a.y4 - a.y3) - (a.y3 - a.y2)));
   823 	QPointF la;
   823 	QPointF la;
   824 	if (la1.x() > la2.x()) la.setX(la1.x()); else la.setX(la2.x());
   824 	if (la1.x() > la2.x()) la.setX(la1.x()); else la.setX(la2.x());
   825 	if (la1.y() > la2.y()) la.setY(la1.y()); else la.setY(la2.y());
   825 	if (la1.y() > la2.y()) la.setY(la1.y()); else la.setY(la2.y());
   826 	QPointF lb1(fabs((b.x3 - b.x2) - (b.x2 - b.x1)),
   826 	QPointF lb1(qFabs((b.x3 - b.x2) - (b.x2 - b.x1)),
   827                     fabs((b.y3 - b.y2) - (b.y2 - b.y1)));
   827                     qFabs((b.y3 - b.y2) - (b.y2 - b.y1)));
   828 	QPointF lb2(fabs((b.x4 - b.x3) - (b.x3 - b.x2)),
   828 	QPointF lb2(qFabs((b.x4 - b.x3) - (b.x3 - b.x2)),
   829                     fabs((b.y4 - b.y3) - (b.y3 - b.y2)));
   829                     qFabs((b.y4 - b.y3) - (b.y3 - b.y2)));
   830 	QPointF lb;
   830 	QPointF lb;
   831 	if (lb1.x() > lb2.x()) lb.setX(lb1.x()); else lb.setX(lb2.x());
   831 	if (lb1.x() > lb2.x()) lb.setX(lb1.x()); else lb.setX(lb2.x());
   832 	if (lb1.y() > lb2.y()) lb.setY(lb1.y()); else lb.setY(lb2.y());
   832 	if (lb1.y() > lb2.y()) lb.setY(lb1.y()); else lb.setY(lb2.y());
   833 	qreal l0;
   833 	qreal l0;
   834 	if (la.x() > la.y())
   834 	if (la.x() > la.y())
  1118     qreal ay = -right.y1 + 3*right.y2 - 3*right.y3 + right.y4;
  1118     qreal ay = -right.y1 + 3*right.y2 - 3*right.y3 + right.y4;
  1119     qreal ex = 3 * (right.x2 - right.x3);
  1119     qreal ex = 3 * (right.x2 - right.x3);
  1120     qreal ey = 3 * (right.y2 - right.y3);
  1120     qreal ey = 3 * (right.y2 - right.y3);
  1121 
  1121 
  1122     qreal s4 = qAbs(6 * (ey * ax - ex * ay) / qSqrt(ex * ex + ey * ey)) + 0.00001f;
  1122     qreal s4 = qAbs(6 * (ey * ax - ex * ay) / qSqrt(ex * ex + ey * ey)) + 0.00001f;
  1123     qreal tf = pow(qreal(9 * flatness / s4), qreal(1./3.));
  1123     qreal tf = qPow(qreal(9 * flatness / s4), qreal(1./3.));
  1124     *tMinus = t - (1 - t) * tf;
  1124     *tMinus = t - (1 - t) * tf;
  1125     *tPlus  = t + (1 - t) * tf;
  1125     *tPlus  = t + (1 - t) * tf;
  1126 }
  1126 }
  1127 
  1127 
  1128 void QBezier::addToPolygonIterative(QPolygonF *p) const
  1128 void QBezier::addToPolygonIterative(QPolygonF *p) const