public static BezierPath toBezierPath(final PathIterator iterator) { final BezierPath path = new BezierPath(); final double[] segment = new double[6]; for (; !iterator.isDone(); iterator.next()) { final int type = iterator.currentSegment(segment); switch (type) { case PathIterator.SEG_MOVETO: path.moveTo(segment[0], segment[1]); break; case PathIterator.SEG_LINETO: path.lineTo(segment[0], segment[1]); break; case PathIterator.SEG_QUADTO: path.quadTo(segment[0], segment[1], segment[2], segment[3]); break; case PathIterator.SEG_CUBICTO: path.curveTo(segment[0], segment[1], segment[2], segment[3], segment[4], segment[5]); break; case PathIterator.SEG_CLOSE: path.setClosed(true); break; } } return path; }
/** * Adds the curve to the bezier path. * * @param bezCurve * @param bezierPath */ private static void addCurveTo(Point2D.Double[] bezCurve, BezierPath bezierPath, double errorSquared, boolean connectsCorners) { BezierPath.Node lastNode = bezierPath.get(bezierPath.size() - 1); double error = Math.sqrt(errorSquared); if (connectsCorners && Geom.lineContainsPoint(lastNode.x[0], lastNode.y[0], bezCurve[3].x, bezCurve[3].y, bezCurve[1].x, bezCurve[1].y, error) && Geom.lineContainsPoint(lastNode.x[0], lastNode.y[0], bezCurve[3].x, bezCurve[3].y, bezCurve[2].x, bezCurve[2].y, error)) { bezierPath.lineTo( bezCurve[3].x, bezCurve[3].y); } else { bezierPath.curveTo( bezCurve[1].x, bezCurve[1].y, bezCurve[2].x, bezCurve[2].y, bezCurve[3].x, bezCurve[3].y); } }
break; case PathIterator.SEG_CUBICTO: bezierPath.curveTo(segment[0], segment[1], segment[2], segment[3], segment[4], segment[5]); break; case PathIterator.SEG_CLOSE:
curveTo(coords[0], coords[1], coords[2], coords[3], coords[4], coords[5]); break; case PathIterator.SEG_LINETO:
break; case PathIterator.SEG_CUBICTO: bezierPath.curveTo(segment[0], segment[1], segment[2], segment[3], segment[4], segment[5]); break; case PathIterator.SEG_CLOSE:
v2Add(bezCurve[3], v2Scale(tHat2, dist), bezCurve[2]); bezierPath.curveTo( bezCurve[1].x, bezCurve[1].y, bezCurve[2].x, bezCurve[2].y,
break; case PathIterator.SEG_CUBICTO: bp.curveTo(coords[0], coords[1], coords[2], coords[3], coords[4], coords[5]); break; case PathIterator.SEG_CLOSE:
break; case PathIterator.SEG_CUBICTO: bp.curveTo(coords[0], coords[1], coords[2], coords[3], coords[4], coords[5]); break; case PathIterator.SEG_CLOSE: