@SuppressWarnings("PMD.SystemPrintln") public static void main(String[] args) throws Exception { BufferedImage image = new BufferedImage(800, 600, BufferedImage.TYPE_3BYTE_BGR); Graphics2D graphics = image.createGraphics(); Shape stroked = new DashedShape(new Rectangle2D.Double(0, 0, 4, 4), new float[] {2, 2}, 0); graphics.draw(stroked); graphics.dispose(); ImageIO.write(image, "png", new File("/tmp/image.png")); PathIterator pi = stroked.getPathIterator(new AffineTransform()); float[] point = new float[2]; while (!pi.isDone()) { int type = pi.currentSegment(point); System.out.println(type + " - " + Arrays.toString(point)); pi.next(); } } }
Shape dashShape(Shape shape, Stroke stroke) { if (!(stroke instanceof BasicStroke)) { return shape; } BasicStroke bs = (BasicStroke) stroke; if (bs.getDashArray() == null || bs.getDashArray().length == 0) { return shape; } return new DashedShape(shape, bs.getDashArray(), bs.getDashPhase()); }
@Test public void testMidLine() { Line2D line = new Line2D.Double(0, 0, 25, 0); Shape stroked = new DashedShape(line, new float[] {10, 10}, 0); checkExpected( stroked, new float[] {0, 0, 0}, new float[] {1, 10, 0}, // new float[] {0, 20, 0}, new float[] {1, 25, 0}); }
@Test public void testVerticalLine() { Line2D line = new Line2D.Double(0, 0, 0, 30); Shape stroked = new DashedShape(line, new float[] {10, 10}, 0); checkExpected( stroked, new float[] {0, 0, 0}, new float[] {1, 0, 10}, // new float[] {0, 0, 20}, new float[] {1, 0, 30}); }
@Test public void testDisconnected() { GeneralPath gp = new GeneralPath(); gp.moveTo(0, 0); gp.lineTo(5, 0); gp.moveTo(10, 5); gp.lineTo(15, 5); Shape stroked = new DashedShape(gp, new float[] {2, 2}, 0); checkExpected( stroked, new float[] {0, 0, 0}, new float[] {1, 2, 0}, // new float[] {0, 4, 0}, new float[] {1, 5, 0}, new float[] {0, 10, 5}, new float[] {1, 12, 5}, new float[] {0, 14, 5}, new float[] {1, 15, 5}); }
@Test public void testHorizontalLine() { Line2D line = new Line2D.Double(0, 0, 30, 0); Shape stroked = new DashedShape(line, new float[] {10, 10}, 0); checkExpected( stroked, new float[] {0, 0, 0}, new float[] {1, 10, 0}, // new float[] {0, 20, 0}, new float[] {1, 30, 0}); }
@Test public void testShortLine() { Line2D line = new Line2D.Double(0, 0, 5, 0); Shape stroked = new DashedShape(line, new float[] {10, 10}, 0); checkExpected(stroked, new float[] {0, 0, 0}, new float[] {1, 5, 0}); }
@Test public void testPhase() { Line2D line = new Line2D.Double(0, 0, 25, 0); Shape stroked = new DashedShape(line, new float[] {10, 10}, 5); checkExpected( stroked, new float[] {0, 0, 0}, new float[] {1, 5, 0}, // new float[] {0, 15, 0}, new float[] {1, 25, 0}); }
@Test public void testLShape() { GeneralPath gp = new GeneralPath(); gp.moveTo(0, 0); gp.lineTo(0, 5); gp.lineTo(5, 5); Shape stroked = new DashedShape(gp, new float[] {2, 2}, 0); checkExpected( stroked, new float[] {0, 0, 0}, new float[] {1, 0, 2}, // new float[] {0, 0, 4}, new float[] {1, 0, 5}, new float[] {1, 1, 5}, new float[] {0, 3, 5}, new float[] {1, 5, 5}); }
@Test public void testRectangle() { // checks the SEG_CLOSE termination Rectangle2D r = new Rectangle2D.Double(0, 0, 4, 4); Shape stroked = new DashedShape(r, new float[] {2, 2}, 0); checkExpected( stroked, new float[] {0, 0, 0}, new float[] {1, 2, 0}, // new float[] {0, 4, 0}, new float[] {1, 4, 2}, new float[] {0, 4, 4}, new float[] {1, 2, 4}, new float[] {0, 0, 4}, new float[] {1, 0, 2}, new float[] {0, 0, 0}, new float[] {4, 0, 0}); }
public static void main(String[] args) throws Exception { BufferedImage image = new BufferedImage(800, 600, BufferedImage.TYPE_3BYTE_BGR); Graphics2D graphics = image.createGraphics(); Shape stroked = new DashedShape(new Rectangle2D.Double(0, 0, 4, 4), new float[] { 2, 2}, 0); graphics.draw(stroked); graphics.dispose(); ImageIO.write(image, "png", new File("/tmp/image.png")); PathIterator pi = stroked.getPathIterator(new AffineTransform()); float[] point = new float[2]; while (!pi.isDone()) { int type = pi.currentSegment(point); System.out.println(type + " - " + Arrays.toString(point)); pi.next(); } }
Shape dashShape(Shape shape, Stroke stroke) { if (!(stroke instanceof BasicStroke)) { return shape; } BasicStroke bs = (BasicStroke) stroke; if (bs.getDashArray() == null || bs.getDashArray().length == 0) { return shape; } return new DashedShape(shape, bs.getDashArray(), bs.getDashPhase()); }
Shape dashShape(Shape shape, Stroke stroke) { if(!(stroke instanceof BasicStroke)) { return shape; } BasicStroke bs = (BasicStroke) stroke; if(bs.getDashArray() == null || bs.getDashArray().length == 0) { return shape; } return new DashedShape(shape, bs.getDashArray(), bs.getDashPhase()); }