java.awt.geom

接口
异常
java.lang.Object
  继承者 java.awt.geom.Area
所有已实现的接口:
Shape, Cloneable

public class Area
     
extends Object
implements Shape, Cloneable

Area 对象存储和操作 2 维空间封闭区域的与解析无关的描述。在与其他 Area 对象合并时,Area 对象可以被变换,并可执行各种构造区域几何形状 (Constructive Area Geometry,CAG) 操作。CAG 操作包括对区域进行异或。有关各种操作的示例,请参阅链接的方法文档。

Area 类实现了 Shape 接口,并提供对所有目标测试和路径迭代设施的完全支持,但 Area 在许多方面比一般化的路径更具体:

  • 仅存储封闭的路径和子路径。在构造期间隐式关闭根据未封闭路径构造的 Area 对象,就像通过 Graphics2D.fill 方法填充这些路径一样。
  • 单个存储子路径的内部都是非空且不重叠的。在构造期间,路径被分解为独立组件的不重叠部分,路径的空白部分被丢弃,然后通过所有后续 CAG 操作维护那些非空且不重叠的属性。不同组件子路径的轮廓可以互相接触,只要它们不相交从而造成封闭区域重叠即可。
  • 描述 Area 轮廓的路径几何形状类似于为了描述同一封闭 2 维区域而构造的路径,但可以使用完全不同的类型和路径段排序来完成路径构造。
在使用 Area 时,一些并不总是很明显但值得注意的问题包括:
  • 在未封闭(开放)Shape 中创建一个 Area 导致在 Area 对象中产生一个封闭的轮廓。
  • 在不封闭任何区域(甚至在“封闭”时)的 Shape 中创建一个 Area 将产生一个空的 Area。该问题的一个常见示例是:用一条直线生成的 Area 将是空的,因为该直线无法封闭任何区域。一个空的 Area 将不会迭代其 PathIterator 对象中的任何几何形状。
  • 一个自相交的 Shape 可以分割成两条(或更多条)子路径,每条子路径都封闭原始路径的非相交部分之一。
  • Area 可以采用更多路径段来描述相同的几何形状,即使在原始轮廓非常简单和明显时也是如此。正如人们所认识到的那样,Area 类必须在路径上执行的分析可能并不能反映“简单而明显”的概念。

从以下版本开始:
1.2

构造方法摘要
Area()
          创建空区域的默认构造方法。
Area(Shape s)
          Area 类可以根据指定的 Shape 对象创建区域几何形状。
 
方法摘要
 void add(Area rhs)
          将指定 Area 的形状添加到此 Area 的形状中。
 Object clone()
          返回此 Area 对象的精确副本。
 boolean contains(double x, double y)
          测试指定坐标是否在 Shape 的边界内。
 boolean contains(double x, double y, double w, double h)
          测试 Shape 内部是否完全包含指定矩形区域。
 boolean contains(Point2D p)
          测试指定的 Point2D 是否在 Shape 的边界内。
 boolean contains(Rectangle2D r)
          测试 Shape 内部是否完全包含指定的 Rectangle2D
 Area createTransformedArea(AffineTransform t)
          创建一个新 Area 对象,使它与由指定 AffineTransform 变换的 Area 包含相同的几何形状。
 boolean equals(Area other)
          测试两个 Area 对象的几何形状是否相等。
 void exclusiveOr(Area rhs)
          将此 Area 的形状设置为其当前形状与指定 Area 形状的组合区域,并减去其交集。
 Rectangle getBounds()
          返回完全包围此 Area 的边界 Rectangle
 Rectangle2D getBounds2D()
          返回完全包围此 Area 的高精度边界 Rectangle2D
 PathIterator getPathIterator(AffineTransform at)
          为此 Area 对象的轮廓创建一个 PathIterator
 PathIterator getPathIterator(AffineTransform at, double flatness)
          为此 Area 对象的变平轮廓创建 PathIterator
 void intersect(Area rhs)
          将此 Area 的形状设置为其当前形状与指定 Area 形状的交集。
 boolean intersects(double x, double y, double w, double h)
          测试 Shape 内部是否与指定矩形区域的内部相交。
 boolean intersects(Rectangle2D r)
          测试 Shape 内部是否与指定 Rectangle2D 内部相交。
 boolean isEmpty()
          测试此 Area 对象是否包括其他区域。
 boolean isPolygonal()
          测试此 Area 是否完全由直边多边形组成。
 boolean isRectangular()
          测试此 Area 的形状是否为矩形。
 boolean isSingular()
          测试此 Area 是否由单个封闭子路径组成。
 void reset()
          从此 Area 删除所有几何形状,将其恢复为空区域。
 void subtract(Area rhs)
          从此 Area 的形状中减去指定 Area 的形状。
 void transform(AffineTransform t)
          使用指定的 AffineTransform 变换此 Area 的几何形状。
 
