java.awt.geom
Class Area

java.lang.Object sample code for java.lang.Object definition code for java.lang.Object 
  extended by java.awt.geom.Area
All Implemented Interfaces:
Shape sample code for java.awt.Shape definition code for java.awt.Shape , Cloneable sample code for java.lang.Cloneable definition code for java.lang.Cloneable

public class Area
extends Object sample code for java.lang.Object definition code for java.lang.Object
implements Shape sample code for java.awt.Shape definition code for java.awt.Shape , Cloneable sample code for java.lang.Cloneable definition code for java.lang.Cloneable

The Area class is a device-independent specification of an arbitrarily-shaped area. The Area object is defined as an object that performs certain binary CAG (Constructive Area Geometry) operations on other area-enclosing geometries, such as rectangles, ellipses, and polygons. The CAG operations are Add(union), Subtract, Intersect, and ExclusiveOR. For example, an Area can be made up of the area of a rectangle minus the area of an ellipse.


Constructor Summary
Area sample code for java.awt.geom.Area.Area() definition code for java.awt.geom.Area.Area() ()
          Default constructor which creates an empty area.
Area sample code for java.awt.geom.Area.Area(java.awt.Shape) definition code for java.awt.geom.Area.Area(java.awt.Shape) (Shape sample code for java.awt.Shape definition code for java.awt.Shape  s)
          The Area class creates an area geometry from the specified Shape sample code for java.awt.Shape definition code for java.awt.Shape object.
 
