目次 | 前の項目 | 次の項目 | Java 2D API |
Shape は、GeneralPath や Rectangle2D.Float など、Shape インタフェースを実装するすべてのクラスのインスタンスです。 Shape の外形 (輪郭) を「パス」と呼びます。Shape を描画する場合は、Graphics2D コンテキストの Stroke オブジェクトで定義されているペンのスタイルが、Shape のパスに適用されます。 Shape を塗りつぶす場合は、Graphics2D コンテキストの Paint が、パスの内側の領域に適用されます。 詳細については、「Graphics2D を使ったレンダリング」を参照してください。
Shape のパスは、「クリッピングパス」の定義にも使うことができます。 クリッピングパスにより、レンダリングされるピクセルが決まります。 クリッピングパスで定義される領域の内側にあるピクセルだけが、レンダリングされます。 クリッピングパスは、Graphics2D コンテキストの一部です。 詳細については、「クリッピングパスの設定」を参照してください。
GeneralPath を使うと、直線、2 次曲線、および 3 次曲線を使って構成される任意の 2 次元オブジェクトを表すことができます。 java.awt.geom では、矩形、楕円、円弧、曲線などの一般的な幾何学図形オブジェクトを簡単に表現できるよう、専用の Shape インタフェースの実装が別に提供されています。 また、Java 2DTM API では、構成領域ジオメトリをサポートする特別な種類の Shape も提供されています。
構成領域ジオメトリ (CAG) は、既存のオブジェクトにブール演算を行なって新しい幾何学オブジェクトを作る処理です。 Java 2D API では、Area という名前の特別な種類の Shape が、ブール演算をサポートしています。 任意の Shape から Area を構成できます。
これらの演算を図 3-1 に示します。
「バウンディングボックス」は、Shape の図形を完全に囲む矩形です。 バウンディングボックスを使って、ユーザがオブジェクトを選択したかどうか、つまり「ヒット」したかどうかを判定します。Shape インタフェースでは、図形のバウンディングボックスを取得するメソッドとして、getBounds と getBounds2D の 2 つが定義されています。 getBounds2D メソッドからは Rectangle ではなく Rectangle2D が返るので、図形のバウンディングボックスについてさらに高い精度の記述を取得できます。
Shape では、次の判定を行うメソッドも提供されています。