java.lang.Object java.awt.geom.Path2D
Path2D
类提供一个表示任意几何形状路径的简单而又灵活的形状。它可以完整地表示可通过 PathIterator
接口进行迭代的任何路径(包括其所有线段类型和旋绕规则),并实现 Shape
接口的所有基本目标测试方法。
在处理能够表示且能使用浮点精度的数据时,可以使用 Path2D.Float
。对于要求双精度的准确性或范围的数据,可以使用 Path2D.Double
。
Path2D
为基本构造、几何路径管理以及几乎没有附加解释的上述接口的实现精确地提供其所需的设施。如果除简单目标测试以外,它对操作封闭几何形状的内部有用,则 Area
类提供专用于封闭图形的附加容量。虽然两个类名义上都可以实现 Shape
接口,但它们的目的各不一样,并且它们一起提供了两个有用的几何形状视图,在该视图上,Path2D
主要处理由路径段形成的轨迹,而 Area
主要处理解释和操作 2D 几何空间的封闭区域。
PathIterator
接口有更多关于组成路径的线段类型、控制如何确定哪些区域位于路径之内或之外的旋绕规则的详细描述。
嵌套类摘要 | |
---|---|
static class |
Path2D.Double Double 类定义了一条几何路径,它具有以双精度浮点值形式存储的坐标。 |
static class |
Path2D.Float Float 类定义了一条几何路径,它具有以单精度浮点值形式存储的坐标。 |
字段摘要 | |
---|---|
static int |
WIND_EVEN_ODD 用于确定路径内部的奇偶旋绕规则。 |
static int |
WIND_NON_ZERO 用于确定路径内部的非零旋绕规则。 |
方法摘要 | |
---|---|
abstract void |
append(PathIterator pi, boolean connect) 将指定 PathIterator 对象的几何形状添加到路径中,可能要使用一条线段将新几何形状连接到现有路径段。 |
void |
append(Shape s, boolean connect) 将指定 Shape 对象的几何形状添加到路径中,可能要使用一条线段将新几何形状连接到现有路径段。 |
abstract Object |
clone() 创建一个与此对象具有相同类的新对象。 |
void |
closePath() 通过绘制一条向后延伸到最后一个 moveTo 的坐标的直线,封闭当前子路径。 |
boolean |
contains(double x, double y) 测试指定坐标是否在 Shape 的边界内。 |
boolean |
contains(double x, double y, double w, double h) 测试 Shape 内部是否完全包含指定矩形区域。 |
static boolean |
contains(PathIterator pi, double x, double y) 测试指定的坐标是否在指定 PathIterator 的封闭边界内。 |
static boolean |
contains(PathIterator pi, double x, double y, double w, double h) 测试指定矩形区域是否完全在指定 PathIterator 的封闭边界内。 |
static boolean |
contains(PathIterator pi, Point2D p) 测试指定的 Point2D 是否在指定 PathIterator 的封闭边界内。 |
static boolean |
contains(PathIterator pi, Rectangle2D r) 测试指定的 Rectangle2D 是否完全在指定 PathIterator 的封闭区域内。 |
boolean |
contains(Point2D p) 测试指定的 Point2D 是否在 Shape 的边界内。 |
boolean |
contains(Rectangle2D r) 测试 Shape 内部是否完全包含指定的 Rectangle2D 。 |
Shape |
createTransformedShape(AffineTransform at) 返回一个表示此 Path2D 变换形式的新 Shape 。 |
abstract void |
curveTo(double x1, double y1, double x2, double y2, double x3, double y3) 通过绘制与当前坐标和指定坐标 (x3,y3) 都相交的 Bézier 曲线,并将指定点 (x1,y1) 和 (x2,y2) 用作 Bézier 曲线的控制点,可以将由三个新点定义的曲线段添加到路径中。 |
Rectangle |
getBounds() 返回一个完全包围 Shape 的整型 Rectangle 。 |
Point2D |
getCurrentPoint() 返回最近添加到路径尾部的坐标(以 Point2D 对象形式)。 |
PathIterator |
getPathIterator(AffineTransform at, double flatness) 返回一个沿着 Shape 边界迭代并提供对 Shape 轮廓几何形状的平面视图访问的迭代器对象。 |
int |
getWindingRule() 返回填充风格旋绕规则。 |
boolean |
intersects(double x, double y, double w, double h) 测试 Shape 内部是否与指定矩形区域的内部相交。 |
static boolean |
intersects(PathIterator pi, double x, double y, double w, double h) 测试指定 PathIterator 的内部是否与指定直角坐标集的内部相交。 |
static boolean |
intersects(PathIterator pi, Rectangle2D r) 测试指定 PathIterator 的内部是否与指定 Rectangle2D 的内部相交。 |
boolean |
intersects(Rectangle2D r) 测试 Shape 内部是否与指定 Rectangle2D 内部相交。 |
abstract void |
lineTo(double x, double y) 通过绘制一条从当前坐标到新指定坐标(以双精度指定)的直线,将一个点添加到路径中。 |
abstract void |
moveTo(double x, double y) 通过移动到指定坐标(以双精度指定),将一个点添加到路径中。 |
abstract void |
quadTo(double x1, double y1, double x2, double y2) 通过绘制与当前坐标和指定坐标 (x2,y2) 都相交的二次曲线,并将指定点 (x1,y1) 用作二次曲线参数控制点,可以将由两个新点定义的曲线段添加到路径中。 |
void |
reset() 将路径重置为空。 |
void |
setWindingRule(int rule) 将此路径的旋绕规则设置为指定值。 |
abstract void |
transform(AffineTransform at) 使用指定的 AffineTransform 变换此路径的几何形状。 |
从类 java.lang.Object 继承的方法 |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
从接口 java.awt.Shape 继承的方法 |
---|
getBounds2D, getPathIterator |
字段详细信息 |
---|
public static final int WIND_EVEN_ODD
PathIterator.WIND_EVEN_ODD
,
常量字段值
public static final int WIND_NON_ZERO
PathIterator.WIND_NON_ZERO
,
常量字段值
方法详细信息 |
---|
public abstract void moveTo(double x, double y)
x
- 指定的 X 坐标
y
- 指定的 Y 坐标
public abstract void lineTo(double x, double y)
x
- 指定的 X 坐标
y
- 指定的 Y 坐标
public abstract void quadTo(double x1, double y1, double x2, double y2)
(x2,y2)
都相交的二次曲线,并将指定点
(x1,y1)
用作二次曲线参数控制点,可以将由两个新点定义的曲线段添加到路径中。所有坐标都以双精度指定。
x1
- 二次曲线控制点的 X 坐标
y1
- 二次曲线控制点的 Y 坐标
x2
- 终端点的 X 坐标
y2
- 终端点的 Y 坐标
public abstract void curveTo(double x1, double y1, double x2, double y2, double x3, double y3)
(x3,y3)
都相交的 Bézier 曲线,并将指定点
(x1,y1)
和
(x2,y2)
用作 Bézier 曲线的控制点,可以将由三个新点定义的曲线段添加到路径中。所有坐标都以双精度指定。
x1
- 第一个 Bézier 控制点的 X 坐标
y1
- 第一个 Bézier 控制点的 Y 坐标
x2
- 第二个 Bézier 控制点的 X 坐标
y2
- 第二个 Bézier 控制点的 Y 坐标
x3
- 终端点的 X 坐标
y3
- 终端点的 Y 坐标
public final void closePath()
moveTo
的坐标的直线,封闭当前子路径。如果该路径已封闭,则此方法无效。
public final void append(Shape s, boolean connect)
Shape
对象的几何形状添加到路径中,可能要使用一条线段将新几何形状连接到现有路径段。如果
connect
参数为
true
且路径是非空的,则添加的
Shape
几何形状的所有初始
moveTo
将被转换为
lineTo
段。如果这种连接
lineTo
段的目标坐标与当前开放子路径的结束坐标匹配,那么该线段将被作为多余线段忽略。指定
Shape
的旋绕规则将被忽略,添加的几何形状由为此路径指定的旋绕规则来管理。
s
- 其几何形状将被添加到此路径的
Shape
connect
- 一个 boolean 值,用于控制是否将初始
moveTo
段转换为
lineTo
段,从而将新几何形状连接到现有路径
public abstract void append(PathIterator pi, boolean connect)
PathIterator
对象的几何形状添加到路径中,可能要使用一条线段将新几何形状连接到现有路径段。如果
connect
参数为
true
且路径是非空的,则添加的
Shape
几何形状的所有初始
moveTo
将被转换为
lineTo
段。如果这种连接
lineTo
段的目标坐标与当前开放子路径的结束坐标匹配,那么该线段将被作为多余线段忽略。指定
Shape
的旋绕规则将被忽略,添加的几何形状由为此路径指定的旋绕规则来管理。
pi
- 其几何形状将被添加到此路径的
PathIterator
connect
- 一个 boolean 值,用于控制是否将初始
moveTo
段转换为
lineTo
段,从而将新几何形状连接到现有路径
public final int getWindingRule()
WIND_EVEN_ODD
,
WIND_NON_ZERO
,
setWindingRule(int)
public final void setWindingRule(int rule)
rule
- 表示指定旋绕规则的整数
IllegalArgumentException
- 如果
rule
既不是
WIND_EVEN_ODD
也不是
WIND_NON_ZERO
getWindingRule()
public final Point2D getCurrentPoint()
Point2D
对象形式)。
Point2D
对象;如果路径中没有任何点,则返回
null
。
public final void reset()
public abstract void transform(AffineTransform at)
AffineTransform
变换此路径的几何形状。原地变换几何形状,它将永久更改由此对象定义的边界。
at
- 用于变换区域的
AffineTransform
public final Shape createTransformedShape(AffineTransform at)
Path2D
变换形式的新
Shape
。注意,没有为此方法指定返回值的确切类型和坐标精度。该方法将返回一个 Shape,它所包含的变换的几何形状精度不小于此
Path2D
当前维持的精度,但它也不可能大于该精度。如果精度与结果中存储量大小的权衡很重要,那么应该使用
Path2D.Float
和
Path2D.Double
子类中的一些便捷构造方法,使选择更明确。
at
- 用于变换新
Shape
的
AffineTransform
。
Shape
,它使用指定的
AffineTransform
变换而来。
public final Rectangle getBounds()
Shape
的整型
Rectangle
。注意,不保证返回的
Rectangle
是包围
Shape
的最小边界框,只保证
Shape
完全位于指示的
Rectangle
中。如果
Shape
超出了整数数据类型的有效范围,则返回的
Rectangle
也可能不完全包围
Shape
。
getBounds2D
方法由于在表示形式上具有更大的灵活性,所以通常返回更紧密的边界框。
Shape
的整型
Rectangle
。
Shape.getBounds2D()
public static boolean contains(PathIterator pi, double x, double y)
PathIterator
的封闭边界内。
此方法为 Shape
接口的实现程序提供了基本设施,以实现对 Shape.contains(double, double)
方法的支持。
pi
- 指定的
PathIterator
x
- 指定的 X 坐标
y
- 指定的 Y 坐标
PathIterator
内部,则返回
true
;否则返回
false
public static boolean contains(PathIterator pi, Point2D p)
Point2D
是否在指定
PathIterator
的封闭边界内。
此方法为 Shape
接口的实现程序提供了基本设施,以实现对 Shape.contains(Point2D)
方法的支持。
pi
- 指定的
PathIterator
p
- 指定的
Point2D
PathIterator
内,则返回
true
;否则返回
false
public final boolean contains(double x, double y)
Shape
的边界内。
x
- 要测试的指定的 X 坐标
y
- 要测试的指定的 Y 坐标
Shape
边界内,则返回
true
;否则返回
false
。
public final boolean contains(Point2D p)
Point2D
是否在
Shape
的边界内。
p
- 要测试的指定的
Point2D
Point2D
在
Shape
边界内,则返回
true
;否则返回
false
。
public static boolean contains(PathIterator pi, double x, double y, double w, double h)
PathIterator
的封闭边界内。
此方法为 Shape
接口的实现程序提供了基本设施,以实现对 Shape.contains(double, double, double, double)
方法的支持。
在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 false。如果这些线段是遵守 WIND_NON_ZERO
旋绕规则的路径的一部分,或者这些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,那么这些线段可能完全位于路径内部。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。
pi
- 指定的
PathIterator
x
- 指定的 X 坐标
y
- 指定的 Y 坐标
w
- 指定矩形区域的宽度
h
- 指定矩形区域的高度
PathIterator
包含指定矩形区域,则返回
true
;否则返回
false
。
public static boolean contains(PathIterator pi, Rectangle2D r)
Rectangle2D
是否完全在指定
PathIterator
的封闭区域内。
此方法为 Shape
接口的实现程序提供了基本设施,以实现对 Shape.contains(Rectangle2D)
方法的支持。
在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 false。如果这些线段是遵守 WIND_NON_ZERO
旋绕规则的路径的一部分,或者这些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,那么这些线段可能完全位于路径内部。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。
pi
- 指定的
PathIterator
r
- 指定的
Rectangle2D
PathIterator
包含指定的
Rectangle2D
,则返回
true
;否则返回
false
。
public final 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
对象更为准确地执行几何计算,因此可以使用该类。
在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 false。如果这些线段是遵守 WIND_NON_ZERO
旋绕规则的路径的一部分,或者这些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,那么这些线段可能完全位于路径内部。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。
x
- 指定矩形区域左上角的 X 坐标
y
- 指定矩形区域左上角的 Y 坐标
w
- 指定矩形区域的宽度
h
- 指定矩形区域的高度
Shape
内部完全包含指定矩形区域,则返回
true
;否则,如果
Shape
包含矩形区域、
intersects
方法返回
true
且执行包含计算代价太高,则返回
false
。
Area
,
Shape.intersects(double, double, double, double)
public final boolean contains(Rectangle2D r)
Shape
内部是否完全包含指定的
Rectangle2D
。在下列情况下,
Shape.contains()
方法允许
Shape
实现谨慎地返回
false
:
intersect
方法返回 true
并且 Shape
是否完全包含 Rectangle2D
的代价太高。 Shape
,即使
Shape
包含
Rectangle2D
,此方法也可能返回
false
。如果需要更精确的答案,由于
Area
类比大多数
Shape
对象更为准确地执行几何计算,因此可以使用该类。
在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 false。如果这些线段是遵守 WIND_NON_ZERO
旋绕规则的路径的一部分,或者这些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,那么这些线段可能完全位于路径内部。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。
r
- 指定的
Rectangle2D
Shape
内部完全包含
Rectangle2D
,则返回
true
;否则,如果
Shape
包含
Rectangle2D
、
intersects
方法返回
true
且执行包含计算代价太高,则返回
false
。
Shape.contains(double, double, double, double)
public static boolean intersects(PathIterator pi, double x, double y, double w, double h)
PathIterator
的内部是否与指定直角坐标集的内部相交。
此方法为 Shape
接口的实现程序提供了基本设施,以实现对 Shape.intersects(double, double, double, double)
方法的支持。
在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 true。如果路径的一些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,则可能发生这种情况。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。
pi
- 指定的
PathIterator
x
- 指定的 X 坐标
y
- 指定的 Y 坐标
w
- 指定直角坐标的宽度
h
- 指定直角坐标的高度
PathIterator
和指定直角坐标集的内部相交,则返回
true
;否则返回
false
。
public static boolean intersects(PathIterator pi, Rectangle2D r)
PathIterator
的内部是否与指定
Rectangle2D
的内部相交。
此方法为 Shape
接口的实现程序提供基本设施,以实现对 Shape.intersects(Rectangle2D)
方法的支持。
在指定矩形区域与路径段相交,但该路径段不表示路径内部和外部之间的边界的情况下,此方法对象可能会谨慎地返回 true。如果路径的一些线段反方向折回,从而两组线段互相抵消且两组线段间没有任何外部区域,则可能发生这种情况。要确定线段是否表示路径内部的真实边界需要大量的计算,这些计算涉及所有路径段和旋绕规则,因此超出此实现的范围。
pi
- 指定的
PathIterator
r
- 指定的
Rectangle2D
PathIterator
和指定
Rectangle2D
的内部相交,则返回
true
;否则返回
false
。
public final boolean intersects(double x, double y, double w, double h)
Shape
内部是否与指定矩形区域的内部相交。如果任何一个点既包含在
Shape
内,又包含在指定矩形区域内,则认为矩形区域与
Shape
相交。
在下列情况下,Shape.intersects()
方法允许 Shape
实现谨慎地返回 true
:
Shape
相交的可能性很大,但是 Shape
,即使矩形区域没有与该
Shape
相交,此方法也可能返回
true
。如果需要更精确的答案,由于
Area
类比大多数
Shape
对象更为准确地计算几何相交,因此可以使用该类。
在指定矩形区域与路径段相交,但该路径段不