从类 java.lang.Object 继承的方法
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

Area

public Area()
创建空区域的默认构造方法。

从以下版本开始:
1.2

Area

public Area(Shape s)
Area 类可以根据指定的 Shape 对象创建区域几何形状。如果 Shape 还不是封闭的,则显式地封闭几何形状。由 Shape 的几何形状指定的填充规则(奇偶或缠绕)用于确定得到的封闭区域。

参数:
s - 据以构造区域的 Shape
抛出:
NullPointerException - 如果 s 为 null
从以下版本开始:
1.2
方法详细信息

add

public void add(Area rhs)
将指定 Area 的形状添加到此 Area 的形状中。得到的 Area 形状将包括两个形状的并集,或者包含此 Area 或指定 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)

     ################     ################     ################
     ##############         ##############     ################
     ############             ############     ################
     ##########                 ##########     ################
     ########                     ########     ################
     ######                         ######     ######    ######
     ####                             ####     ####        ####
     ##                                 ##     ##            ##
 

参数:
rhs - 将添加到当前形状的 Area
抛出:
NullPointerException - 如果 rhs 为 null
从以下版本开始:
1.2

subtract

public void subtract(Area rhs)
从此 Area 的形状中减去指定 Area 的形状。得到的 Area 形状将包括那些仅包括那些包含在此 Area 且不包含在指定 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)

     ################     ################
     ##############         ##############     ##
     ############             ############     ####
     ##########                 ##########     ######
     ########                     ########     ########
     ######                         ######     ######
     ####                             ####     ####
     ##                                 ##     ##
 

参数:
rhs - 将从当前形状中删除的 Area
抛出:
NullPointerException - 如果 rhs 为 null
从以下版本开始:
1.2

intersect

public void intersect(Area rhs)
将此 Area 的形状设置为其当前形状与指定 Area 形状的交集。得到的 Area 形状将仅包括那些既包含在此 Area 中也包含在指定 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)

     ################     ################     ################
     ##############         ##############       ############
     ############             ############         ########
     ##########                 ##########           ####
     ########                     ########
     ######                         ######
     ####                             ####
     ##                                 ##
 

参数:
rhs - 将与此 Area 相交的 Area
抛出:
NullPointerException - 如果 rhs 为 null
从以下版本开始:
1.2

exclusiveOr

public void exclusiveOr(Area rhs)
将此 Area 的形状设置为其当前形状与指定 Area 形状的组合区域,并减去其交集。得到的 Area 形状将仅包括那些包含在此 Area 或指定 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.exclusiveOr(a2);

a1(before)    xor        a2         =     a1(after)

     ################     ################
     ##############         ##############     ##            ##
     ############             ############     ####        ####
     ##########                 ##########     ######    ######
     ########                     ########     ################
     ######                         ######     ######    ######
     ####                             ####     ####        ####
     ##                                 ##     ##            ##
 

参数:
rhs - 将与此 Area 进行异或运算的 Area
抛出:
NullPointerException - 如果 rhs 为 null
从以下版本开始:
1.2

reset

public void reset()
从此 Area 删除所有几何形状,将其恢复为空区域。

从以下版本开始:
1.2

isEmpty

public boolean isEmpty()
测试此 Area 对象是否包括其他区域。

返回:
如果此 Area 对象表示空区域,则返回 true;否则返回 false
从以下版本开始:
1.2

isPolygonal

public boolean isPolygonal()
测试此 Area 是否完全由直边多边形组成。

返回:
如果此 Area 全部由线段组成,则返回 true;否则返回 false
从以下版本开始:
1.2

isRectangular

public boolean isRectangular()
测试此 Area 的形状是否为矩形。

返回:
如果此 Area 的几何形状是矩形,则返回 true;否则返回 false
从以下版本开始:
1.2

isSingular

public boolean isSingular()
测试此 Area 是否由单个封闭子路径组成。如果路径包含 0 个或 1 个子路径,则此方法返回 true;如果路径包含 1 个以上的子路径,则返回 false。子路径是根据路径中出现的 SEG_MOVETO 段数来计算的。

返回:
如果 Area 由单个基本几何形状组成,则返回 true;否则返回 false
从以下版本开始:
1.2

getBounds2D

public Rectangle2D getBounds2D()
返回完全包围此 Area 的高精度边界 Rectangle2D

Area 类将试图为 Shape 返回可能的最紧密的边界框。不要填充边界框以包含 Shape 轮廓上的曲线控制点,而应该让边界框紧密地适合轮廓本身的实际几何形状。

指定者:
接口 Shape 中的 getBounds2D
返回:
Area 的边界 Rectangle2D
从以下版本开始:
1.2
另请参见:
Shape.getBounds()

getBounds

public Rectangle getBounds()
返回完全包围此 Area 的边界 Rectangle

Area 类将试图为 Shape 返回可能的最紧密的边界框。不要填充边界框以包含 Shape 轮廓上的曲线控制点,而应该让边界框紧密地适合轮廓本身的实际几何形状。因为返回的对象使用整数表示边界框,所以边界框只能是围绕 Shape 几何形状尽可能紧密的整数坐标。

指定者:
接口 Shape 中的 getBounds
返回:
Area 的边界 Rectangle
从以下版本开始:
1.2
另请参见:
Shape.getBounds2D()

clone

public Object clone()
返回此 Area 对象的精确副本。

覆盖:
Object 中的 clone
返回:
创建的副本对象
从以下版本开始:
1.2
另请参见:
Cloneable

equals

public boolean equals(Area other)
测试两个 Area 对象的几何形状是否相等。如果参数为 null,则此方法将返回 false。

参数:
other - 将与此 Area 比较的 Area
返回:
如果两个几何形状相等,则返回 true;否则返回 false
从以下版本开始:
1.2

transform

public void transform(AffineTransform t)
使用指定的 AffineTransform 变换此 Area 的几何形状。适当地变换几何形状,它将永久更改由此对象定义的封闭区域。

参数:
t - 用于变换区域的变换
抛出:
NullPointerException - 如果 t 为 null
从以下版本开始:
1.2

createTransformedArea

public Area createTransformedArea(AffineTransform t)
创建一个新 Area 对象,使它与由指定 AffineTransform 变换的 Area 包含相同的几何形状。此 Area 对象不变。

参数:
t - 用于变换新 Area 的指定 AffineTransform
返回:
表示已变换的几何形状的新 Area 对象。
抛出:
NullPointerException - 如果 t 为 null
从以下版本开始:
1.2

contains

public boolean contains(double x,
                        double y)
测试指定坐标是否在 Shape 的边界内。

指定者:
接口 Shape 中的 contains
参数:
x - 要测试的指定的 X 坐标
y - 要测试的指定的 Y 坐标
返回:
如果指定坐标在 Shape 边界内,则返回 true;否则返回 false
从以下版本开始:
1.2

contains

public boolean contains(Point2D p)
测试指定的 Point2D 是否在 Shape 的边界内。

指定者:
接口 Shape 中的 contains
参数:
p - 要测试的指定的 Point2D
返回:
如果指定的 Point2DShape 边界内,则返回 true;否则返回 false
从以下版本开始:
1.2

contains

public boolean contains(double x,
                        double y,
                        double w,
                        double h)
测试 Shape 内部是否完全包含指定矩形区域。矩形区域内的所有坐标都必须位于 Shape 中,才可以认为整个矩形区域包含在 Shape中。

在下列情况下,Shape.contains() 方法允许 Shape 实现谨慎地返回 false

  • intersect 方法返回 true 并且
  • 计算 Shape 是否完全包含矩形区域的代价太高。
这意味着对于某些 Shape,即使 Shape 包含矩形区域,此方法也可能返回 false。如果需要更精确的答案,由于 Area 类比大多数 Shape 对象更为准确地执行几何计算,因此可以使用该类。

指定者:
接口 Shape 中的 contains
参数:
x - 指定矩形区域左上角的 X 坐标
y - 指定矩形区域左上角的 Y 坐标
w - 指定矩形区域的宽度
h - 指定矩形区域的高度
返回:
如果 Shape 内部完全包含指定矩形区域,则返回 true;否则,如果 Shape 包含矩形区域、 intersects 方法返回 true 且执行包含计算代价太高,则返回 false
从以下版本开始:
1.2
另请参见:
Area, Shape.intersects(double, double, double, double)

