public abstract class Path2D extends Object implements Shape, Cloneable
Path2D
类提供了一个简单而又灵活的形状,表示任意的几何路径。
它可以完全表示可以由迭代的任何路径PathIterator
接口包括其所有段类型和绕组规则,它实现了所有的基本命中测试方法Shape
接口。
使用Path2D.Float
与可表示且能使用浮点精度的数据的时候。 使用Path2D.Double
对于需要双精度的准确性或范围的数据。
Path2D
提供了基本构建和管理几何路径所需的这些设施,上述界面的实现几乎没有添加解释。 如果操作封闭几何形状的内部空间是非常有用的,那么Area
课程提供了特别针对封闭图形的附加功能。 虽然这两个类名义上实现Shape
接口,它们在目的不同,它们一起提供了一个几何形状,其中两个有用的视图Path2D
主要处理由路径段和形成的轨迹Area
更多地处理解释和2D几何空间封闭区域的操纵。
PathIterator
接口对组成路径的段类型和绕组规则进行了更详细的描述,该规则控制如何确定哪些区域在路径内部或外部。
Modifier and Type | Class and Description |
---|---|
static class |
Path2D.Double
Double 类定义了一个几何路径,坐标存储在双精度浮点中。
|
static class |
Path2D.Float
Float 类定义了一个几何路径,坐标存储在单精度浮点中。
|
Modifier and Type | Field and Description |
---|---|
static int |
WIND_EVEN_ODD
用于确定路径内部的偶数绕组规则。
|
static int |
WIND_NON_ZERO
用于确定路径内部的非零绕组规则。
|
Modifier and Type | Method and Description |
---|---|
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 ,如所描述的
definition of insideness 。
|
boolean |
contains(double x, double y, double w, double h)
测试
Shape 的内部
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 ,如所描述的definition of insideness 。
|
boolean |
contains(Rectangle2D r)
测试
Shape 的内部
Shape 全部包含指定的
Rectangle2D 。
|
Shape |
createTransformedShape(AffineTransform at)
返回一个新
Shape 表示此的转换版本
Path2D 。
|
abstract void |
curveTo(double x1, double y1, double x2, double y2, double x3, double y3)
通过绘制与当前坐标和指定坐标(x3,y3)
(x3,y3) 的Bézier曲线,使用指定点
(x1,y1) 和
(x2,y2) 作为Bézier控制点,将一个由三个新点定义的曲线段添加到路径。
|
Rectangle |
getBounds()
返回一个整数 Rectangle 完全包围Shape 。
|
Point2D |
getCurrentPoint()
|
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)
(x2,y2) ,使用指定点
(x1,y1) 作为二次参数控制点,将一个由两个新点定义的曲线段添加到路径。
|
void |
reset()
将路径重置为空。
|
void |
setWindingRule(int rule)
将此路径的绕组规则设置为指定值。
|
abstract void |
transform(AffineTransform at)
使用指定的 AffineTransform 转换此路径的几何。
|
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getBounds2D, getPathIterator
public static final int WIND_EVEN_ODD
PathIterator.WIND_EVEN_ODD
,
Constant Field Values
public static final int WIND_NON_ZERO
PathIterator.WIND_NON_ZERO
,
Constant Field Values
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
- 一个布尔值,用于控制是否将初始的
moveTo
段转换为
lineTo
段以将新的几何连接到现有路径
public abstract void append(PathIterator pi, boolean connect)
PathIterator
对象的几何体附加到路径,可能将新几何体连接到具有线段的现有路径段。
如果connect
参数是true
和路径不是空的,则任何初始moveTo
在所附的几何形状Shape
变成一个lineTo
段。
如果这种连接lineTo
段的目标坐标与当前打开的子路径的结束坐标匹配,那么该段被省略为多余的。
指定的卷绕规则Shape
被忽略,并且在所附的几何形状由该路径所指定的缠绕规则支配。
pi
- 其几何被附加到该路径的
PathIterator
connect
- 一个布尔值,用于控制是否将初始的
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)
Shape
表示此的转换版本Path2D
。
请注意,此方法未指定返回值的确切类型和坐标精度。
该方法将返回一个Shape,其转换几何的精度不会比目前Path2D
Path2D更低,但也可能不包含更多的精度。
如果结果中的精度与存储大小的权衡很重要,那么应该使用Path2D.Float
和Path2D.Double
子类中的方便 构造函数来进行选择。
at
-
AffineTransform
用于转换新的
Shape
。
Shape
,转换与指定的
AffineTransform
。
public final Rectangle getBounds()
Rectangle
完全包围Shape
。
需要注意的是没有保证返回Rectangle
是最小的边框包围Shape
,只表示Shape
完全在指定的范围内Rectangle
。
如果Shape
溢出整数数据类型的有限范围,返回的Rectangle
也可能无法完全封闭Shape
。
getBounds2D
方法通常返回更严格的边界框,因为它具有更大的表示灵活性。
请注意, definition of insideness可能导致在返回的bounds
对象中可能不会将shape定义大纲上的点shape
包含的情况,但仅在原始shape
中也未考虑这些点的情况下。
如果point
是内部shape
根据contains(point)
方法,那么它必须是内部返回Rectangle
界限根据对象contains(point)
所述的方法bounds
。 特别:
shape.contains(x,y)
要求bounds.contains(x,y)
如果point
不在shape
,那么它可能仍然包含在bounds
对象中:
bounds.contains(x,y)
并不表示shape.contains(x,y)
getBounds
在接口
Shape
Rectangle
完全封闭了
Shape
。
Shape.getBounds2D()
public static boolean contains(PathIterator pi, double x, double y)
PathIterator
。
该方法为Shape
接口的实现者提供了实现Shape.contains(double, double)
方法支持的基本功能。
pi
- 指定的
PathIterator
x
- 指定的X坐标
y
- 指定的Y坐标
true
如果指定的坐标在指定的内部PathIterator
;
false
否则
public static boolean contains(PathIterator pi, Point2D p)
Point2D
是指定的封闭边界内PathIterator
。
该方法为Shape
接口的实现者提供了实现Shape.contains(Point2D)
方法支持的基本功能。
pi
- 指定的
PathIterator
p
- 指定的
Point2D
true
如果指定的坐标在指定的内部PathIterator
;
false
否则
public final boolean contains(double x, double y)
Shape
,如所描述的
definition of insideness 。
public final boolean contains(Point2D p)
Point2D
是的边界内Shape
,如所描述的definition of insideness 。
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
- 指定矩形区域的高度
true
如果指定的PathIterator
包含指定的矩形区域;
false
否则。
public static boolean contains(PathIterator pi, Rectangle2D r)
Rectangle2D
是完全指定的封闭边界内PathIterator
。
该方法为Shape
接口的实现者提供了实现对Shape.contains(Rectangle2D)
方法的支持的基本功能。
在指定的矩形区域与路径的段相交的情况下,该方法对象可以保守地返回false,但该段不表示路径的内部和外部之间的边界。 如果它们是具有WIND_NON_ZERO
卷绕规则的路径的一部分,或者如果这些段在相反方向上被回溯以使得两组段彼此抵消而没有任何外部区域落在他们。 为了确定段代表路径内部的真实边界将需要涉及路径和绕组规则的所有段的广泛计算,因此超出了该实现的范围。
pi
- 指定的
PathIterator
r
- 一个指定的
Rectangle2D
true
如果指定的PathIterator
包含指定的Rectangle2D
;
false
否则。
public final boolean contains(double x, double y, double w, double h)
Shape
的内部是否包含指定的矩形区域。
摆在矩形区域内必须将内在于所有的坐标Shape
整个矩形区域被认为包含内Shape
。
Shape.contains()
方法允许一个Shape
保守地返回false
当:
intersect
方法返回true
和 Shape
完全包含矩形区域的代价太高。 Shapes
即使Shape
包含矩形区域,此方法也可能返回false
。
所述Area
类比大多数执行更精确的几何计算Shape
对象,因此可以在需要更精确的答案一起使用。
在指定的矩形区域与路径的段相交的情况下,该方法对象可以保守地返回false,但该段不表示路径的内部和外部之间的边界。 如果它们是具有WIND_NON_ZERO
卷绕规则的路径的一部分,或者如果片段在相反方向上被回缩以使得两组片段彼此抵消而没有任何外部区域落在其间,则这样的片段可以完全位于路径的内部中他们。 为了确定段代表路径内部的真实边界将需要涉及路径和绕组规则的所有段的广泛计算,因此超出了该实现的范围。
contains
在界面
Shape
x
- 指定矩形区域左上角的X坐标
y
- 指定矩形区域左上角的Y坐标
w
- 指定矩形区域的宽度
h
- 指定矩形区域的高度
true
如果内部Shape
完全包含指定矩形区域;
false
否则或如果Shape
包含矩形区域,并且intersects
方法返回true
并且包含计算将太昂贵执行。
Area
, Shape.intersects(double, double, double, double)
public final boolean contains(Rectangle2D r)
Shape
的内部Shape
全部包含指定的Rectangle2D
。
该Shape.contains()
方法允许Shape
实现谨慎地返回false
时:
intersect
方法返回true
和 Shape
完全包含Rectangle2D
的代价太高。 Shapes
这个方法可能会返回false
即使Shape
包含Rectangle2D
。
所述Area
类比大多数执行更精确的几何计算Shape
对象,因此可以在需要更精确的答案一起使用。
在指定的矩形区域与路径的段相交的情况下,该方法对象可以保守地返回false,但该段不表示路径的内部和外部之间的边界。 如果它们是具有WIND_NON_ZERO
绕组规则的路径的一部分,或者如果段在相反方向上被回溯以使得两组段彼此抵消而没有任何外部区域落在其间,则这些段可以完全位于路径的内部中他们。 为了确定段代表路径内部的真实边界将需要涉及路径和绕组规则的所有段的广泛计算,因此超出了该实现的范围。
contains
中的
Shape
r
- 指定的
Rectangle2D
true
如果内部的Shape
完全包含Rectangle2D
;
false
否则或如果Shape
包含Rectangle2D
和intersects
方法返回true
并且遏制计算将太昂贵执行。
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
- 指定的直角坐标的高度
true
如果指定的PathIterator
和指定的一组直角坐标的内部相交;
false
否则。
public static boolean intersects(PathIterator pi, Rectangle2D r)
PathIterator
是否与指定的内部相交Rectangle2D
。
该方法为Shape
接口的实现者提供了实现Shape.intersects(Rectangle2D)
方法支持的基本功能。
在指定的矩形区域与路径的段相交的情况下,该方法对象可以保守地返回true,但该段不表示路径的内部和外部之间的边界。 如果路径的一些段的一部分在相反的方向回溯,使得两组段相互抵消而没有它们之间的任何内部区域,则可能发生这种情况。 为了确定段代表路径内部的真实边界将需要涉及路径和绕组规则的所有段的广泛计算,因此超出了该实现的范围。
pi
- 指定的
PathIterator
r
- 指定的
Rectangle2D
true
如果指定的PathIterator
和指定的内部Rectangle2D
相交;
false
否则。
public final boolean intersects(double x, double y, double w, double h)
Shape
相交的指定矩形区域的内部。
矩形区域被认为是交叉的Shape
如果任何点被包含在双方的内部Shape
和指定的矩形区域。
Shape.intersects()
方法允许一个Shape
保守地返回true
当:
Shape
相交的Shape
很高,但是 Shapes
这个方法可能会返回true
即使矩形区域不相交Shape
。
所述Area
类执行几何相交的更精确的计算比大多数Shape
可以,如果需要更精确的答案被使用的对象,因此。
在指定的矩形区域与路径的段相交的情况下,该方法对象可以保守地返回true,但该段不表示路径的内部和外部之间的边界。 如果路径的一些段的一部分在相反的方向回溯,使得两组段相互抵消而没有它们之间的任何内部区域,则可能发生这种情况。 为了确定段代表路径内部的真实边界将需要涉及路径和绕组规则的所有段的广泛计算,因此超出了该实现的范围。
intersects
在界面
Shape
x
- 指定矩形区域左上角的X坐标
y
- 指定矩形区域左上角的Y坐标
w
- 指定矩形区域的宽度
h
- 指定矩形区域的高度
true
如果Shape
的内部和矩形区域的内部相交,或者两者都很可能相交,并且交叉点计算将太昂贵执行;
false
否则。
Area
public final boolean intersects(Rectangle2D r)
Shape
相交指定的内部Rectangle2D
。
该Shape.intersects()
方法允许Shape
实现谨慎地返回true
时:
Rectangle2D
和Shape
相交的Shape
很高,但是 Shapes
这个方法可能会返回true
即使Rectangle2D
不相交Shape
。
所述Area
类执行几何相交的更精确的计算比大多数Shape
可以,如果需要更精确的答案被使用的对象,因此。
在指定的矩形区域与路径的段相交的情况下,该方法对象可以保守地返回true,但该段不表示路径的内部和外部之间的边界。 如果路径的一些段的一部分在相反的方向回溯,使得两组段相互抵消而没有它们之间的任何内部区域,则可能发生这种情况。 为了确定段代表路径内部的真实边界将需要涉及路径和绕组规则的所有段的广泛计算,因此超出了该实现的范围。
intersects
在界面
Shape
r
- 指定的
Rectangle2D
true
如果内部Shape
和指定的内部Rectangle2D
相交,或两者均是高度可能相交及交叉点计算。将执行太贵;
false
否则。
Shape.intersects(double, double, double, double)
public final PathIterator getPathIterator(AffineTransform at, double flatness)
Shape
边界进行迭代的迭代器对象,并提供对Shape
外形几何体的展平视图的访问。
只有SEG_MOVETO,SEG_LINETO和SEG_CLOSE点类型由迭代器返回。
如果指定了可选的AffineTransform,则相应地AffineTransform
迭代中返回的坐标。
弯曲段的细分量由flatness
参数控制,该参数指定未平坦化变形曲线上的任何点可以偏离返回的平坦化路径段的最大距离。 注意,平坦化路径的精度的限制可能会被默认地施加,导致非常小的平坦化参数被视为较大的值。 这个限制(如果有的话)是由所使用的特定实现来定义的。
对此方法的每次调用都将返回一个新的PathIterator
对象,该对象与所使用的任何其他PathIterator
对象同时Shape
对象几何。
建议但不能保证实现Shape
接口的对象隔离在此类迭代期间原始对象的几何可能发生的任何更改的迭代。
此类的迭代器不是多线程安全的,这意味着此Path2D
类不保证对此Path2D
对象的几何的Path2D
不会影响已处理的该几何的任何迭代。
getPathIterator
在界面
Shape
at
- 要在迭代中返回时应用于
at
的可选
AffineTransform
,如果需要未转换的
null
,则为null
flatness
- 用于近似曲线段的线段的最大距离允许偏离原始曲线上的任何点
PathIterator
独立地横穿的几何形状的平面视图
Shape
。
public abstract Object clone()
clone
在类别
Object
OutOfMemoryError
- 如果没有足够的内存
Cloneable
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.