Module java.desktop
Package java.awt.geom

Class Area

java.lang.Object
java.awt.geom.Area
所有已实现的接口:
Shape, Cloneable

public class Area extends Object implements Shape, Cloneable
一个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 Details

    • Area

      public Area()
      创建一个空区域的默认构造函数。
      自从:
      1.2
    • Area

      public Area(Shape s)
      Area类从指定的Shape对象创建一个区域几何。如果Shape尚未关闭,则几何将被显式关闭。由Shape的几何指定的填充规则(奇偶或环绕)用于确定结果的封闭区域。
      参数:
      s - 用于构造区域的Shape
      抛出:
      NullPointerException - 如果s为null
      自从:
      1.2
  • Method Details

    • add

      public void add(Area rhs)
      将指定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

      public void subtract(Area rhs)
      从此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

      public void intersect(Area rhs)
      将此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

      public void exclusiveOr(Area rhs)
      将此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

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

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

      指定者:
      getBounds2D 在接口 Shape
      返回:
      Area的边界Rectangle2D
      自1.2版本起:
      1.2
      参见:
    • getBounds

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

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

      指定者:
      getBounds 在接口 Shape
      返回:
      Area的边界Rectangle
      自1.2版本起:
      1.2
      参见:
    • clone

      public Object clone()
      返回此Area对象的精确副本。
      覆盖:
      clone 在类 Object
      返回:
      创建的克隆对象
      自1.2版本起:
      1.2
      参见:
    • equals

      public boolean equals(Area other)
      测试两个Area对象的几何图形是否相等。如果参数为null,则此方法将返回false。
      参数:
      other - 要与此Area比较的Area
      返回:
      如果两个几何图形相等,则返回true; 否则返回false
      自1.2版本起:
      1.2
    • transform

      public void transform(AffineTransform t)
      使用指定的AffineTransform转换此Area的几何图形。几何图形将就地转换,从而永久更改此对象定义的封闭区域。
      参数:
      t - 用于转换区域的变换
      抛出:
      NullPointerException - 如果t为null
      自1.2版本起:
      1.2
    • createTransformedArea

      public Area createTransformedArea(AffineTransform t)
      创建一个包含与此Area相同几何图形的新Area对象,该Area对象未更改。
      参数:
      t - 用于转换新Area的指定AffineTransform
      返回:
      表示转换后几何图形的新Area对象。
      抛出:
      NullPointerException - 如果t为null
      自1.2版本起:
      1.2
    • contains

      public boolean contains(double x, double y)
      测试指定坐标是否在Shape的边界内,如内部定义所述。
      指定者:
      contains 在接口 Shape
      参数:
      x - 要测试的指定X坐标
      y - 要测试的指定Y坐标
      返回:
      如果指定坐标在Shape的边界内,则返回true; 否则返回false
      自1.2版本起:
      1.2
    • contains

      public boolean contains(Point2D p)
      测试指定的Point2D是否在Shape的边界内,如内部定义所述。
      指定者:
      contains 在接口 Shape
      参数:
      p - 要测试的指定Point2D
      返回:
      如果指定的Point2DShape的边界内,则返回true; 否则返回false
      自1.2版本起:
      1.2
    • 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
      参数:
      x - 指定矩形区域左上角的X坐标
      y - 指定矩形区域左上角的Y坐标
      w - 指定矩形区域的宽度
      h - 指定矩形区域的高度
      返回值:
      true 如果Shape的内部完全包含指定的矩形区域;否则返回false,或者如果Shape包含矩形区域且intersects方法返回true,并且包含计算过于昂贵。
      自版本:
      1.2
      参见:
    • contains

      public boolean contains(Rectangle2D r)
      测试Shape的内部是否完全包含指定的Rectangle2D。当:intersect方法返回true且计算确定Shape是否完全包含Rectangle2D的代价过高时,Shape.contains()方法允许Shape实现保守地返回false
      • 这意味着对于某些Shapes,即使Shape包含Rectangle2D,该方法可能返回false。比Shape对象更准确地执行几何计算的Area类,因此如果需要更精确的答案,则可以使用它。
      指定者:
      contains 在接口 Shape
      参数:
      r - 指定的Rectangle2D
      返回值:
      true 如果Shape的内部完全包含Rectangle2D;否则返回false,或者如果Shape包含Rectangle2Dintersects方法返回true,并且包含计算过于昂贵。
      自版本:
      1.2
      参见:
    • 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

      public boolean intersects(Rectangle2D r)
      测试Shape的内部是否与指定的Rectangle2D的内部相交。当:Rectangle2DShape有很高的概率相交,但准确确定此交集的计算代价过高时,Shape.intersects()方法允许Shape实现保守地返回true
      • 这意味着对于某些Shapes,即使Rectangle2DShape不相交,该方法可能返回true。比Shape对象更准确地执行几何交集计算的Area类,因此如果需要更精确的答案,则可以使用它。
      指定者:
      intersects 在接口 Shape
      参数:
      r - 指定的Rectangle2D
      返回值:
      true 如果Shape的内部与指定的Rectangle2D的内部相交,或者两者高度可能相交且交集计算过于昂贵;否则返回false
      自版本:
      1.2
      参见:
    • getPathIterator

      public PathIterator getPathIterator(AffineTransform at)
      为此Area对象的轮廓创建一个PathIterator。此Area对象保持不变。
      指定者:
      getPathIterator 在接口 Shape
      参数:
      at - 可选的AffineTransform,用于在迭代返回坐标时应用,如果需要未转换的坐标,则为null
      返回值:
      返回以一段一段方式返回此Area轮廓的几何的PathIterator对象。
      自版本:
      1.2
    • getPathIterator

      public PathIterator getPathIterator(AffineTransform at, double flatness)
      为此Area对象的平坦轮廓创建一个PathIterator。迭代器仅返回由SEG_MOVETO、SEG_LINETO和SEG_CLOSE点类型表示的非曲线路径段。此Area对象保持不变。
      指定者:
      getPathIterator 在接口 Shape
      参数:
      at - 可选的AffineTransform,用于在迭代返回坐标时应用,如果需要未转换的坐标,则为null
      flatness - 给定曲线的控制点可以在变成共线之前变化的最大量,此时通过连接端点替换子曲线
      返回值:
      返回以一段一段方式返回此Area轮廓的几何的PathIterator对象。
      自版本:
      1.2