KoShape *KoPathShapeFactory::createDefaultShape(KoDocumentResourceManager *) const { KoPathShape* path = new KoPathShape(); path->moveTo(QPointF(0, 50)); path->curveTo(QPointF(0, 120), QPointF(50, 120), QPointF(50, 50)); path->curveTo(QPointF(50, -20), QPointF(100, -20), QPointF(100, 50)); path->normalize(); path->setStroke(new KoShapeStroke(1.0)); return path; }
void TestSegmentTypeCommand::changeToLine() { KoPathShape path; path.moveTo( QPointF(0,0) ); path.curveTo( QPointF(25,25), QPointF(75,25), QPointF(100,0) ); KoPathPointData segment(&path, KoPathPointIndex(0,0)); QList<KoPathPointData> segments; segments.append(segment); // get first segment KoPathSegment s = path.segmentByIndex(KoPathPointIndex(0,0)); KoPathSegmentTypeCommand cmd(segments, KoPathSegmentTypeCommand::Line); QVERIFY(s.first()->activeControlPoint2()); QVERIFY(s.second()->activeControlPoint1()); cmd.redo(); QVERIFY(!s.first()->activeControlPoint2()); QVERIFY(!s.second()->activeControlPoint1()); cmd.undo(); QVERIFY(s.first()->activeControlPoint2()); QVERIFY(s.second()->activeControlPoint1()); }
void KoPathShapeLoaderPrivate::svgCurveToCubic(qreal x1, qreal y1, qreal x2, qreal y2, qreal x, qreal y, bool abs) { QPointF p1, p2; if (abs) { p1 = QPointF(x1, y1); p2 = QPointF(x2, y2); lastPoint = QPointF(x, y); } else { p1 = lastPoint + QPointF(x1, y1); p2 = lastPoint + QPointF(x2, y2); lastPoint += QPointF(x, y); } path->curveTo(p1, p2, lastPoint); }
KoPathShape * bezierFit(const QList<QPointF> &points, float error) { FitVector tHat1, tHat2; tHat1 = ComputeLeftTangent(points, 0); tHat2 = ComputeRightTangent(points, points.count() - 1); int width = 0; QPointF *curve; curve = FitCubic(points, 0, points.count() - 1, tHat1, tHat2, error, width); KoPathShape * path = new KoPathShape(); if (width > 3) { path->moveTo(curve[0]); path->curveTo(curve[1], curve[2], curve[3]); for (int i = 4; i < width; i += 4) { path->curveTo(curve[i+1], curve[i+2], curve[i+3]); } } delete[] curve; return path; }