java.awt.geom.FlatteningPathIterator Java Examples
The following examples show how to use
java.awt.geom.FlatteningPathIterator.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: MainPanel.java From java-swing-tips with MIT License | 6 votes |
@Override public void paintIcon(Component c, Graphics g, int x, int y) { Graphics2D g2 = (Graphics2D) g.create(); g2.translate(x, y); g2.setPaint(Color.BLACK); g2.draw(shape); g2.setPaint(Color.RED); PathIterator i = new FlatteningPathIterator(shape.getPathIterator(null), 1d); double[] coords = new double[6]; while (!i.isDone()) { i.currentSegment(coords); g2.fillRect((int) (coords[0] - .5), (int) (coords[1] - .5), 2, 2); i.next(); } g2.dispose(); }
Example #2
Source File: MainPanel.java From java-swing-tips with MIT License | 5 votes |
public static Polygon convertShape2Polygon(Shape s) { PathIterator i = new FlatteningPathIterator(s.getPathIterator(null), 1d); Polygon polygon = new Polygon(); float[] coords = new float[6]; while (!i.isDone()) { i.currentSegment(coords); polygon.addPoint((int) coords[0], (int) coords[1]); i.next(); } return polygon; }
Example #3
Source File: ZigzagStroke.java From Pixelitor with GNU General Public License v3.0 | 4 votes |
@Override public Shape createStrokedShape(Shape shape) { GeneralPath result = new GeneralPath(); PathIterator it = new FlatteningPathIterator(shape.getPathIterator(null), FLATNESS); float[] points = new float[6]; float moveX = 0, moveY = 0; float lastX = 0, lastY = 0; float thisX = 0, thisY = 0; int type = 0; float next = 0; int phase = 0; while (!it.isDone()) { type = it.currentSegment(points); switch (type) { case SEG_MOVETO: moveX = lastX = points[0]; moveY = lastY = points[1]; result.moveTo(moveX, moveY); next = wavelength / 2; break; case SEG_CLOSE: points[0] = moveX; points[1] = moveY; // fall through case SEG_LINETO: thisX = points[0]; thisY = points[1]; float dx = thisX - lastX; float dy = thisY - lastY; float distance = (float) Math.sqrt(dx * dx + dy * dy); if (distance >= next) { float r = 1.0f / distance; // float angle = (float)Math.atan2( dy, dx ); while (distance >= next) { float x = lastX + next * dx * r; float y = lastY + next * dy * r; // float tx = amplitude*dy*r; // float ty = amplitude*dx*r; if ((phase & 1) == 0) { result.lineTo(x + amplitude * dy * r, y - amplitude * dx * r); } else { result.lineTo(x - amplitude * dy * r, y + amplitude * dx * r); } next += wavelength; phase++; } } next -= distance; lastX = thisX; lastY = thisY; if (type == SEG_CLOSE) { result.closePath(); } break; } it.next(); } return stroke.createStrokedShape(result); }
Example #4
Source File: OutlineWobbleEffect.java From slick2d-maven with BSD 3-Clause "New" or "Revised" License | 4 votes |
/** * @see java.awt.Stroke#createStrokedShape(java.awt.Shape) */ public Shape createStrokedShape (Shape shape) { GeneralPath result = new GeneralPath(); shape = new BasicStroke(getWidth(), BasicStroke.CAP_SQUARE, getJoin()).createStrokedShape(shape); PathIterator it = new FlatteningPathIterator(shape.getPathIterator(null), FLATNESS); float points[] = new float[6]; float moveX = 0, moveY = 0; float lastX = 0, lastY = 0; float thisX = 0, thisY = 0; int type = 0; float next = 0; while (!it.isDone()) { type = it.currentSegment(points); switch (type) { case PathIterator.SEG_MOVETO: moveX = lastX = randomize(points[0]); moveY = lastY = randomize(points[1]); result.moveTo(moveX, moveY); next = 0; break; case PathIterator.SEG_CLOSE: points[0] = moveX; points[1] = moveY; // Fall into.... case PathIterator.SEG_LINETO: thisX = randomize(points[0]); thisY = randomize(points[1]); float dx = thisX - lastX; float dy = thisY - lastY; float distance = (float)Math.sqrt(dx * dx + dy * dy); if (distance >= next) { float r = 1.0f / distance; while (distance >= next) { float x = lastX + next * dx * r; float y = lastY + next * dy * r; result.lineTo(randomize(x), randomize(y)); next += detail; } } next -= distance; lastX = thisX; lastY = thisY; break; } it.next(); } return result; }
Example #5
Source File: OutlineZigzagEffect.java From slick2d-maven with BSD 3-Clause "New" or "Revised" License | 4 votes |
/** * @see java.awt.Stroke#createStrokedShape(java.awt.Shape) */ public Shape createStrokedShape (Shape shape) { GeneralPath result = new GeneralPath(); PathIterator it = new FlatteningPathIterator(shape.getPathIterator(null), FLATNESS); float points[] = new float[6]; float moveX = 0, moveY = 0; float lastX = 0, lastY = 0; float thisX = 0, thisY = 0; int type = 0; float next = 0; int phase = 0; while (!it.isDone()) { type = it.currentSegment(points); switch (type) { case PathIterator.SEG_MOVETO: moveX = lastX = points[0]; moveY = lastY = points[1]; result.moveTo(moveX, moveY); next = wavelength / 2; break; case PathIterator.SEG_CLOSE: points[0] = moveX; points[1] = moveY; // Fall into.... case PathIterator.SEG_LINETO: thisX = points[0]; thisY = points[1]; float dx = thisX - lastX; float dy = thisY - lastY; float distance = (float)Math.sqrt(dx * dx + dy * dy); if (distance >= next) { float r = 1.0f / distance; while (distance >= next) { float x = lastX + next * dx * r; float y = lastY + next * dy * r; if ((phase & 1) == 0) result.lineTo(x + amplitude * dy * r, y - amplitude * dx * r); else result.lineTo(x - amplitude * dy * r, y + amplitude * dx * r); next += wavelength; phase++; } } next -= distance; lastX = thisX; lastY = thisY; if (type == PathIterator.SEG_CLOSE) result.closePath(); break; } it.next(); } return new BasicStroke(getWidth(), BasicStroke.CAP_SQUARE, getJoin()).createStrokedShape(result); }
Example #6
Source File: GeoPath.java From mil-sym-java with Apache License 2.0 | 4 votes |
public void arcTo(GeoPoint pivot, double widthMeters, double heightMeters, double leftAzimuthDegrees, double rightAzimuthDegrees) { Path2D newPath = new Path2D.Double(); Arc2D arc; if (leftAzimuthDegrees > rightAzimuthDegrees) { arc = new Arc2D.Double(-widthMeters / 2, -heightMeters / 2, widthMeters, heightMeters, leftAzimuthDegrees - 90, Math.abs((360 - leftAzimuthDegrees) + rightAzimuthDegrees), Arc2D.OPEN); } else { arc = new Arc2D.Double(-widthMeters / 2, -heightMeters / 2, widthMeters, heightMeters, leftAzimuthDegrees - 90, Math.abs(leftAzimuthDegrees - rightAzimuthDegrees), Arc2D.OPEN); } GeoPoint point = null; if (pivot != null) { PathIterator it = new FlatteningPathIterator(arc.getPathIterator(null), flatnessDistanceMeters, limit); while (!it.isDone()) { // Add a point to the list for each segment flattened from the curve double[] strokePoints = new double[6]; int type = it.currentSegment(strokePoints); double x = strokePoints[0]; double y = strokePoints[1]; double azimuth = Angle.toDegrees(Math.atan2(x, y)); GlobalCoordinates coord = new GlobalCoordinates(pivot.getLatitude(), pivot.getLongitude()); GlobalCoordinates c = geoCalc.calculateEndingGlobalCoordinates(REFERENCE_ELLIPSOID, coord, azimuth, new Point2D.Double().distance(x, y)); switch (type) { case PathIterator.SEG_MOVETO: newPath.moveTo(c.getLongitude(), c.getLatitude()); GeoPoint startPoint = new GeoPoint(c.getLongitude(), c.getLatitude()); if (toPoints.size() > 0 && !startPoint.equals(toPoints.get(toPoints.size() - 1))) { lineTo(startPoint); } break; case PathIterator.SEG_LINETO: newPath.lineTo(c.getLongitude(), c.getLatitude()); point = new GeoPoint(c.getLongitude(), c.getLatitude()); break; } it.next(); } } path.append(newPath, true); toPoints.add(point); }
Example #7
Source File: ZigzagStroke.java From weblaf with GNU General Public License v3.0 | 4 votes |
@Override public Shape createStrokedShape ( final Shape shape ) { final GeneralPath result = new GeneralPath (); final PathIterator it = new FlatteningPathIterator ( shape.getPathIterator ( null ), FLATNESS ); final float[] points = new float[ 6 ]; float moveX = 0; float moveY = 0; float lastX = 0; float lastY = 0; float thisX; float thisY; int type; float next = 0; int phase = 0; while ( !it.isDone () ) { type = it.currentSegment ( points ); switch ( type ) { case PathIterator.SEG_MOVETO: moveX = lastX = points[ 0 ]; moveY = lastY = points[ 1 ]; result.moveTo ( moveX, moveY ); next = wavelength / 2; break; case PathIterator.SEG_CLOSE: points[ 0 ] = moveX; points[ 1 ] = moveY; // Fall into.... case PathIterator.SEG_LINETO: thisX = points[ 0 ]; thisY = points[ 1 ]; final float dx = thisX - lastX; final float dy = thisY - lastY; final float distance = ( float ) Math.sqrt ( dx * dx + dy * dy ); if ( distance >= next ) { final float r = 1.0f / distance; while ( distance >= next ) { final float x = lastX + next * dx * r; final float y = lastY + next * dy * r; if ( ( phase & 1 ) == 0 ) { result.lineTo ( x + amplitude * dy * r, y - amplitude * dx * r ); } else { result.lineTo ( x - amplitude * dy * r, y + amplitude * dx * r ); } next += wavelength; phase++; } } next -= distance; lastX = thisX; lastY = thisY; if ( type == PathIterator.SEG_CLOSE ) { result.closePath (); } break; } it.next (); } return stroke.createStrokedShape ( result ); }
Example #8
Source File: RandomStroke.java From weblaf with GNU General Public License v3.0 | 4 votes |
@Override public Shape createStrokedShape ( Shape shape ) { final GeneralPath result = new GeneralPath (); shape = new BasicStroke ( 10 ).createStrokedShape ( shape ); final PathIterator it = new FlatteningPathIterator ( shape.getPathIterator ( null ), FLATNESS ); final float[] points = new float[ 6 ]; float moveX = 0; float moveY = 0; float lastX = 0; float lastY = 0; float thisX; float thisY; int type; float next = 0; while ( !it.isDone () ) { type = it.currentSegment ( points ); switch ( type ) { case PathIterator.SEG_MOVETO: moveX = lastX = randomize ( points[ 0 ] ); moveY = lastY = randomize ( points[ 1 ] ); result.moveTo ( moveX, moveY ); next = 0; break; case PathIterator.SEG_CLOSE: points[ 0 ] = moveX; points[ 1 ] = moveY; // Fall into.... case PathIterator.SEG_LINETO: thisX = randomize ( points[ 0 ] ); thisY = randomize ( points[ 1 ] ); final float dx = thisX - lastX; final float dy = thisY - lastY; final float distance = ( float ) Math.sqrt ( dx * dx + dy * dy ); if ( distance >= next ) { final float r = 1.0f / distance; while ( distance >= next ) { final float x = lastX + next * dx * r; final float y = lastY + next * dy * r; result.lineTo ( randomize ( x ), randomize ( y ) ); next += detail; } } next -= distance; lastX = thisX; lastY = thisY; break; } it.next (); } return result; }
Example #9
Source File: RegionAction.java From birt with Eclipse Public License 1.0 | 4 votes |
private int[] shape2polyCoords( Shape shape ) { if ( shape == null ) { return null; } ArrayList<Integer> al = new ArrayList<Integer>( ); FlatteningPathIterator pitr = new FlatteningPathIterator( shape.getPathIterator( null ), 1 ); double[] data = new double[6]; while ( !pitr.isDone( ) ) { int type = pitr.currentSegment( data ); switch ( type ) { case PathIterator.SEG_MOVETO : al.add( (int) data[0] ); al.add( (int) data[1] ); break; case PathIterator.SEG_LINETO : al.add( (int) data[0] ); al.add( (int) data[1] ); break; case PathIterator.SEG_QUADTO : al.add( (int) data[0] ); al.add( (int) data[1] ); al.add( (int) data[2] ); al.add( (int) data[3] ); break; case PathIterator.SEG_CUBICTO : al.add( (int) data[0] ); al.add( (int) data[1] ); al.add( (int) data[2] ); al.add( (int) data[3] ); al.add( (int) data[4] ); al.add( (int) data[5] ); break; case PathIterator.SEG_CLOSE : break; } pitr.next( ); } if ( al.size( ) == 0 ) { return null; } int[] coords = new int[al.size( )]; for ( int i = 0; i < al.size( ); i++ ) { coords[i] = al.get( i ); } return coords; }
Example #10
Source File: ImageMapEmitter.java From birt with Eclipse Public License 1.0 | 4 votes |
/** * Convert AWT shape to image map coordinates. * * @param shape * @return */ private String shape2polyCoords( Shape shape ) { if ( shape == null ) { return null; } ArrayList<Double> al = new ArrayList<Double>( ); FlatteningPathIterator pitr = new FlatteningPathIterator( shape.getPathIterator( null ), 1 ); double[] data = new double[6]; while ( !pitr.isDone( ) ) { int type = pitr.currentSegment( data ); switch ( type ) { case PathIterator.SEG_MOVETO : al.add( new Double( data[0] ) ); al.add( new Double( data[1] ) ); break; case PathIterator.SEG_LINETO : al.add( new Double( data[0] ) ); al.add( new Double( data[1] ) ); break; case PathIterator.SEG_QUADTO : al.add( new Double( data[0] ) ); al.add( new Double( data[1] ) ); al.add( new Double( data[2] ) ); al.add( new Double( data[3] ) ); break; case PathIterator.SEG_CUBICTO : al.add( new Double( data[0] ) ); al.add( new Double( data[1] ) ); al.add( new Double( data[2] ) ); al.add( new Double( data[3] ) ); al.add( new Double( data[4] ) ); al.add( new Double( data[5] ) ); break; case PathIterator.SEG_CLOSE : break; } pitr.next( ); } if ( al.size( ) == 0 ) { return null; } StringBuffer sb = new StringBuffer( ); for ( int i = 0; i < al.size( ); i++ ) { Double db = al.get( i ); if ( i > 0 ) { sb.append( "," ); //$NON-NLS-1$ } sb.append( (int) translateCoor( db.doubleValue( ) ) ); } return sb.toString( ); }
Example #11
Source File: AbstractBrushTool.java From Pixelitor with GNU General Public License v3.0 | 4 votes |
private void doTrace(Drawable dr, Shape shape) { View view = dr.getComp().getView(); PPoint startingPoint = null; var fpi = new FlatteningPathIterator( shape.getPathIterator(null), 1.0); // MeasuredShape[] subpaths = MeasuredShape.getSubpaths(shape, 3.0f); // GeneralPath gp = new GeneralPath(); // subpaths[0].writeShape(new GeneralPathWriter(gp)); // PathIterator fpi = gp.getPathIterator(null); boolean brushStrokePrepared = false; float[] coords = new float[2]; int subPathIndex = -1; while (!fpi.isDone()) { int type = fpi.currentSegment(coords); double x = coords[0]; double y = coords[1]; PPoint p = PPoint.lazyFromIm(x, y, view); affectedArea.updateWith(p); switch (type) { case SEG_MOVETO: // we can get here more than once if there are multiple subpaths! subPathIndex++; startingPoint = p; if (!brushStrokePrepared) { // TODO this should not be here, and it should not need // a point argument, but it is here because some hacks // in the clone and smudge tools need that point prepareProgrammaticBrushStroke(dr, p); brushStrokePrepared = true; } if (subPathIndex != 0) { brush.finishBrushStroke(); } brush.startAt(p); break; case SEG_LINETO: brush.continueTo(p); break; case SEG_CLOSE: brush.continueTo(startingPoint); break; default: throw new IllegalArgumentException("type = " + type); } fpi.next(); } }
Example #12
Source File: ShapeStroke.java From Pixelitor with GNU General Public License v3.0 | 4 votes |
@Override public Shape createStrokedShape(Shape shape) { GeneralPath result = new GeneralPath(); PathIterator it = new FlatteningPathIterator(shape.getPathIterator(null), FLATNESS); float[] points = new float[6]; float moveX = 0, moveY = 0; float lastX = 0, lastY = 0; float thisX = 0, thisY = 0; int type = 0; float next = 0; int currentShape = 0; int length = shapes.length; while (currentShape < length && !it.isDone()) { type = it.currentSegment(points); switch (type) { case SEG_MOVETO: moveX = lastX = points[0]; moveY = lastY = points[1]; result.moveTo(moveX, moveY); next = 0; break; case SEG_CLOSE: points[0] = moveX; points[1] = moveY; // fall through case SEG_LINETO: thisX = points[0]; thisY = points[1]; float dx = thisX - lastX; float dy = thisY - lastY; float distance = (float) Math.sqrt(dx * dx + dy * dy); if (distance >= next) { float r = 1.0f / distance; float angle = (float) Math.atan2(dy, dx); while (currentShape < length && distance >= next) { float x = lastX + next * dx * r; float y = lastY + next * dy * r; t.setToTranslation(x, y); t.rotate(angle); result.append(t.createTransformedShape(shapes[currentShape]), false); next += advance; currentShape++; if (repeat) { currentShape %= length; } } } next -= distance; lastX = thisX; lastY = thisY; break; } it.next(); } return result; }
Example #13
Source File: WobbleStroke.java From Pixelitor with GNU General Public License v3.0 | 4 votes |
@Override public Shape createStrokedShape(Shape shape) { // rand.setSeed(seed); GeneralPath result = new GeneralPath(); shape = new BasicStroke(basicStrokeWidth).createStrokedShape(shape); PathIterator it = new FlatteningPathIterator(shape.getPathIterator(null), FLATNESS); float[] points = new float[6]; float moveX = 0, moveY = 0; float lastX = 0, lastY = 0; float thisX = 0, thisY = 0; int type = 0; // boolean first = false; float next = 0; while (!it.isDone()) { type = it.currentSegment(points); switch (type) { case SEG_MOVETO: moveX = lastX = randomize(points[0]); moveY = lastY = randomize(points[1]); result.moveTo(moveX, moveY); // first = true; next = 0; break; case SEG_CLOSE: points[0] = moveX; points[1] = moveY; // fall through case SEG_LINETO: thisX = randomize(points[0]); thisY = randomize(points[1]); float dx = thisX - lastX; float dy = thisY - lastY; float distance = (float) Math.sqrt(dx * dx + dy * dy); if (distance >= next) { float r = 1.0f / distance; // float angle = (float)Math.atan2( dy, dx ); while (distance >= next) { float x = lastX + next * dx * r; float y = lastY + next * dy * r; result.lineTo(randomize(x), randomize(y)); next += detail; } } next -= distance; // first = false; lastX = thisX; lastY = thisY; break; } it.next(); } return result; }
Example #14
Source File: Morphing2D.java From filthy-rich-clients with BSD 3-Clause "New" or "Revised" License | 4 votes |
/** * @{inheritDoc} */ public PathIterator getPathIterator(AffineTransform at, double flatness) { return new FlatteningPathIterator(getPathIterator(at), flatness); }
Example #15
Source File: ShapeInterpolator.java From FastAsyncWorldedit with GNU General Public License v3.0 | 4 votes |
public PathIterator getPathIterator(AffineTransform at, double flatness) { return new FlatteningPathIterator(getPathIterator(at), flatness); }
Example #16
Source File: AbstractShape.java From pumpernickel with MIT License | 4 votes |
@Override public PathIterator getPathIterator(AffineTransform at, double flatness) { return new FlatteningPathIterator(getPathIterator(at), flatness); }
Example #17
Source File: AreaX.java From pumpernickel with MIT License | 2 votes |
/** * Creates a <code>PathIterator</code> for the flattened outline of this * <code>AreaX</code> object. Only uncurved path segments represented by the * SEG_MOVETO, SEG_LINETO, and SEG_CLOSE point types are returned by the * iterator. This <code>AreaX</code> object is unchanged. * * @param at * an optional <code>AffineTransform</code> to be applied to the * coordinates as they are returned in the iteration, or * <code>null</code> if untransformed coordinates are desired * @param flatness * the maximum amount that the control points for a given curve * can vary from colinear before a subdivided curve is replaced * by a straight line connecting the end points * @return the <code>PathIterator</code> object that returns the geometry of * the outline of this <code>AreaX</code>, one segment at a time. */ public synchronized PathIterator getPathIterator(AffineTransform at, double flatness) { return new FlatteningPathIterator(getPathIterator(at), flatness); }