Method Summary
 void add sample code for java.awt.geom.Area.add(java.awt.geom.Area) definition code for java.awt.geom.Area.add(java.awt.geom.Area) (Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area  rhs)
          Adds the shape of the specified Area to the shape of this Area.
 Object sample code for java.lang.Object definition code for java.lang.Object clone sample code for java.awt.geom.Area.clone() definition code for java.awt.geom.Area.clone() ()
          Returns an exact copy of this Area object.
 boolean contains sample code for java.awt.geom.Area.contains(double, double) definition code for java.awt.geom.Area.contains(double, double) (double x, double y)
          Tests if a specifed point lies inside the boundary of this Area object.
 boolean contains sample code for java.awt.geom.Area.contains(double, double, double, double) definition code for java.awt.geom.Area.contains(double, double, double, double) (double x, double y, double w, double h)
          Tests whether or not the interior of this Area object completely contains the specified rectangular area.
 boolean contains sample code for java.awt.geom.Area.contains(java.awt.geom.Point2D) definition code for java.awt.geom.Area.contains(java.awt.geom.Point2D) (Point2D sample code for java.awt.geom.Point2D definition code for java.awt.geom.Point2D  p)
          Tests if a specified Point2D sample code for java.awt.geom.Point2D definition code for java.awt.geom.Point2D lies inside the boundary of the this Area object.
 boolean contains sample code for java.awt.geom.Area.contains(java.awt.geom.Rectangle2D) definition code for java.awt.geom.Area.contains(java.awt.geom.Rectangle2D) (Rectangle2D sample code for java.awt.geom.Rectangle2D definition code for java.awt.geom.Rectangle2D  p)
          Tests whether or not the interior of this Area object completely contains the specified Rectangle2D.
 Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area createTransformedArea sample code for java.awt.geom.Area.createTransformedArea(java.awt.geom.AffineTransform) definition code for java.awt.geom.Area.createTransformedArea(java.awt.geom.AffineTransform) (AffineTransform sample code for java.awt.geom.AffineTransform definition code for java.awt.geom.AffineTransform  t)
          Creates a new Area object that contains the same geometry as this Area transformed by the specified AffineTransform.
 boolean equals sample code for java.awt.geom.Area.equals(java.awt.geom.Area) definition code for java.awt.geom.Area.equals(java.awt.geom.Area) (Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area  other)
          Tests whether the geometries of the two Area objects are equal.
 void exclusiveOr sample code for java.awt.geom.Area.exclusiveOr(java.awt.geom.Area) definition code for java.awt.geom.Area.exclusiveOr(java.awt.geom.Area) (Area sample code for java.awt.geom.Area definition code for java.awt.geom.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.
 Rectangle sample code for java.awt.Rectangle definition code for java.awt.Rectangle getBounds sample code for java.awt.geom.Area.getBounds() definition code for java.awt.geom.Area.getBounds() ()
          Returns a bounding Rectangle sample code for java.awt.Rectangle definition code for java.awt.Rectangle that completely encloses this Area.
 Rectangle2D sample code for java.awt.geom.Rectangle2D definition code for java.awt.geom.Rectangle2D getBounds2D sample code for java.awt.geom.Area.getBounds2D() definition code for java.awt.geom.Area.getBounds2D() ()
          Returns a high precision bounding Rectangle2D sample code for java.awt.geom.Rectangle2D definition code for java.awt.geom.Rectangle2D that completely encloses this Area.
 PathIterator sample code for java.awt.geom.PathIterator definition code for java.awt.geom.PathIterator getPathIterator sample code for java.awt.geom.Area.getPathIterator(java.awt.geom.AffineTransform) definition code for java.awt.geom.Area.getPathIterator(java.awt.geom.AffineTransform) (AffineTransform sample code for java.awt.geom.AffineTransform definition code for java.awt.geom.AffineTransform  at)
          Creates a PathIterator sample code for java.awt.geom.PathIterator definition code for java.awt.geom.PathIterator for the outline of this Area object.
 PathIterator sample code for java.awt.geom.PathIterator definition code for java.awt.geom.PathIterator getPathIterator sample code for java.awt.geom.Area.getPathIterator(java.awt.geom.AffineTransform, double) definition code for java.awt.geom.Area.getPathIterator(java.awt.geom.AffineTransform, double) (AffineTransform sample code for java.awt.geom.AffineTransform definition code for java.awt.geom.AffineTransform  at, double flatness)
          Creates a PathIterator for the flattened outline of this Area object.
 void intersect sample code for java.awt.geom.Area.intersect(java.awt.geom.Area) definition code for java.awt.geom.Area.intersect(java.awt.geom.Area) (Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area  rhs)
          Sets the shape of this Area to the intersection of its current shape and the shape of the specified Area.
 boolean intersects sample code for java.awt.geom.Area.intersects(double, double, double, double) definition code for java.awt.geom.Area.intersects(double, double, double, double) (double x, double y, double w, double h)
          Tests whether the interior of this Area object intersects the interior of the specified rectangular area.
 boolean intersects sample code for java.awt.geom.Area.intersects(java.awt.geom.Rectangle2D) definition code for java.awt.geom.Area.intersects(java.awt.geom.Rectangle2D) (Rectangle2D sample code for java.awt.geom.Rectangle2D definition code for java.awt.geom.Rectangle2D  p)
          Tests whether the interior of this Area object intersects the interior of the specified Rectangle2D.
 boolean isEmpty sample code for java.awt.geom.Area.isEmpty() definition code for java.awt.geom.Area.isEmpty() ()
          Tests whether this Area object encloses any area.
 boolean isPolygonal sample code for java.awt.geom.Area.isPolygonal() definition code for java.awt.geom.Area.isPolygonal() ()
          Tests whether this Area consists entirely of straight edged polygonal geometry.
 boolean isRectangular sample code for java.awt.geom.Area.isRectangular() definition code for java.awt.geom.Area.isRectangular() ()
          Tests whether this Area is rectangular in shape.
 boolean isSingular sample code for java.awt.geom.Area.isSingular() definition code for java.awt.geom.Area.isSingular() ()
          Tests whether this Area is comprised of a single closed subpath.
 void reset sample code for java.awt.geom.Area.reset() definition code for java.awt.geom.Area.reset() ()
          Removes all of the geometry from this Area and restores it to an empty area.
 void subtract sample code for java.awt.geom.Area.subtract(java.awt.geom.Area) definition code for java.awt.geom.Area.subtract(java.awt.geom.Area) (Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area  rhs)
          Subtracts the shape of the specified Area from the shape of this Area.
 void transform sample code for java.awt.geom.Area.transform(java.awt.geom.AffineTransform) definition code for java.awt.geom.Area.transform(java.awt.geom.AffineTransform) (AffineTransform sample code for java.awt.geom.AffineTransform definition code for java.awt.geom.AffineTransform  t)
          Transforms the geometry of this Area using the specified AffineTransform sample code for java.awt.geom.AffineTransform definition code for java.awt.geom.AffineTransform .
 
Methods inherited from class java.lang.Object sample code for java.lang.Object definition code for java.lang.Object
equals sample code for java.lang.Object.equals(java.lang.Object) definition code for java.lang.Object.equals(java.lang.Object) , finalize sample code for java.lang.Object.finalize() definition code for java.lang.Object.finalize() , getClass sample code for java.lang.Object.getClass() definition code for java.lang.Object.getClass() , hashCode sample code for java.lang.Object.hashCode() definition code for java.lang.Object.hashCode() , notify sample code for java.lang.Object.notify() definition code for java.lang.Object.notify() , notifyAll sample code for java.lang.Object.notifyAll() definition code for java.lang.Object.notifyAll() , toString sample code for java.lang.Object.toString() definition code for java.lang.Object.toString() , wait sample code for java.lang.Object.wait() definition code for java.lang.Object.wait() , wait sample code for java.lang.Object.wait(long) definition code for java.lang.Object.wait(long) , wait sample code for java.lang.Object.wait(long, int) definition code for java.lang.Object.wait(long, int)
 

Constructor Detail

Area sample code for java.awt.geom.Area() definition code for java.awt.geom.Area()

public Area()
Default constructor which creates an empty area.


Area sample code for java.awt.geom.Area(java.awt.Shape) definition code for java.awt.geom.Area(java.awt.Shape)

public Area(Shape sample code for java.awt.Shape definition code for java.awt.Shape  s)
The Area class creates an area geometry from the specified Shape sample code for java.awt.Shape definition code for java.awt.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
Method Detail

add sample code for java.awt.geom.Area.add(java.awt.geom.Area) definition code for java.awt.geom.Area.add(java.awt.geom.Area)

public void add(Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area  rhs)
Adds the shape of the specified Area to the shape of this Area. Addition is achieved through union.

Parameters:
rhs - the Area to be added to the current shape

subtract sample code for java.awt.geom.Area.subtract(java.awt.geom.Area) definition code for java.awt.geom.Area.subtract(java.awt.geom.Area)

public void subtract(Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area  rhs)
Subtracts the shape of the specified Area from the shape of this Area.

Parameters:
rhs - the Area to be subtracted from the current shape

intersect sample code for java.awt.geom.Area.intersect(java.awt.geom.Area) definition code for java.awt.geom.Area.intersect(java.awt.geom.Area)

public void intersect(Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area  rhs)
Sets the shape of this Area to the intersection of its current shape and the shape of the specified Area.

Parameters:
rhs - the Area to be intersected with this Area

exclusiveOr sample code for java.awt.geom.Area.exclusiveOr(java.awt.geom.Area) definition code for java.awt.geom.Area.exclusiveOr(java.awt.geom.Area)

public void exclusiveOr(Area sample code for java.awt.geom.Area definition code for java.awt.geom.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.

Parameters:
rhs - the Area to be exclusive ORed with this Area.

reset sample code for java.awt.geom.Area.reset() definition code for java.awt.geom.Area.reset()

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


isEmpty sample code for java.awt.geom.Area.isEmpty() definition code for java.awt.geom.Area.isEmpty()

public boolean isEmpty()
Tests whether this Area object encloses any area.

Returns:
true if this Area object represents an empty area; false otherwise.

isPolygonal sample code for java.awt.geom.Area.isPolygonal() definition code for java.awt.geom.Area.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.

isRectangular sample code for java.awt.geom.Area.isRectangular() definition code for java.awt.geom.Area.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.

isSingular sample code for java.awt.geom.Area.isSingular() definition code for java.awt.geom.Area.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 sample code for java.awt.geom.PathIterator.SEG_MOVETO definition code for java.awt.geom.PathIterator.SEG_MOVETO segments that appear in the path.

Returns:
true if the Area is comprised of a single basic geometry; false otherwise.

getBounds2D sample code for java.awt.geom.Area.getBounds2D() definition code for java.awt.geom.Area.getBounds2D()

public Rectangle2D sample code for java.awt.geom.Rectangle2D definition code for java.awt.geom.Rectangle2D  getBounds2D()
Returns a high precision bounding Rectangle2D sample code for java.awt.geom.Rectangle2D definition code for java.awt.geom.Rectangle2D that completely encloses this Area.

The Area class will attempt to return the tightest bounding box possible for the Shape. The bounding box will not be padded to include the control points of curves in the outline of the Shape, but should tightly fit the actual geometry of the outline itself.

Specified by:
getBounds2D sample code for java.awt.Shape.getBounds2D() definition code for java.awt.Shape.getBounds2D() in interface Shape sample code for java.awt.Shape definition code for java.awt.Shape
Returns:
the bounding Rectangle2D for the Area.
See Also:
Shape.getBounds() sample code for java.awt.Shape.getBounds() definition code for java.awt.Shape.getBounds()

getBounds sample code for java.awt.geom.Area.getBounds() definition code for java.awt.geom.Area.getBounds()

public Rectangle sample code for java.awt.Rectangle definition code for java.awt.Rectangle  getBounds()
Returns a bounding Rectangle sample code for java.awt.Rectangle definition code for java.awt.Rectangle that completely encloses this Area.

The Area class will attempt to return the tightest bounding box possible for the Shape. The bounding box will not be padded to include the control points of curves in the outline of the Shape, but should tightly fit the actual geometry of the outline itself. Since the returned object represents the bounding box with integers, the bounding box can only be as tight as the nearest integer coordinates that encompass the geometry of the Shape.

Specified by:
getBounds sample code for java.awt.Shape.getBounds() definition code for java.awt.Shape.getBounds() in interface Shape sample code for java.awt.Shape definition code for java.awt.Shape
Returns:
the bounding Rectangle for the Area.
See Also:
Shape.getBounds2D() sample code for java.awt.Shape.getBounds2D() definition code for java.awt.Shape.getBounds2D()

clone sample code for java.awt.geom.Area.clone() definition code for java.awt.geom.Area.clone()

public Object sample code for java.lang.Object definition code for java.lang.Object  clone()
Returns an exact copy of this Area object.

Overrides:
clone sample code for java.lang.Object.clone() definition code for java.lang.Object.clone() in class Object sample code for java.lang.Object definition code for java.lang.Object
Returns:
Created clone object
See Also:
Cloneable sample code for java.lang.Cloneable definition code for java.lang.Cloneable

equals sample code for java.awt.geom.Area.equals(java.awt.geom.Area) definition code for java.awt.geom.Area.equals(java.awt.geom.Area)

public boolean equals(Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area  other)
Tests whether the geometries of the two Area objects are equal.

Parameters:
other - the Area to be compared to this Area
Returns:
true if the two geometries are equal; false otherwise.

transform sample code for java.awt.geom.Area.transform(java.awt.geom.AffineTransform) definition code for java.awt.geom.Area.transform(java.awt.geom.AffineTransform)

public void transform(AffineTransform sample code for java.awt.geom.AffineTransform definition code for java.awt.geom.AffineTransform  t)
Transforms the geometry of this Area using the specified AffineTransform sample code for java.awt.geom.AffineTransform definition code for java.awt.geom.AffineTransform . The geometry is transformed in place, which permanently changes the enclosed area defined by this object.

Parameters:
t - the transformation used to transform the area

createTransformedArea sample code for java.awt.geom.Area.createTransformedArea(java.awt.geom.AffineTransform) definition code for java.awt.geom.Area.createTransformedArea(java.awt.geom.AffineTransform)

public Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area  createTransformedArea(AffineTransform sample code for java.awt.geom.AffineTransform definition code for java.awt.geom.AffineTransform  t)
Creates a new Area object that contains the same geometry as this Area transformed by the specified AffineTransform. This Area object is unchanged.

Parameters:
t - the specified AffineTransform used to transform the new Area
Returns:
a new Area object representing the transformed geometry.

contains sample code for java.awt.geom.Area.contains(double, double) definition code for java.awt.geom.Area.contains(double, double)

public boolean contains(double x,
                        double y)
Tests if a specifed point lies inside the boundary of this Area object.

Specified by:
contains sample code for java.awt.Shape.contains(double, double) definition code for java.awt.Shape.contains(double, double) in interface Shape sample code for java.awt.Shape definition code for java.awt.Shape
Parameters:
x, y - the specified point
Returns:
true if the point lies completely within the interior of the Area; false otherwise.

contains sample code for java.awt.geom.Area.contains(java.awt.geom.Point2D) definition code for java.awt.geom.Area.contains(java.awt.geom.Point2D)

public boolean contains(Point2D sample code for java.awt.geom.Point2D definition code for java.awt.geom.Point2D  p)
Tests if a specified Point2D sample code for java.awt.geom.Point2D definition code for java.awt.geom.Point2D lies inside the boundary of the this Area object.

Specified by:
contains sample code for java.awt.Shape.contains(java.awt.geom.Point2D) definition code for java.awt.Shape.contains(java.awt.geom.Point2D) in interface Shape sample code for java.awt.Shape definition code for java.awt.Shape
Parameters:
p - the Point2D to test
Returns:
true if the specified Point2D lies completely within the interior of the Area; false otherwise.

contains sample code for java.awt.geom.Area.contains(double, double, double, double) definition code for java.awt.geom.Area.contains(double, double, double, double)

public boolean contains(double x,
                        double y,
                        double w,
                        double h)
Tests whether or not the interior of this Area object completely contains the specified rectangular area.

Specified by:
contains sample code for java.awt.Shape.contains(double, double, double, double) definition code for java.awt.Shape.contains(double, double, double, double) in interface Shape sample code for java.awt.Shape definition code for java.awt.Shape
Parameters:
x, y - the coordinates of the upper left corner of the specified rectangular area
w - the width of the specified rectangular area
h - the height of the specified rectangular area
Returns:
true if the specified rectangular area lies completely within the interior of the Area; false otherwise.
See Also:
Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area , Shape.intersects(double, double, double, double) sample code for java.awt.Shape.intersects(double, double, double, double) definition code for java.awt.Shape.intersects(double, double, double, double)

contains sample code for java.awt.geom.Area.contains(java.awt.geom.Rectangle2D) definition code for java.awt.geom.Area.contains(java.awt.geom.Rectangle2D)

public boolean contains(Rectangle2D sample code for java.awt.geom.Rectangle2D definition code for java.awt.geom.Rectangle2D  p)
Tests whether or not the interior of this Area object completely contains the specified Rectangle2D.

Specified by:
contains sample code for java.awt.Shape.contains(java.awt.geom.Rectangle2D) definition code for java.awt.Shape.contains(java.awt.geom.Rectangle2D) in interface Shape sample code for java.awt.Shape definition code for java.awt.Shape
Parameters:
p - the Rectangle2D to test
Returns:
true if the Rectangle2D lies completely within the interior of the Area; false otherwise.
See Also:
Shape.contains(double, double, double, double) sample code for java.awt.Shape.contains(double, double, double, double) definition code for java.awt.Shape.contains(double, double, double, double)

intersects sample code for java.awt.geom.Area.intersects(double, double, double, double) definition code for java.awt.geom.Area.intersects(double, double, double, double)

public boolean intersects(double x,
                          double y,
                          double w,
                          double h)
Tests whether the interior of this Area object intersects the interior of the specified rectangular area.

Specified by:
intersects sample code for java.awt.Shape.intersects(double, double, double, double) definition code for java.awt.Shape.intersects(double, double, double, double) in interface Shape sample code for java.awt.Shape definition code for java.awt.Shape
Parameters:
x, y - the coordinates of the upper left corner of the specified rectangular area
w - the width of the specified rectangular area
h - the height of teh specified rectangular area
Returns:
true if the interior intersects the specified rectangular area; false otherwise;
See Also:
Area sample code for java.awt.geom.Area definition code for java.awt.geom.Area

intersects sample code for java.awt.geom.Area.intersects(java.awt.geom.Rectangle2D) definition code for java.awt.geom.Area.intersects(java.awt.geom.Rectangle2D)

public boolean intersects(Rectangle2D sample code for java.awt.geom.Rectangle2D definition code for java.awt.geom.Rectangle2D  p)
Tests whether the interior of this Area object intersects the interior of the specified Rectangle2D.

Specified by:
intersects sample code for java.awt.Shape.intersects(java.awt.geom.Rectangle2D) definition code for java.awt.Shape.intersects(java.awt.geom.Rectangle2D) in interface Shape sample code for java.awt.Shape definition code for java.awt.Shape
Parameters:
p - the Rectangle2D to test for intersection
Returns:
true if the interior intersects the specified Rectangle2D; false otherwise.
See Also:
Shape.intersects(double, double, double, double) sample code for java.awt.Shape.intersects(double, double, double, double) definition code for java.awt.Shape.intersects(double, double, double, double)

getPathIterator sample code for java.awt.geom.Area.getPathIterator(java.awt.geom.AffineTransform) definition code for java.awt.geom.Area.getPathIterator(java.awt.geom.AffineTransform)

public PathIterator sample code for java.awt.geom.PathIterator definition code for java.awt.geom.PathIterator  getPathIterator(AffineTransform sample code for java.awt.geom.AffineTransform definition code for java.awt.geom.AffineTransform  at)
Creates a PathIterator sample code for java.awt.geom.PathIterator definition code for java.awt.geom.PathIterator for the outline of this Area object. This Area object is unchanged.

Specified by:
getPathIterator sample code for java.awt.Shape.getPathIterator(java.awt.geom.AffineTransform) definition code for java.awt.Shape.getPathIterator(java.awt.geom.AffineTransform) in interface Shape sample code for java.awt.Shape definition code for java.awt.Shape
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.

getPathIterator sample code for java.awt.geom.Area.getPathIterator(java.awt.geom.AffineTransform, double) definition code for java.awt.geom.Area.getPathIterator(java.awt.geom.AffineTransform, double)

public PathIterator sample code for java.awt.geom.PathIterator definition code for java.awt.geom.PathIterator  getPathIterator(AffineTransform sample code for java.awt.geom.AffineTransform definition code for java.awt.geom.AffineTransform  at,
                                    double flatness)
Creates a PathIterator for the flattened outline of this Area object. Only uncurved path segments represented by the SEG_MOVETO, SEG_LINETO, and SEG_CLOSE point types are returned by the iterator. This Area object is unchanged.

Specified by:
getPathIterator sample code for java.awt.Shape.getPathIterator(java.awt.geom.AffineTransform, double) definition code for java.awt.Shape.getPathIterator(java.awt.geom.AffineTransform, double) in interface Shape sample code for java.awt.Shape definition code for java.awt.Shape
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
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 endpoints
Returns:
the PathIterator object that returns the geometry of the outline of this Area, one segment at a time.