java.lang.Object
java.awt.geom.Area
一个
Area对象存储和操作一个二维空间中封闭区域的与分辨率无关的描述。 Area对象可以被转换,并且可以在与其他Area对象组合时执行各种构造性区域几何(CAG)操作。这些CAG操作包括区域添加、减法、交集和异或。请参阅链接的方法文档,了解各种操作的示例。
Area类实现了Shape接口,并为其所有的命中测试和路径迭代功能提供全面支持,但Area比一般路径更具体的地方有:
- 只存储闭合路径和子路径。从未闭合路径构造的
Area对象在构造过程中会被隐式地关闭,就好像这些路径已被Graphics2D.fill方法填充。 - 存储的各个子路径的内部都是非空且不重叠的。在构造过程中,路径会被分解为单独的非重叠部分,空路径将被丢弃,然后这些非空且不重叠的属性将通过所有后续的CAG操作保持不变。不同组件子路径的轮廓可能相互接触,只要它们不相交,使得它们的封闭区域重叠。
- 描述
Area轮廓的路径的几何形状只在于它描述了相同的封闭二维区域,但可能使用完全不同类型和顺序的路径段来实现。
Area时不总是明显的有趣问题包括:
- 从未闭合(开放)
Shape创建Area会在Area对象中产生一个闭合轮廓。 - 从不包含任何区域的
Shape(即使“闭合”)创建Area会产生一个空的Area。这个问题的一个常见例子是,从一条线创建Area将是空的,因为该线不包含任何区域。空的Area在其PathIterator对象中不会迭代任何几何形状。 - 自相交的
Shape可能会被分割为两个(或更多)子路径,每个子路径封闭原始路径的一个非相交部分。 - 即使原始轮廓简单明了,一个
Area可能需要更多的路径段来描述相同的几何形状。Area类必须对路径执行的分析可能不会反映出与人类感知的“简单明了”相同的概念。
- 自从:
- 1.2
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid将指定Area的形状添加到此Area的形状中。clone()返回此Area对象的精确副本。booleancontains(double x, double y) 测试指定坐标是否在Shape的边界内,如内部定义所述。booleancontains(double x, double y, double w, double h) 测试Shape的内部是否完全包含指定的矩形区域。booleanboolean测试Shape的内部是否完全包含指定的Rectangle2D。创建一个包含与指定AffineTransform转换后的此Area相同几何的新Area对象。boolean测试两个Area对象的几何是否相等。voidexclusiveOr(Area rhs) 将此Area的形状设置为其当前形状和指定Area的形状的组合区域,减去它们的交集。返回完全包围此Area的边界Rectangle。返回完全包围此Area的高精度边界Rectangle2D。为此Area对象的轮廓创建一个PathIterator。getPathIterator(AffineTransform at, double flatness) 为此Area对象的平坦轮廓创建一个PathIterator。void将此Area的形状设置为其当前形状和指定Area的形状的交集。booleanintersects(double x, double y, double w, double h) 测试Shape的内部是否与指定的矩形区域的内部相交。boolean测试Shape的内部是否与指定的Rectangle2D的内部相交。booleanisEmpty()测试此Area对象是否包含任何区域。boolean测试此Area是否完全由直边多边形几何组成。boolean测试此Area是否为矩形形状。boolean测试此Area是否由单个闭合子路径组成。voidreset()从此Area中删除所有几何,并将其恢复为空区域。void从此Area的形状中减去指定Area的形状。void使用指定的AffineTransform转换此Area的几何。
-
Constructor Details
-
Area
public Area()创建一个空区域的默认构造函数。- 自从:
- 1.2
-
Area
- 参数:
-
s- 用于构造区域的Shape - 抛出:
-
NullPointerException- 如果s为null - 自从:
- 1.2
-
-
Method Details
-
add
将指定Area的形状添加到此Area的形状中。此Area的结果形状将包括两者的并集,或者包含在此Area或指定Area中的所有区域。// 示例: Area a1 = new Area([三角形 0,0 => 8,0 => 0,8]); Area a2 = new Area([三角形 0,0 => 8,0 => 8,8]); a1.add(a2); a1(之前) + a2 = a1(之后) ################ ################ ################ ############## ############## ################ ############ ############ ################ ########## ########## ################ ######## ######## ################ ###### ###### ###### ###### #### #### #### #### ## ## ## ##- 参数:
-
rhs- 要添加到当前形状的Area - 抛出:
-
NullPointerException- 如果rhs为null - 自从:
- 1.2
-
subtract
从此Area的形状中减去指定Area的形状。此Area的结果形状将包括仅包含在此Area中而不在指定Area中的区域。// 示例: Area a1 = new Area([三角形 0,0 => 8,0 => 0,8]); Area a2 = new Area([三角形 0,0 => 8,0 => 8,8]); a1.subtract(a2); a1(之前) - a2 = a1(之后) ################ ################ ############## ############## ## ############ ############ #### ########## ########## ###### ######## ######## ######## ###### ###### ###### #### #### #### ## ## ##- 参数:
-
rhs- 要从当前形状中减去的Area - 抛出:
-
NullPointerException- 如果rhs为null - 自从:
- 1.2
-
intersect
将此Area的形状设置为其当前形状和指定Area的形状的交集。此Area的结果形状将仅包含同时包含在此Area和指定Area中的区域。// 示例: Area a1 = new Area([三角形 0,0 => 8,0 => 0,8]); Area a2 = new Area([三角形 0,0 => 8,0 => 8,8]); a1.intersect(a2); a1(之前) 交集 a2 = a1(之后) ################ ################ ################ ############## ############## ############ ############ ############ ######## ########## ########## #### ######## ######## ###### ###### #### #### ## ##- 参数:
-
rhs- 要与此Area求交的Area - 抛出:
-
NullPointerException- 如果rhs为null - 自1.2版本起:
- 1.2
-
exclusiveOr
将此Area的形状设置为其当前形状和指定Area的形状的组合区域,减去它们的交集。此Area的结果形状将仅包括仅包含在此Area或指定Area中的区域,但不包含在两者中都包含的区域。// 示例: Area a1 = new Area([三角形 0,0 => 8,0 => 0,8]); Area a2 = new Area([三角形 0,0 => 8,0 => 8,8]); a1.exclusiveOr(a2); a1(之前) 异或 a2 = a1(之后) ################ ################ ############## ############## ## ## ############ ############ #### #### ########## ########## ###### ###### ######## ######## ################ ###### ###### ###### ###### #### #### #### #### ## ## ## ##- 参数:
-
rhs- 要与此Area进行异或操作的Area - 抛出:
-
NullPointerException- 如果rhs为null - 自1.2版本起:
- 1.2
-
reset
public void reset()从此Area中删除所有几何图形,并将其恢复为空区域。- 自1.2版本起:
- 1.2
-
isEmpty
public boolean isEmpty()测试此Area对象是否包含任何区域。- 返回:
-
如果此
Area对象表示空区域,则返回true; 否则返回false。 - 自1.2版本起:
- 1.2
-
isPolygonal
public boolean isPolygonal()测试此Area是否完全由直线边缘多边形几何图形组成。- 返回:
-
如果此
Area的几何图形完全由线段组成,则返回true; 否则返回false。 - 自1.2版本起:
- 1.2
-
isRectangular
public boolean isRectangular()测试此Area的形状是否为矩形。- 返回:
-
如果此
Area的几何图形为矩形,则返回true; 否则返回false。 - 自1.2版本起:
- 1.2
-
isSingular
public boolean isSingular()测试此Area是否由单个封闭子路径组成。如果路径包含0个或1个子路径,则此方法返回true,如果路径包含多于1个子路径,则返回false。子路径通过路径中出现的SEG_MOVETO线段的数量来计算。- 返回:
-
如果
Area由单个基本几何图形组成,则返回true; 否则返回false。 - 自1.2版本起:
- 1.2
-
getBounds2D
- 指定者:
-
getBounds2D在接口Shape - 返回:
-
Area的边界Rectangle2D。 - 自1.2版本起:
- 1.2
- 参见:
-
getBounds
返回完全包围此Area的边界Rectangle。Area类将尝试返回Shape的最紧密边界框。边界框不会填充以包括形状轮廓中曲线的控制点,但应紧密适合轮廓本身的实际几何形状。由于返回的对象用整数表示边界框,因此边界框只能尽可能紧密地包围几何形状的最近整数坐标。
-
clone
返回此Area对象的精确副本。 -
equals
测试两个Area对象的几何图形是否相等。如果参数为null,则此方法将返回false。- 参数:
-
other- 要与此Area比较的Area - 返回:
-
如果两个几何图形相等,则返回
true; 否则返回false。 - 自1.2版本起:
- 1.2
-
transform
使用指定的AffineTransform转换此Area的几何图形。几何图形将就地转换,从而永久更改此对象定义的封闭区域。- 参数:
-
t- 用于转换区域的变换 - 抛出:
-
NullPointerException- 如果t为null - 自1.2版本起:
- 1.2
-
createTransformedArea
创建一个包含与此Area相同几何图形的新Area对象,该Area对象未更改。- 参数:
-
t- 用于转换新Area的指定AffineTransform - 返回:
-
表示转换后几何图形的新
Area对象。 - 抛出:
-
NullPointerException- 如果t为null - 自1.2版本起:
- 1.2
-
contains
public boolean contains(double x, double y) 测试指定坐标是否在Shape的边界内,如内部定义所述。 -
contains
-
contains
public boolean contains(double x, double y, double w, double h) 测试Shape的内部是否完全包含指定的矩形区域。所有位于矩形区域内的坐标必须位于整个矩形区域内的Shape中,才能认为整个矩形区域包含在Shape内部。Shape.contains()方法允许Shape实现在以下情况下保守地返回false:intersect方法返回true且- 用于确定
Shape是否完全包含矩形区域的计算代价过高。
Shapes,即使Shape包含矩形区域,此方法可能返回false。与大多数Shape对象相比,Area类执行更准确的几何计算,因此如果需要更精确的答案,则可以使用它。 -
contains
测试Shape的内部是否完全包含指定的Rectangle2D。当:intersect方法返回true且计算确定Shape是否完全包含Rectangle2D的代价过高时,Shape.contains()方法允许Shape实现保守地返回false。- 这意味着对于某些
Shapes,即使Shape包含Rectangle2D,该方法可能返回false。比Shape对象更准确地执行几何计算的Area类,因此如果需要更精确的答案,则可以使用它。
- 这意味着对于某些
-
intersects
public boolean intersects(double x, double y, double w, double h) 测试Shape的内部是否与指定矩形区域的内部相交。如果任何点同时包含在Shape的内部和指定矩形区域内,则认为矩形区域与Shape相交。Shape.intersects()方法允许Shape实现在以下情况下保守地返回true:- 矩形区域和
Shape有很高的概率相交,但 - 准确确定此交集的计算代价过高。
Shapes,即使矩形区域与Shape不相交,该方法可能返回true。比Shape对象更准确地执行几何交集计算的Area类,因此如果需要更精确的答案,则可以使用它。- 指定者:
-
intersects在接口Shape中 - 参数:
-
x- 指定矩形区域左上角的X坐标 -
y- 指定矩形区域左上角的Y坐标 -
w- 指定矩形区域的宽度 -
h- 指定矩形区域的高度 - 返回值:
-
true如果Shape的内部与矩形区域的内部相交,或者两者高度可能相交且交集计算过于昂贵;否则返回false。 - 自版本:
- 1.2
- 参见:
- 矩形区域和
-
intersects
测试Shape的内部是否与指定的Rectangle2D的内部相交。当:Rectangle2D和Shape有很高的概率相交,但准确确定此交集的计算代价过高时,Shape.intersects()方法允许Shape实现保守地返回true。- 这意味着对于某些
Shapes,即使Rectangle2D与Shape不相交,该方法可能返回true。比Shape对象更准确地执行几何交集计算的Area类,因此如果需要更精确的答案,则可以使用它。
- 指定者:
-
intersects在接口Shape中 - 参数:
-
r- 指定的Rectangle2D - 返回值:
-
true如果Shape的内部与指定的Rectangle2D的内部相交,或者两者高度可能相交且交集计算过于昂贵;否则返回false。 - 自版本:
- 1.2
- 参见:
- 这意味着对于某些
-
getPathIterator
为此Area对象的轮廓创建一个PathIterator。此Area对象保持不变。- 指定者:
-
getPathIterator在接口Shape中 - 参数:
-
at- 可选的AffineTransform,用于在迭代返回坐标时应用,如果需要未转换的坐标,则为null - 返回值:
-
返回以一段一段方式返回此
Area轮廓的几何的PathIterator对象。 - 自版本:
- 1.2
-
getPathIterator
为此Area对象的平坦轮廓创建一个PathIterator。迭代器仅返回由SEG_MOVETO、SEG_LINETO和SEG_CLOSE点类型表示的非曲线路径段。此Area对象保持不变。- 指定者:
-
getPathIterator在接口Shape中 - 参数:
-
at- 可选的AffineTransform,用于在迭代返回坐标时应用,如果需要未转换的坐标,则为null -
flatness- 给定曲线的控制点可以在变成共线之前变化的最大量,此时通过连接端点替换子曲线 - 返回值:
-
返回以一段一段方式返回此
Area轮廓的几何的PathIterator对象。 - 自版本:
- 1.2
-