模块  java.desktop
软件包  java.awt.geom

Class Area

  • 实现的所有接口
    ShapeCloneable

    public class Area
    extends Object
    implements Shape, Cloneable
    Area对象存储和操作二维空间的封闭区域的与分辨率无关的描述。 Area对象可以转换,并且可以在与其他Area对象组合时执行各种构造区域几何(CAG)操作。 该CAG操作包括区域additionsubtractionintersectionexclusive or 有关各种操作的示例,请参阅链接的方法文档。

    Area类实现了Shape接口,并为其所有命中测试和路径迭代工具提供了全面支持,但Area在许多方面比通用路径更具体:

    • 仅存储封闭路径和子路径。 Area闭合路径构造的Area对象在构造期间隐式关闭,就好像这些路径已由Graphics2D.fill方法填充。
    • 各个存储的子路径的内部都是非空的且不重叠的。 在构造期间将路径分解成单独的组件非重叠部分,丢弃路径的空片段,然后通过所有后续CAG操作维护这些非空和非重叠属性。 不同组件子路径的轮廓可以彼此接触,只要它们不交叉以使它们的封闭区域重叠。
    • 描述Area轮廓的路径的几何形状类似于构造它的路径,因为它描述了相同的封闭二维区域,但可以使用完全不同的类型和路径段的顺序来实现。
    使用Area时并不总是显而易见的有趣问题包括:
    • Area闭合(打开) Shape创建Shape导致Area对象中的闭合轮廓。
    • Shape创建Area ,其中不包含任何区域(即使“关闭”)会产生空Area 此问题的一个常见示例是,从一行生成Area将为空,因为该行不包含任何区域。 空的Area将在其PathIterator对象中不迭代任何几何体。
    • 自交叉Shape可以分成两个(或更多个)子路径,每个子路径包围原始路径的一个非交叉部分。
    • 即使原始轮廓简单明了, Area也可以采用更多路径段来描述相同的几何形状。 Area类必须在路径上执行的分析可能不会反映出与人类感知的“简单和明显”相同的概念。
    从以下版本开始:
    1.2
    • 构造方法详细信息

      • Area

        public Area()
        默认构造函数,它创建一个空区域。
        从以下版本开始:
        1.2
      • Area

        public Area​(Shape s)
        Area类从指定的Shape对象创建区域几何。 如果Shape尚未关闭,则显式关闭几何。 Shape的几何图形指定的填充规则(偶数 - 奇数或绕组)用于确定生成的封闭区域。
        参数
        s - 构建该区域的 Shape
        异常
        NullPointerException - 如果 s为空
        从以下版本开始:
        1.2
    • 方法详细信息

      • add

        public void add​(Area rhs)
        添加指定的形状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为空
        从以下版本开始:
        1.2
      • subtract

        public void subtract​(Area rhs)
        减去指定的形状Area从这个形状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为空
        从以下版本开始:
        1.2
      • intersect

        public void intersect​(Area rhs)
        将此Area的形状设置为其当前形状与指定的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为空
        从以下版本开始:
        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独家 Area
        异常
        NullPointerException - 如果 rhs为空
        从以下版本开始:
        1.2
      • reset

        public void reset()
        从此 Area删除所有几何体并将其还原到空白区域。
        从以下版本开始:
        1.2
      • isEmpty

        public boolean isEmpty()
        测试此 Area对象是否包含任何区域。
        结果
        true如果此Area对象表示空白区域; 否则为false
        从以下版本开始:
        1.2
      • isPolygonal

        public boolean isPolygonal()
        测试此 Area是否完全由直边多边形几何体组成。
        结果
        true如果此的几何形状Area完全线段组成; 否则为false
        从以下版本开始:
        1.2
      • isRectangular

        public boolean isRectangular()
        测试 Area是否为矩形。
        结果
        true如果此的几何形状Area的形状为矩形; 否则为false
        从以下版本开始:
        1.2
      • isSingular

        public boolean isSingular()
        测试此Area是否由单个封闭的子路径组成。 此方法返回true如果路径中包含0或1的子路径,或false如果路径中包含多个子路径1。 子路径由路径中显示的SEG_MOVETO段的数量计算。
        结果
        true如果Area由单个基本几何体组成; 否则为false
        从以下版本开始:
        1.2
      • getBounds2D

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

        Area类将尝试返回Shape可能的最紧密的边界框。 边界框不会被填充以包含Shape轮廓中的曲线控制点,但应紧密适合轮廓本身的实际几何形状。

        Specified by:
        getBounds2D在界面 Shape
        结果
        Rectangle2D的边界 Area
        从以下版本开始:
        1.2
        另请参见:
        Shape.getBounds()
      • getBounds

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

        Area类将尝试返回Shape可能的最紧密的边界框。 边界框不会被填充以包含Shape轮廓中的曲线控制点,但应紧密适合轮廓本身的实际几何形状。 由于返回的对象表示带有整数的边界框,因此边界框只能与包含Shape几何体的最近整数坐标一样紧密。

        Specified by:
        getBounds接口 Shape
        结果
        RectangleArea
        从以下版本开始:
        1.2
        另请参见:
        Shape.getBounds2D()
      • clone

        public Object clone()
        返回此 Area对象的精确副本。
        重写:
        clone在课程 Object
        结果
        创建克隆对象
        从以下版本开始:
        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为空
        从以下版本开始:
        1.2
      • createTransformedArea

        public Area createTransformedArea​(AffineTransform t)
        创建一个新的Area对象,该对象包含与由指定的AffineTransform转换的Area相同的几何。 Area对象未更改。
        参数
        t -指定 AffineTransform用于变换新 Area
        结果
        表示变换几何的新 Area对象。
        异常
        NullPointerException - 如果 t为空
        从以下版本开始:
        1.2
      • contains

        public boolean contains​(double x,
                                double y)
        测试指定的坐标是否在 Shape的边界内,如 definition of insideness所述
        Specified by:
        contains接口 Shape
        参数
        x - 要测试的指定X坐标
        y - 要测试的指定Y坐标
        结果
        true如果指定的坐标位于Shape边界内; 否则为false
        从以下版本开始:
        1.2
      • contains

        public boolean contains​(Point2D p)
        测试指定Point2D是的边界内Shape ,如所描述的definition of insideness
        Specified by:
        contains接口 Shape
        参数
        p - 要测试的指定 Point2D
        结果
        true如果指定Point2D是的边界内Shape ; 否则为false
        从以下版本开始:
        1.2
      • contains

        public boolean contains​(double x,
                                double y,
                                double w,
                                double h)
        测试Shape的内部Shape完全包含指定的矩形区域。 摆在矩形区域内必须将内在于所有的坐标Shape整个矩形区域被认为包含内Shape

        Shape.contains()方法允许Shape实现在Shape情况下保守地返回false

        • intersect方法返回true
        • 用于确定Shape是否完全包含矩形区域的计算非常昂贵。
        这意味着对于某些Shapes即使Shape包含矩形区域,此方法也可能返回false Area类比大多数Shape对象执行更精确的几何计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        contains接口 Shape
        参数
        x - 指定矩形区域左上角的X坐标
        y - 指定矩形区域左上角的Y坐标
        w - 指定矩形区域的宽度
        h - 指定矩形区域的高度
        结果
        true如果内部Shape完全包含指定矩形区域; false否则或者,如果Shape包含矩形区域并且intersects方法返回true并且包含计算将太昂贵而无法执行。
        从以下版本开始:
        1.2
        另请参见:
        AreaShape.intersects(double, double, double, double)
      • contains

        public boolean contains​(Rectangle2D r)
        测试Shape的内部Shape完全包含指定的Rectangle2D Shape.contains()方法允许Shape实施保守地返回false
        • intersect方法返回true
        • 用于确定Shape是否完全包含Rectangle2D的计算非常昂贵。
        这意味着对于某些Shapes这种方法也可能返回false即使Shape包含Rectangle2D Area类比大多数Shape对象执行更精确的几何计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        contains在界面 Shape
        参数
        r - 指定的 Rectangle2D
        结果
        true如果内部Shape完全包含Rectangle2D ; false否则或者,如果Shape包含Rectangle2Dintersects方法返回true和遏制计算将执行过于昂贵。
        从以下版本开始:
        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实施在Shape情况下保守地返回true

        • 矩形区域与Shape交叉的概率很高,但是
        • 精确确定这个交叉点的计算非常昂贵。
        这意味着对于某些Shapes这种方法也可能返回true即使矩形区域没有相交Shape Area类比大多数Shape对象执行更精确的几何交集计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        intersects接口 Shape
        参数
        x - 指定矩形区域左上角的X坐标
        y - 指定矩形区域左上角的Y坐标
        w - 指定矩形区域的宽度
        h - 指定矩形区域的高度
        结果
        true如果Shape的内部与矩形区域的内部相交,或者两者都很可能相交并且交叉计算将太昂贵而无法执行; 否则为false
        从以下版本开始:
        1.2
        另请参见:
        Area
      • intersects

        public boolean intersects​(Rectangle2D r)
        测试Shape的内部是否与指定的Rectangle2D的内部相交。 在以下情况下, Shape.intersects()方法允许Shape实施保守地返回true
        • Rectangle2DShape交叉的概率很高,但是
        • 精确确定这个交叉点的计算非常昂贵。
        这意味着对于某些Shapes这种方法也可能返回true即使Rectangle2D不相交Shape Area类比大多数Shape对象执行更精确的几何交集计算,因此如果需要更精确的答案,则可以使用它。
        Specified by:
        intersects接口 Shape
        参数
        r - 指定的 Rectangle2D
        结果
        true如果Shape的内部与指定的Rectangle2D的内部相交,或者两者都很有可能相交并且交叉计算将太昂贵而无法执行; 否则为false
        从以下版本开始:
        1.2
        另请参见:
        Shape.intersects(double, double, double, double)
      • getPathIterator

        public PathIterator getPathIterator​(AffineTransform at)
        为此Area对象的轮廓创建一个PathIterator Area对象未更改。
        Specified by:
        getPathIterator接口 Shape
        参数
        at - 可选的 AffineTransform应用于迭代中返回的坐标,如果需要未转换的坐标则 null
        结果
        PathIterator对象,返回此 Area轮廓的几何,一次一个段。
        从以下版本开始:
        1.2
      • getPathIterator

        public PathIterator getPathIterator​(AffineTransform at,
                                            double flatness)
        创建PathIterator此的扁平轮廓Area对象。 迭代器仅返回由SEG_MOVETO,SEG_LINETO和SEG_CLOSE点类型表示的未弯曲路径段。 Area对象未更改。
        Specified by:
        getPathIterator接口 Shape
        参数
        at - 可选的 AffineTransform应用于迭代中返回的坐标,如果需要未转换的坐标则 null
        flatness - 在将细分曲线替换为连接端点的直线之前,给定曲线的控制点的最大量可以 flatness线变化
        结果
        PathIterator对象,返回此 Area轮廓的几何,一次一个段。
        从以下版本开始:
        1.2