contains

public boolean contains(Rectangle2D r)
测试 Shape 内部是否完全包含指定的 Rectangle2D。在下列情况下, Shape.contains() 方法允许 Shape 实现谨慎地返回 false
  • intersect 方法返回 true 并且
  • 计算 Shape 是否完全包含 Rectangle2D 的代价太高。
这意味着对于某些 Shape,即使 Shape 包含 Rectangle2D,此方法也可能返回 false。如果需要更精确的答案,由于 Area 类比大多数 Shape 对象更为准确地执行几何计算,因此可以使用该类。

指定者:
接口 Shape 中的 contains
参数:
r - 指定的 Rectangle2D
返回:
如果 Shape 内部完全包含 Rectangle2D,则返回 true;否则,如果 Shape 包含 Rectangle2Dintersects 方法返回 true 且执行包含计算代价太高,则返回 false
从以下版本开始:
1.2
另请参见:
Shape.contains(double, double, double, double)

intersects

public boolean intersects(double x,
                          double y,
                          double w,
                          double h)
测试 Shape 内部是否与指定矩形区域的内部相交。如果任何一个点既包含在 Shape 内,又包含在指定矩形区域内,则认为矩形区域与 Shape 相交。

在下列情况下,Shape.intersects() 方法允许 Shape 实现谨慎地返回 true

  • 矩形区域与 Shape 相交的可能性很大,但是
  • 精确确定相交的计算代价太高。
这意味着对于某些 Shape,即使矩形区域没有与该 Shape 相交,此方法也可能返回 true。如果需要更精确的答案,由于 Area 类比大多数 Shape 对象更为准确地计算几何相交,因此可以使用该类。

指定者:
接口 Shape 中的 intersects
参数:
x - 指定矩形区域左上角的 X 坐标
y - 指定矩形区域左上角的 Y 坐标
w - 指定矩形区域的宽度
h - 指定矩形区域的高度
返回:
如果 Shape 的内部区域与矩形的内部区域相交,或者相交的可能性很大且执行计算的代价太高,则返回 true;否则返回 false
从以下版本开始:
1.2
另请参见:
Area

intersects

public boolean intersects(Rectangle2D r)
测试 Shape 内部是否与指定 Rectangle2D 内部相交。在下列情况下, Shape.intersects() 方法允许 Shape 实现谨慎地返回 true
  • Rectangle2DShape 相交的可能性很大,但是
  • 精确确定相交的计算代价太高。
这意味着对于某些 Shape,即使 Rectangle2D 没有与该 Shape 相交,此方法也可能返回 true。如果需要更精确的答案,由于 Area 类比大多数 Shape 对象更为准确地计算几何相交,因此可以使用该类。

指定者:
接口 Shape 中的 intersects
参数:
r - 指定的 Rectangle2D
返回:
如果 Shape 内部与指定 Rectangle2D 内部相交,或者相交的可能性很大且执行计算的代价太高,则返回 true;否则返回 false
从以下版本开始:
1.2
另请参见:
Shape.intersects(double, double, double, double)

getPathIterator

public PathIterator getPathIterator(AffineTransform at)
为此 Area 对象的轮廓创建一个 PathIterator。此 Area 对象不变。

指定者:
接口 Shape 中的 getPathIterator
参数:
at - 一个可选的 AffineTransform,应用于在迭代中返回的坐标;如果需要未变换的坐标,则为 null
返回:
返回此 Area 轮廓几何形状的 PathIterator 对象,一次一段。
从以下版本开始:
1.2

getPathIterator

public PathIterator getPathIterator(AffineTransform at,
                                    double flatness)
为此 Area 对象的变平轮廓创建 PathIterator。迭代器只返回 SEG_MOVETO、SEG_LINETO 和 SEG_CLOSE 点类型所表示的非曲线路径段。此 Area 对象不变。

指定者:
接口 Shape 中的 getPathIterator
参数:
at - 一个可选的 AffineTransform,应用于在迭代中返回的坐标;如果需要未变换的坐标,则为 null
flatness - 在使用连接端点的直线取代分段曲线之前,给定曲线的控制点可以从共线变化的最大值
返回:
返回此 Area 轮廓几何形状的 PathIterator 对象,一次一段。
从以下版本开始:
1.2