Class Area

java.lang.Object
sec.sun.awt.geom.Area

public class Area extends Object
An Area object stores and manipulates a resolution-independent description of an enclosed area of 2-dimensional space. Area objects can be transformed and can perform various Constructive Area Geometry (CAG) operations when combined with other Area objects. The CAG operations include area addition, subtraction, intersection, and exclusive or. See the linked method documentation for examples of the various operations.

The Area class implements the Shape interface and provides full support for all of its hit-testing and path iteration facilities, but an Area is more specific than a generalized path in a number of ways:

  • Only closed paths and sub-paths are stored. Area objects constructed from unclosed paths are implicitly closed during construction as if those paths had been filled by the Graphics2D.fill method.
  • The interiors of the individual stored sub-paths are all non-empty and non-overlapping. Paths are decomposed during construction into separate component non-overlapping parts, empty pieces of the path are discarded, and then these non-empty and non-overlapping properties are maintained through all subsequent CAG operations. Outlines of different component sub-paths may touch each other, as long as they do not cross so that their enclosed areas overlap.
  • The geometry of the path describing the outline of the Area resembles the path from which it was constructed only in that it describes the same enclosed 2-dimensional area, but may use entirely different types and ordering of the path segments to do so.
Interesting issues which are not always obvious when using the Area include:
  • Creating an Area from an unclosed (open) Shape results in a closed outline in the Area object.
  • Creating an Area from a Shape which encloses no area (even when "closed") produces an empty Area. A common example of this issue is that producing an Area from a line will be empty since the line encloses no area. An empty Area will iterate no geometry in its PathIterator objects.
  • A self-intersecting Shape may be split into two (or more) sub-paths each enclosing one of the non-intersecting portions of the original path.
  • An Area may take more path segments to describe the same geometry even when the original outline is simple and obvious. The analysis that the Area class must perform on the path may not reflect the same concepts of "simple and obvious" as a human being perceives.
