<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2F2D_Graphics%2FShape</id>
		<title>Java Tutorial/2D Graphics/Shape - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2F2D_Graphics%2FShape"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Shape&amp;action=history"/>
		<updated>2026-04-06T22:49:37Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Shape&amp;diff=3470&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Shape&amp;diff=3470&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:44, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Shape&amp;diff=3471&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/2D_Graphics/Shape&amp;diff=3471&amp;oldid=prev"/>
				<updated>2010-05-31T15:24:55Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Add Round Rectangle, Ellipse Arc to a shape ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.BasicStroke;&lt;br /&gt;
import java.awt.BorderLayout;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.Arc2D;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import java.awt.geom.Line2D;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import java.awt.geom.RoundRectangle2D;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import javax.swing.JComponent;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
public class ShapeMaker extends JFrame {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    new ShapeMaker();&lt;br /&gt;
  }&lt;br /&gt;
  public ShapeMaker() {&lt;br /&gt;
    this.setSize(300, 300);&lt;br /&gt;
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    this.add(new PaintSurface(), BorderLayout.CENTER);&lt;br /&gt;
    this.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  private class PaintSurface extends JComponent {&lt;br /&gt;
    ArrayList&amp;lt;Shape&amp;gt; shapes = new ArrayList&amp;lt;Shape&amp;gt;();&lt;br /&gt;
    Point startDrag, endDrag;&lt;br /&gt;
    Shape found = null;&lt;br /&gt;
    public PaintSurface() {&lt;br /&gt;
      Shape s = new Rectangle2D.Float(10, 10, 60, 80);&lt;br /&gt;
      shapes.add(s);&lt;br /&gt;
      s = new RoundRectangle2D.Float(110, 10, 80, 80, 10, 10);&lt;br /&gt;
      shapes.add(s);&lt;br /&gt;
      s = new Ellipse2D.Float(10, 110, 80, 80);&lt;br /&gt;
      shapes.add(s);&lt;br /&gt;
&lt;br /&gt;
      s = new Arc2D.Float(10, 210, 80, 80, 90, 90, Arc2D.OPEN);&lt;br /&gt;
      shapes.add(s);&lt;br /&gt;
      s = new Arc2D.Float(110, 210, 80, 80, 0, 180, Arc2D.CHORD);&lt;br /&gt;
      shapes.add(s);&lt;br /&gt;
      s = new Arc2D.Float(210, 210, 80, 80, 45, 90, Arc2D.PIE);&lt;br /&gt;
      shapes.add(s);&lt;br /&gt;
    }&lt;br /&gt;
    public void paint(Graphics g) {&lt;br /&gt;
      Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,&lt;br /&gt;
      RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
      g2.setPaint(Color.LIGHT_GRAY);&lt;br /&gt;
      for (int i = 0; i &amp;lt; getSize().width; i += 10)&lt;br /&gt;
        g2.draw(new Line2D.Float(i, 0, i, getSize().height));&lt;br /&gt;
      for (int i = 0; i &amp;lt; getSize().height; i += 10)&lt;br /&gt;
        g2.draw(new Line2D.Float(0, i, getSize().width, i));&lt;br /&gt;
      g2.setColor(Color.BLACK);&lt;br /&gt;
      g2.setStroke(new BasicStroke(2));&lt;br /&gt;
      for (Shape s : shapes)&lt;br /&gt;
        g2.draw(s);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Combining Shapes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.geom.Area;&lt;br /&gt;
public class BasicShapes {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Area shape = new Area(new Rectangle(1, 1, 1, 1));&lt;br /&gt;
    shape.add(new Area(new Rectangle(1, 1, 1, 1)));&lt;br /&gt;
    shape.subtract(new Area(new Rectangle(1, 1, 1, 1)));&lt;br /&gt;
    shape.intersect(new Area(new Rectangle(1, 1, 1, 1)));&lt;br /&gt;
    shape.exclusiveOr(new Area(new Rectangle(1, 1, 1, 1)));&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creates a diagonal cross shape. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * JCommon : a free general purpose class library for the Java(tm) platform&lt;br /&gt;
 * &lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Project Info:  http://www.jfree.org/jcommon/index.html&lt;br /&gt;
 *&lt;br /&gt;
 * This library is free software; you can redistribute it and/or modify it&lt;br /&gt;
 * under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is distributed in the hope that it will be useful, but&lt;br /&gt;
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY&lt;br /&gt;
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public&lt;br /&gt;
 * License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this library; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,&lt;br /&gt;
 * USA.&lt;br /&gt;
 *&lt;br /&gt;
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.&lt;br /&gt;
 * in the United States and other countries.]&lt;br /&gt;
 *&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * ShapeUtilities.java&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * (C)opyright 2003-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Original Author:  David Gilbert (for Object Refinery Limited);&lt;br /&gt;
 * Contributor(s):   -;&lt;br /&gt;
 *&lt;br /&gt;
 * $Id: ShapeUtilities.java,v 1.18 2008/06/02 06:58:28 mungady Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Changes&lt;br /&gt;
 * -------&lt;br /&gt;
 * 13-Aug-2003 : Version 1 (DG);&lt;br /&gt;
 * 16-Mar-2004 : Moved rotateShape() from RefineryUtilities.java to here (DG);&lt;br /&gt;
 * 13-May-2004 : Added new shape creation methods (DG);&lt;br /&gt;
 * 30-Sep-2004 : Added createLineRegion() method (DG);&lt;br /&gt;
 *               Moved drawRotatedShape() method from RefineryUtilities class&lt;br /&gt;
 *               to this class (DG);&lt;br /&gt;
 * 04-Oct-2004 : Renamed ShapeUtils --&amp;gt; ShapeUtilities (DG);&lt;br /&gt;
 * 26-Oct-2004 : Added a method to test the equality of two Line2D&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 10-Nov-2004 : Added new translateShape() and equal(Ellipse2D, Ellipse2D)&lt;br /&gt;
 *               methods (DG);&lt;br /&gt;
 * 11-Nov-2004 : Renamed translateShape() --&amp;gt; createTranslatedShape() (DG);&lt;br /&gt;
 * 07-Jan-2005 : Minor Javadoc fix (DG);&lt;br /&gt;
 * 11-Jan-2005 : Removed deprecated code in preparation for 1.0.0 release (DG);&lt;br /&gt;
 * 21-Jan-2005 : Modified return type of RectangleAnchor.coordinates()&lt;br /&gt;
 *               method (DG);&lt;br /&gt;
 * 22-Feb-2005 : Added equality tests for Arc2D and GeneralPath (DG);&lt;br /&gt;
 * 16-Mar-2005 : Fixed bug where equal(Shape, Shape) fails for two Polygon&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 01-Jun-2008 : Fixed bug in equal(GeneralPath, GeneralPath) method (DG);&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.GeneralPath;&lt;br /&gt;
/**&lt;br /&gt;
 * Utility methods for {@link Shape} objects.&lt;br /&gt;
 *&lt;br /&gt;
 * @author David Gilbert&lt;br /&gt;
 */&lt;br /&gt;
public class Main {&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates a diagonal cross shape.&lt;br /&gt;
   *&lt;br /&gt;
   * @param l  the length of each &amp;quot;arm&amp;quot;.&lt;br /&gt;
   * @param t  the thickness.&lt;br /&gt;
   *&lt;br /&gt;
   * @return A diagonal cross shape.&lt;br /&gt;
   */&lt;br /&gt;
  public static Shape createRegularCross(final float l, final float t) {&lt;br /&gt;
      final GeneralPath p0 = new GeneralPath();&lt;br /&gt;
      p0.moveTo(-l, t);&lt;br /&gt;
      p0.lineTo(-t, t);&lt;br /&gt;
      p0.lineTo(-t, l);&lt;br /&gt;
      p0.lineTo(t, l);&lt;br /&gt;
      p0.lineTo(t, t);&lt;br /&gt;
      p0.lineTo(l, t);&lt;br /&gt;
      p0.lineTo(l, -t);&lt;br /&gt;
      p0.lineTo(t, -t);&lt;br /&gt;
      p0.lineTo(t, -l);&lt;br /&gt;
      p0.lineTo(-t, -l);&lt;br /&gt;
      p0.lineTo(-t, -t);&lt;br /&gt;
      p0.lineTo(-l, -t);&lt;br /&gt;
      p0.closePath();&lt;br /&gt;
      return p0;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creates a diamond shape. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * JCommon : a free general purpose class library for the Java(tm) platform&lt;br /&gt;
 * &lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Project Info:  http://www.jfree.org/jcommon/index.html&lt;br /&gt;
 *&lt;br /&gt;
 * This library is free software; you can redistribute it and/or modify it&lt;br /&gt;
 * under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is distributed in the hope that it will be useful, but&lt;br /&gt;
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY&lt;br /&gt;
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public&lt;br /&gt;
 * License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this library; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,&lt;br /&gt;
 * USA.&lt;br /&gt;
 *&lt;br /&gt;
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.&lt;br /&gt;
 * in the United States and other countries.]&lt;br /&gt;
 *&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * ShapeUtilities.java&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * (C)opyright 2003-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Original Author:  David Gilbert (for Object Refinery Limited);&lt;br /&gt;
 * Contributor(s):   -;&lt;br /&gt;
 *&lt;br /&gt;
 * $Id: ShapeUtilities.java,v 1.18 2008/06/02 06:58:28 mungady Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Changes&lt;br /&gt;
 * -------&lt;br /&gt;
 * 13-Aug-2003 : Version 1 (DG);&lt;br /&gt;
 * 16-Mar-2004 : Moved rotateShape() from RefineryUtilities.java to here (DG);&lt;br /&gt;
 * 13-May-2004 : Added new shape creation methods (DG);&lt;br /&gt;
 * 30-Sep-2004 : Added createLineRegion() method (DG);&lt;br /&gt;
 *               Moved drawRotatedShape() method from RefineryUtilities class&lt;br /&gt;
 *               to this class (DG);&lt;br /&gt;
 * 04-Oct-2004 : Renamed ShapeUtils --&amp;gt; ShapeUtilities (DG);&lt;br /&gt;
 * 26-Oct-2004 : Added a method to test the equality of two Line2D&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 10-Nov-2004 : Added new translateShape() and equal(Ellipse2D, Ellipse2D)&lt;br /&gt;
 *               methods (DG);&lt;br /&gt;
 * 11-Nov-2004 : Renamed translateShape() --&amp;gt; createTranslatedShape() (DG);&lt;br /&gt;
 * 07-Jan-2005 : Minor Javadoc fix (DG);&lt;br /&gt;
 * 11-Jan-2005 : Removed deprecated code in preparation for 1.0.0 release (DG);&lt;br /&gt;
 * 21-Jan-2005 : Modified return type of RectangleAnchor.coordinates()&lt;br /&gt;
 *               method (DG);&lt;br /&gt;
 * 22-Feb-2005 : Added equality tests for Arc2D and GeneralPath (DG);&lt;br /&gt;
 * 16-Mar-2005 : Fixed bug where equal(Shape, Shape) fails for two Polygon&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 01-Jun-2008 : Fixed bug in equal(GeneralPath, GeneralPath) method (DG);&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.GeneralPath;&lt;br /&gt;
/**&lt;br /&gt;
 * Utility methods for {@link Shape} objects.&lt;br /&gt;
 *&lt;br /&gt;
 * @author David Gilbert&lt;br /&gt;
 */&lt;br /&gt;
public class Main {&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates a diamond shape.&lt;br /&gt;
   *&lt;br /&gt;
   * @param s  the size factor (equal to half the height of the diamond).&lt;br /&gt;
   *&lt;br /&gt;
   * @return A diamond shape.&lt;br /&gt;
   */&lt;br /&gt;
  public static Shape createDiamond(final float s) {&lt;br /&gt;
      final GeneralPath p0 = new GeneralPath();&lt;br /&gt;
      p0.moveTo(0.0f, -s);&lt;br /&gt;
      p0.lineTo(s, 0.0f);&lt;br /&gt;
      p0.lineTo(0.0f, s);&lt;br /&gt;
      p0.lineTo(-s, 0.0f);&lt;br /&gt;
      p0.closePath();&lt;br /&gt;
      return p0;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creates and returns a translated shape. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * JCommon : a free general purpose class library for the Java(tm) platform&lt;br /&gt;
 * &lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Project Info:  http://www.jfree.org/jcommon/index.html&lt;br /&gt;
 *&lt;br /&gt;
 * This library is free software; you can redistribute it and/or modify it&lt;br /&gt;
 * under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is distributed in the hope that it will be useful, but&lt;br /&gt;
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY&lt;br /&gt;
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public&lt;br /&gt;
 * License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this library; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,&lt;br /&gt;
 * USA.&lt;br /&gt;
 *&lt;br /&gt;
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.&lt;br /&gt;
 * in the United States and other countries.]&lt;br /&gt;
 *&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * ShapeUtilities.java&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * (C)opyright 2003-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Original Author:  David Gilbert (for Object Refinery Limited);&lt;br /&gt;
 * Contributor(s):   -;&lt;br /&gt;
 *&lt;br /&gt;
 * $Id: ShapeUtilities.java,v 1.18 2008/06/02 06:58:28 mungady Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Changes&lt;br /&gt;
 * -------&lt;br /&gt;
 * 13-Aug-2003 : Version 1 (DG);&lt;br /&gt;
 * 16-Mar-2004 : Moved rotateShape() from RefineryUtilities.java to here (DG);&lt;br /&gt;
 * 13-May-2004 : Added new shape creation methods (DG);&lt;br /&gt;
 * 30-Sep-2004 : Added createLineRegion() method (DG);&lt;br /&gt;
 *               Moved drawRotatedShape() method from RefineryUtilities class&lt;br /&gt;
 *               to this class (DG);&lt;br /&gt;
 * 04-Oct-2004 : Renamed ShapeUtils --&amp;gt; ShapeUtilities (DG);&lt;br /&gt;
 * 26-Oct-2004 : Added a method to test the equality of two Line2D&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 10-Nov-2004 : Added new translateShape() and equal(Ellipse2D, Ellipse2D)&lt;br /&gt;
 *               methods (DG);&lt;br /&gt;
 * 11-Nov-2004 : Renamed translateShape() --&amp;gt; createTranslatedShape() (DG);&lt;br /&gt;
 * 07-Jan-2005 : Minor Javadoc fix (DG);&lt;br /&gt;
 * 11-Jan-2005 : Removed deprecated code in preparation for 1.0.0 release (DG);&lt;br /&gt;
 * 21-Jan-2005 : Modified return type of RectangleAnchor.coordinates()&lt;br /&gt;
 *               method (DG);&lt;br /&gt;
 * 22-Feb-2005 : Added equality tests for Arc2D and GeneralPath (DG);&lt;br /&gt;
 * 16-Mar-2005 : Fixed bug where equal(Shape, Shape) fails for two Polygon&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 01-Jun-2008 : Fixed bug in equal(GeneralPath, GeneralPath) method (DG);&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
/**&lt;br /&gt;
 * Utility methods for {@link Shape} objects.&lt;br /&gt;
 *&lt;br /&gt;
 * @author David Gilbert&lt;br /&gt;
 */&lt;br /&gt;
public class Main {&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates and returns a translated shape.&lt;br /&gt;
   *&lt;br /&gt;
   * @param shape  the shape (&amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; not permitted).&lt;br /&gt;
   * @param transX  the x translation (in Java2D space).&lt;br /&gt;
   * @param transY  the y translation (in Java2D space).&lt;br /&gt;
   *&lt;br /&gt;
   * @return The translated shape.&lt;br /&gt;
   */&lt;br /&gt;
  public static Shape createTranslatedShape(final Shape shape,&lt;br /&gt;
                                            final double transX,&lt;br /&gt;
                                            final double transY) {&lt;br /&gt;
      if (shape == null) {&lt;br /&gt;
          throw new IllegalArgumentException(&amp;quot;Null &amp;quot;shape&amp;quot; argument.&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      final AffineTransform transform = AffineTransform.getTranslateInstance(&lt;br /&gt;
              transX, transY);&lt;br /&gt;
      return transform.createTransformedShape(shape);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creates a triangle shape that points downwards. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * JCommon : a free general purpose class library for the Java(tm) platform&lt;br /&gt;
 * &lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Project Info:  http://www.jfree.org/jcommon/index.html&lt;br /&gt;
 *&lt;br /&gt;
 * This library is free software; you can redistribute it and/or modify it&lt;br /&gt;
 * under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is distributed in the hope that it will be useful, but&lt;br /&gt;
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY&lt;br /&gt;
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public&lt;br /&gt;
 * License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this library; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,&lt;br /&gt;
 * USA.&lt;br /&gt;
 *&lt;br /&gt;
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.&lt;br /&gt;
 * in the United States and other countries.]&lt;br /&gt;
 *&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * ShapeUtilities.java&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * (C)opyright 2003-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Original Author:  David Gilbert (for Object Refinery Limited);&lt;br /&gt;
 * Contributor(s):   -;&lt;br /&gt;
 *&lt;br /&gt;
 * $Id: ShapeUtilities.java,v 1.18 2008/06/02 06:58:28 mungady Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Changes&lt;br /&gt;
 * -------&lt;br /&gt;
 * 13-Aug-2003 : Version 1 (DG);&lt;br /&gt;
 * 16-Mar-2004 : Moved rotateShape() from RefineryUtilities.java to here (DG);&lt;br /&gt;
 * 13-May-2004 : Added new shape creation methods (DG);&lt;br /&gt;
 * 30-Sep-2004 : Added createLineRegion() method (DG);&lt;br /&gt;
 *               Moved drawRotatedShape() method from RefineryUtilities class&lt;br /&gt;
 *               to this class (DG);&lt;br /&gt;
 * 04-Oct-2004 : Renamed ShapeUtils --&amp;gt; ShapeUtilities (DG);&lt;br /&gt;
 * 26-Oct-2004 : Added a method to test the equality of two Line2D&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 10-Nov-2004 : Added new translateShape() and equal(Ellipse2D, Ellipse2D)&lt;br /&gt;
 *               methods (DG);&lt;br /&gt;
 * 11-Nov-2004 : Renamed translateShape() --&amp;gt; createTranslatedShape() (DG);&lt;br /&gt;
 * 07-Jan-2005 : Minor Javadoc fix (DG);&lt;br /&gt;
 * 11-Jan-2005 : Removed deprecated code in preparation for 1.0.0 release (DG);&lt;br /&gt;
 * 21-Jan-2005 : Modified return type of RectangleAnchor.coordinates()&lt;br /&gt;
 *               method (DG);&lt;br /&gt;
 * 22-Feb-2005 : Added equality tests for Arc2D and GeneralPath (DG);&lt;br /&gt;
 * 16-Mar-2005 : Fixed bug where equal(Shape, Shape) fails for two Polygon&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 01-Jun-2008 : Fixed bug in equal(GeneralPath, GeneralPath) method (DG);&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.GeneralPath;&lt;br /&gt;
/**&lt;br /&gt;
 * Utility methods for {@link Shape} objects.&lt;br /&gt;
 *&lt;br /&gt;
 * @author David Gilbert&lt;br /&gt;
 */&lt;br /&gt;
public class Main {&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates a triangle shape that points downwards.&lt;br /&gt;
   *&lt;br /&gt;
   * @param s  the size factor (equal to half the height of the triangle).&lt;br /&gt;
   *&lt;br /&gt;
   * @return A triangle shape.&lt;br /&gt;
   */&lt;br /&gt;
  public static Shape createDownTriangle(final float s) {&lt;br /&gt;
      final GeneralPath p0 = new GeneralPath();&lt;br /&gt;
      p0.moveTo(0.0f, s);&lt;br /&gt;
      p0.lineTo(s, -s);&lt;br /&gt;
      p0.lineTo(-s, -s);&lt;br /&gt;
      p0.closePath();&lt;br /&gt;
      return p0;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creates a triangle shape that points upwards. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * JCommon : a free general purpose class library for the Java(tm) platform&lt;br /&gt;
 * &lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Project Info:  http://www.jfree.org/jcommon/index.html&lt;br /&gt;
 *&lt;br /&gt;
 * This library is free software; you can redistribute it and/or modify it&lt;br /&gt;
 * under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is distributed in the hope that it will be useful, but&lt;br /&gt;
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY&lt;br /&gt;
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public&lt;br /&gt;
 * License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this library; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,&lt;br /&gt;
 * USA.&lt;br /&gt;
 *&lt;br /&gt;
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.&lt;br /&gt;
 * in the United States and other countries.]&lt;br /&gt;
 *&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * ShapeUtilities.java&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * (C)opyright 2003-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Original Author:  David Gilbert (for Object Refinery Limited);&lt;br /&gt;
 * Contributor(s):   -;&lt;br /&gt;
 *&lt;br /&gt;
 * $Id: ShapeUtilities.java,v 1.18 2008/06/02 06:58:28 mungady Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Changes&lt;br /&gt;
 * -------&lt;br /&gt;
 * 13-Aug-2003 : Version 1 (DG);&lt;br /&gt;
 * 16-Mar-2004 : Moved rotateShape() from RefineryUtilities.java to here (DG);&lt;br /&gt;
 * 13-May-2004 : Added new shape creation methods (DG);&lt;br /&gt;
 * 30-Sep-2004 : Added createLineRegion() method (DG);&lt;br /&gt;
 *               Moved drawRotatedShape() method from RefineryUtilities class&lt;br /&gt;
 *               to this class (DG);&lt;br /&gt;
 * 04-Oct-2004 : Renamed ShapeUtils --&amp;gt; ShapeUtilities (DG);&lt;br /&gt;
 * 26-Oct-2004 : Added a method to test the equality of two Line2D&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 10-Nov-2004 : Added new translateShape() and equal(Ellipse2D, Ellipse2D)&lt;br /&gt;
 *               methods (DG);&lt;br /&gt;
 * 11-Nov-2004 : Renamed translateShape() --&amp;gt; createTranslatedShape() (DG);&lt;br /&gt;
 * 07-Jan-2005 : Minor Javadoc fix (DG);&lt;br /&gt;
 * 11-Jan-2005 : Removed deprecated code in preparation for 1.0.0 release (DG);&lt;br /&gt;
 * 21-Jan-2005 : Modified return type of RectangleAnchor.coordinates()&lt;br /&gt;
 *               method (DG);&lt;br /&gt;
 * 22-Feb-2005 : Added equality tests for Arc2D and GeneralPath (DG);&lt;br /&gt;
 * 16-Mar-2005 : Fixed bug where equal(Shape, Shape) fails for two Polygon&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 01-Jun-2008 : Fixed bug in equal(GeneralPath, GeneralPath) method (DG);&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.GeneralPath;&lt;br /&gt;
/**&lt;br /&gt;
 * Utility methods for {@link Shape} objects.&lt;br /&gt;
 *&lt;br /&gt;
 * @author David Gilbert&lt;br /&gt;
 */&lt;br /&gt;
public class Main {&lt;br /&gt;
  /**&lt;br /&gt;
   * Creates a triangle shape that points upwards.&lt;br /&gt;
   *&lt;br /&gt;
   * @param s  the size factor (equal to half the height of the triangle).&lt;br /&gt;
   *&lt;br /&gt;
   * @return A triangle shape.&lt;br /&gt;
   */&lt;br /&gt;
  public static Shape createUpTriangle(final float s) {&lt;br /&gt;
      final GeneralPath p0 = new GeneralPath();&lt;br /&gt;
      p0.moveTo(0.0f, -s);&lt;br /&gt;
      p0.lineTo(s, s);&lt;br /&gt;
      p0.lineTo(-s, s);&lt;br /&gt;
      p0.closePath();&lt;br /&gt;
      return p0;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creating a Shape Using Lines and Curves ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.geom.GeneralPath;&lt;br /&gt;
public class BasicShapes {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    GeneralPath shape = new GeneralPath();&lt;br /&gt;
    shape.moveTo(1, 1);&lt;br /&gt;
    shape.lineTo(2, 2);&lt;br /&gt;
    shape.quadTo(3, 3, 4, 4);&lt;br /&gt;
    shape.curveTo(5, 5, 6, 6, 7, 7);&lt;br /&gt;
    shape.closePath();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creating Basic Shapes ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.Arc2D;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import java.awt.geom.Line2D;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import java.awt.geom.RoundRectangle2D;&lt;br /&gt;
public class BasicShapes {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    int x1 = 1, x2 = 2, w = 3, h = 4, x = 5, y = 6, y1 = 1, y2 = 2, start = 3;&lt;br /&gt;
    Shape line = new Line2D.Float(x1, y1, x2, y2);&lt;br /&gt;
    Shape arc = new Arc2D.Float(x, y, w, h, start, 1, 1);&lt;br /&gt;
    Shape oval = new Ellipse2D.Float(x, y, w, h);&lt;br /&gt;
    Shape rectangle = new Rectangle2D.Float(x, y, w, h);&lt;br /&gt;
    Shape roundRectangle = new RoundRectangle2D.Float(x, y, w, h, 1, 2);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Draws a shape with the specified rotation about (x, y). ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * JCommon : a free general purpose class library for the Java(tm) platform&lt;br /&gt;
 * &lt;br /&gt;
 *&lt;br /&gt;
 * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Project Info:  http://www.jfree.org/jcommon/index.html&lt;br /&gt;
 *&lt;br /&gt;
 * This library is free software; you can redistribute it and/or modify it&lt;br /&gt;
 * under the terms of the GNU Lesser General Public License as published by&lt;br /&gt;
 * the Free Software Foundation; either version 2.1 of the License, or&lt;br /&gt;
 * (at your option) any later version.&lt;br /&gt;
 *&lt;br /&gt;
 * This library is distributed in the hope that it will be useful, but&lt;br /&gt;
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY&lt;br /&gt;
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public&lt;br /&gt;
 * License for more details.&lt;br /&gt;
 *&lt;br /&gt;
 * You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 * License along with this library; if not, write to the Free Software&lt;br /&gt;
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,&lt;br /&gt;
 * USA.&lt;br /&gt;
 *&lt;br /&gt;
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc.&lt;br /&gt;
 * in the United States and other countries.]&lt;br /&gt;
 *&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * ShapeUtilities.java&lt;br /&gt;
 * -------------------&lt;br /&gt;
 * (C)opyright 2003-2008, by Object Refinery Limited and Contributors.&lt;br /&gt;
 *&lt;br /&gt;
 * Original Author:  David Gilbert (for Object Refinery Limited);&lt;br /&gt;
 * Contributor(s):   -;&lt;br /&gt;
 *&lt;br /&gt;
 * $Id: ShapeUtilities.java,v 1.18 2008/06/02 06:58:28 mungady Exp $&lt;br /&gt;
 *&lt;br /&gt;
 * Changes&lt;br /&gt;
 * -------&lt;br /&gt;
 * 13-Aug-2003 : Version 1 (DG);&lt;br /&gt;
 * 16-Mar-2004 : Moved rotateShape() from RefineryUtilities.java to here (DG);&lt;br /&gt;
 * 13-May-2004 : Added new shape creation methods (DG);&lt;br /&gt;
 * 30-Sep-2004 : Added createLineRegion() method (DG);&lt;br /&gt;
 *               Moved drawRotatedShape() method from RefineryUtilities class&lt;br /&gt;
 *               to this class (DG);&lt;br /&gt;
 * 04-Oct-2004 : Renamed ShapeUtils --&amp;gt; ShapeUtilities (DG);&lt;br /&gt;
 * 26-Oct-2004 : Added a method to test the equality of two Line2D&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 10-Nov-2004 : Added new translateShape() and equal(Ellipse2D, Ellipse2D)&lt;br /&gt;
 *               methods (DG);&lt;br /&gt;
 * 11-Nov-2004 : Renamed translateShape() --&amp;gt; createTranslatedShape() (DG);&lt;br /&gt;
 * 07-Jan-2005 : Minor Javadoc fix (DG);&lt;br /&gt;
 * 11-Jan-2005 : Removed deprecated code in preparation for 1.0.0 release (DG);&lt;br /&gt;
 * 21-Jan-2005 : Modified return type of RectangleAnchor.coordinates()&lt;br /&gt;
 *               method (DG);&lt;br /&gt;
 * 22-Feb-2005 : Added equality tests for Arc2D and GeneralPath (DG);&lt;br /&gt;
 * 16-Mar-2005 : Fixed bug where equal(Shape, Shape) fails for two Polygon&lt;br /&gt;
 *               instances (DG);&lt;br /&gt;
 * 01-Jun-2008 : Fixed bug in equal(GeneralPath, GeneralPath) method (DG);&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
/**&lt;br /&gt;
 * Utility methods for {@link Shape} objects.&lt;br /&gt;
 *&lt;br /&gt;
 * @author David Gilbert&lt;br /&gt;
 */&lt;br /&gt;
public class Main {&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * Draws a shape with the specified rotation about &amp;lt;code&amp;gt;(x, y)&amp;lt;/code&amp;gt;.&lt;br /&gt;
   *&lt;br /&gt;
   * @param g2  the graphics device (&amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; not permitted).&lt;br /&gt;
   * @param shape  the shape (&amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; not permitted).&lt;br /&gt;
   * @param angle  the angle (in radians).&lt;br /&gt;
   * @param x  the x coordinate for the rotation point.&lt;br /&gt;
   * @param y  the y coordinate for the rotation point.&lt;br /&gt;
   */&lt;br /&gt;
  public static void drawRotatedShape(final Graphics2D g2, final Shape shape,&lt;br /&gt;
                                      final double angle,&lt;br /&gt;
                                      final float x, final float y) {&lt;br /&gt;
      final AffineTransform saved = g2.getTransform();&lt;br /&gt;
      final AffineTransform rotate = AffineTransform.getRotateInstance(&lt;br /&gt;
              angle, x, y);&lt;br /&gt;
      g2.transform(rotate);&lt;br /&gt;
      g2.draw(shape);&lt;br /&gt;
      g2.setTransform(saved);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  GlyphVector.getNumGlyphs() ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.font.FontRenderContext;&lt;br /&gt;
import java.awt.font.GlyphVector;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
import java.awt.geom.Point2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class RotatedText extends JPanel {&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    String s = &amp;quot;111111111111111111111111111111&amp;quot;;&lt;br /&gt;
    Font font = new Font(&amp;quot;Courier&amp;quot;, Font.PLAIN, 12);&lt;br /&gt;
    g2d.translate(20, 20);&lt;br /&gt;
    FontRenderContext frc = g2d.getFontRenderContext();&lt;br /&gt;
    GlyphVector gv = font.createGlyphVector(frc, s);&lt;br /&gt;
    int length = gv.getNumGlyphs();&lt;br /&gt;
    System.out.println(length);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Rotated text&amp;quot;);&lt;br /&gt;
    frame.add(new RotatedText());&lt;br /&gt;
    frame.setSize(400, 300);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Resize a shape ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Point;&lt;br /&gt;
import java.awt.event.MouseAdapter;&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.geom.Rectangle2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
public class ResizeRectangle extends JPanel {&lt;br /&gt;
  private int SIZE = 8;&lt;br /&gt;
  private Rectangle2D[] points = { new Rectangle2D.Double(50, 50,SIZE, SIZE), new Rectangle2D.Double(150, 100,SIZE, SIZE) };&lt;br /&gt;
  Rectangle2D s = new Rectangle2D.Double();&lt;br /&gt;
  ShapeResizeHandler ada = new ShapeResizeHandler();&lt;br /&gt;
  public ResizeRectangle() {&lt;br /&gt;
    addMouseListener(ada);&lt;br /&gt;
    addMouseMotionListener(ada);&lt;br /&gt;
  }&lt;br /&gt;
  public void paintComponent(Graphics g) {&lt;br /&gt;
    super.paintComponent(g);&lt;br /&gt;
    Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
    for (int i = 0; i &amp;lt; points.length; i++) {&lt;br /&gt;
      g2.fill(points[i]);&lt;br /&gt;
    }&lt;br /&gt;
    s.setRect(points[0].getCenterX(), points[0].getCenterY(),&lt;br /&gt;
        Math.abs(points[1].getCenterX()-points[0].getCenterX()),&lt;br /&gt;
        Math.abs(points[1].getCenterY()- points[0].getCenterY()));&lt;br /&gt;
    g2.draw(s);&lt;br /&gt;
  }&lt;br /&gt;
  class ShapeResizeHandler extends MouseAdapter {&lt;br /&gt;
    Rectangle2D r = new Rectangle2D.Double(0,0,SIZE,SIZE);&lt;br /&gt;
    private int pos = -1;&lt;br /&gt;
    public void mousePressed(MouseEvent event) {&lt;br /&gt;
      Point p = event.getPoint();&lt;br /&gt;
      for (int i = 0; i &amp;lt; points.length; i++) {&lt;br /&gt;
        if (points[i].contains(p)) {&lt;br /&gt;
          pos = i;&lt;br /&gt;
          return;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseReleased(MouseEvent event) {&lt;br /&gt;
      pos = -1;&lt;br /&gt;
    }&lt;br /&gt;
    public void mouseDragged(MouseEvent event) {&lt;br /&gt;
      if (pos == -1)&lt;br /&gt;
        return;&lt;br /&gt;
      points[pos].setRect(event.getPoint().x,event.getPoint().y,points[pos].getWidth(),&lt;br /&gt;
          points[pos].getHeight());&lt;br /&gt;
      repaint();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Resize Rectangle&amp;quot;);&lt;br /&gt;
    frame.add(new ResizeRectangle());&lt;br /&gt;
    frame.setSize(300, 300);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Rotating a Shape ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
public class BasicShapes {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    AffineTransform tx = new AffineTransform();&lt;br /&gt;
    tx.rotate(0.5);&lt;br /&gt;
    Rectangle shape = new Rectangle(1, 1, 1, 1);&lt;br /&gt;
    Shape newShape = tx.createTransformedShape(shape);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Scaling a Shape ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
public class BasicShapes {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    AffineTransform tx = new AffineTransform();&lt;br /&gt;
    tx.scale(1, 1);&lt;br /&gt;
    Rectangle shape = new Rectangle(1, 1, 1, 1);&lt;br /&gt;
    Shape newShape = tx.createTransformedShape(shape);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Shearing a Shape ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
public class BasicShapes {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    AffineTransform tx = new AffineTransform();&lt;br /&gt;
    tx.shear(1, 1);&lt;br /&gt;
    Rectangle shape = new Rectangle(1, 1, 1, 1);&lt;br /&gt;
    Shape newShape = tx.createTransformedShape(shape);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Translating a Shape ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.Shape;&lt;br /&gt;
import java.awt.geom.AffineTransform;&lt;br /&gt;
public class BasicShapes {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    AffineTransform tx = new AffineTransform();&lt;br /&gt;
    tx.translate(1, 10);&lt;br /&gt;
    Rectangle shape = new Rectangle(1, 1, 1, 1);&lt;br /&gt;
    Shape newShape = tx.createTransformedShape(shape);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>