QList<KoSubpath *> KarbonSimplifyPath::split( const KoPathShape &path ) { QList<KoSubpath *> res; KoSubpath *subpath = new KoSubpath; res.append( subpath ); for ( int i = 0; i < path.pointCount(); ++i ) { KoPathPoint *p = path.pointByIndex( KoPathPointIndex(0, i) ); // if the path separates two subpaths // (if it isn't smooth nor the first or last point) if ( i != 0 && i != path.pointCount()-1 ) { KoPathPoint *prev = path.pointByIndex( KoPathPointIndex(0, i-1) ); KoPathPoint *next = path.pointByIndex( KoPathPointIndex(0, i+1) ); if ( ! p->isSmooth(prev, next) ) { // create a new subpath subpath->append( new KoPathPoint(*p) ); subpath = new KoSubpath; res.append( subpath ); } } subpath->append( new KoPathPoint(*p) ); } return res; }
void RoundCornersCommand::copyPath(KoPathShape * dst, KoPathShape * src) { dst->clear(); int subpathCount = src->subpathCount(); for (int subpathIndex = 0; subpathIndex < subpathCount; ++subpathIndex) { int pointCount = src->subpathPointCount(subpathIndex); if (! pointCount) continue; KoSubpath * subpath = new KoSubpath; for (int pointIndex = 0; pointIndex < pointCount; ++pointIndex) { KoPathPoint * p = src->pointByIndex(KoPathPointIndex(subpathIndex, pointIndex)); KoPathPoint * c = new KoPathPoint(*p); c->setParent(dst); subpath->append(c); } dst->addSubpath(subpath, subpathIndex); } dst->setTransformation(src->transformation()); }