Since:
1.2
  • Constructor Summary

    Constructors
    Constructor
    Description
    Default constructor which creates an empty area.
    The Area class creates an area geometry from the specified Shape object.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    add(Area rhs)
    Adds the shape of the specified Area to the shape of this Area.
    boolean
    equals(Area other)
    Tests whether the geometries of the two Area objects are equal.
    void
    Sets the shape of this Area to be the combined area of its current shape and the shape of the specified Area, minus their intersection.
    Creates a PathIterator for the outline of this Area object.
    void
    Sets the shape of this Area to the intersection of its current shape and the shape of the specified Area.
    boolean
    Tests whether this Area object encloses any area.
    boolean
    Tests whether this Area consists entirely of straight edged polygonal geometry.
    boolean
    Tests whether this Area is rectangular in shape.
    boolean
    Tests whether this Area is comprised of a single closed subpath.
    void
    Removes all of the geometry from this Area and restores it to an empty area.
    void
    Subtracts the shape of the specified Area from the shape of this Area.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • Area

      public Area()
      Default constructor which creates an empty area.
      Since:
      1.2
    • Area

      public Area(ShapeObject s)
      The Area class creates an area geometry from the specified Shape object. The geometry is explicitly closed, if the Shape is not already closed. The fill rule (even-odd or winding) specified by the geometry of the Shape is used to determine the resulting enclosed area.
      Parameters:
      s - the Shape from which the area is constructed
      Throws:
      NullPointerException - if s is null
      Since:
      1.2
  • Method Details

    • add

      public void add(Area rhs)
      Adds the shape of the specified Area to the shape of this Area. The resulting shape of this Area will include the union of both shapes, or all areas that were contained in either this or the specified Area.
           // Example:
           Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
           Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
           a1.add(a2);
      
              a1(before)     +         a2         =     a1(after)
      
           ################     ################     ################
           ##############         ##############     ################
           ############             ############     ################
           ##########                 ##########     ################
           ########                     ########     ################
           ######                         ######     ######    ######
           ####                             ####     ####        ####
           ##                                 ##     ##            ##
       
      Parameters:
      rhs - the Area to be added to the current shape
      Throws:
      NullPointerException - if rhs is null
      Since:
      1.2
    • subtract

      public void subtract(Area rhs)
      Subtracts the shape of the specified Area from the shape of this Area. The resulting shape of this Area will include areas that were contained only in this Area and not in the specified Area.
           // Example:
           Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
           Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
           a1.subtract(a2);
      
              a1(before)     -         a2         =     a1(after)
      
           ################     ################
           ##############         ##############     ##
           ############             ############     ####
           ##########                 ##########     ######
           ########                     ########     ########
           ######                         ######     ######
           ####                             ####     ####
           ##                                 ##     ##
       
      Parameters:
      rhs - the Area to be subtracted from the current shape
      Throws:
      NullPointerException - if rhs is null
      Since:
      1.2
    • intersect

      public void intersect(Area rhs)
      Sets the shape of this Area to the intersection of its current shape and the shape of the specified Area. The resulting shape of this Area will include only areas that were contained in both this Area and also in the specified Area.
           // Example:
           Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
           Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
           a1.intersect(a2);
      
            a1(before)   intersect     a2         =     a1(after)
      
           ################     ################     ################
           ##############         ##############       ############
           ############             ############         ########
           ##########                 ##########           ####
           ########                     ########
           ######                         ######
           ####                             ####
           ##                                 ##
       
      Parameters:
      rhs - the Area to be intersected with this Area
      Throws:
      NullPointerException - if rhs is null
      Since:
      1.2
    • exclusiveOr

      public void exclusiveOr(Area rhs)
      Sets the shape of this Area to be the combined area of its current shape and the shape of the specified Area, minus their intersection. The resulting shape of this Area will include only areas that were contained in either this Area or in the specified Area, but not in both.
           // Example:
           Area a1 = new Area([triangle 0,0 => 8,0 => 0,8]);
           Area a2 = new Area([triangle 0,0 => 8,0 => 8,8]);
           a1.exclusiveOr(a2);
      
              a1(before)    xor        a2         =     a1(after)
      
           ################     ################
           ##############         ##############     ##            ##
           ############             ############     ####        ####
           ##########                 ##########     ######    ######
           ########                     ########     ################
           ######                         ######     ######    ######
           ####                             ####     ####        ####
           ##                                 ##     ##            ##
       
      Parameters:
      rhs - the Area to be exclusive ORed with this Area.
      Throws:
      NullPointerException - if rhs is null
      Since:
      1.2
    • reset

      public void reset()
      Removes all of the geometry from this Area and restores it to an empty area.
      Since:
      1.2
    • isEmpty

      public boolean isEmpty()
      Tests whether this Area object encloses any area.
      Returns:
      true if this Area object represents an empty area; false otherwise.
      Since:
      1.2
    • isPolygonal

      public boolean isPolygonal()
      Tests whether this Area consists entirely of straight edged polygonal geometry.
      Returns:
      true if the geometry of this Area consists entirely of line segments; false otherwise.
      Since:
      1.2
    • isRectangular

      public boolean isRectangular()
      Tests whether this Area is rectangular in shape.
      Returns:
      true if the geometry of this Area is rectangular in shape; false otherwise.
      Since:
      1.2
    • isSingular

      public boolean isSingular()
      Tests whether this Area is comprised of a single closed subpath. This method returns true if the path contains 0 or 1 subpaths, or false if the path contains more than 1 subpath. The subpaths are counted by the number of SEG_MOVETO segments that appear in the path.
      Returns:
      true if the Area is comprised of a single basic geometry; false otherwise.
      Since:
      1.2
    • equals

      public boolean equals(Area other)
      Tests whether the geometries of the two Area objects are equal. This method will return false if the argument is null.
      Parameters:
      other - the Area to be compared to this Area
      Returns:
      true if the two geometries are equal; false otherwise.
      Since:
      1.2
    • getPathIterator

      Creates a PathIterator for the outline of this Area object. This Area object is unchanged.
      Parameters:
      at - an optional AffineTransform to be applied to the coordinates as they are returned in the iteration, or null if untransformed coordinates are desired
      Returns:
      the PathIterator object that returns the geometry of the outline of this Area, one segment at a time.
      Since:
      1.2