目次 | 前の項目 | 次の項目 | JavaTM 2D API プログラマーズガイド |
Java 2D™ API では、点、直線、曲線、矩形など、基本的な幾何学オブジェクトを定義するクラスがいくつか提供されています。新しい幾何学クラスは、java.awt.geom
パッケージに含まれています。下位互換のため、Rectangle
、Point
、Polygon
など、旧バージョンの JDK で提供されていた幾何学クラスも、java.awt
パッケージに残っています。
GeneralPath
、Arc2D
、Rectangle2D
など Java 2D API の幾何図形は、java.awt
で定義されている Shape
インタフェースを実装しています。Shape
では、幾何学的なパスを持つオブジェクトを記述したり検査したりするための、共通のプロトコルが提供されています。新しいインタフェースの PathIterator
は、幾何学図形から要素を抽出するためのメソッドを定義しています。
幾何学クラスを使うと、ほとんどすべての 2 次元オブジェクトを、簡単に定義して操作できます。
次の表は、主要な幾何学インタフェースとクラスの一覧です。大部分のインタフェースとクラスは、java.awt.geom
パッケージに含まれています。Shape
など java.awt
パッケージに含まれているものもありますが、これは主に、旧バージョンの JDK との下位互換を維持するためです。
インタフェース
|
説明
|
---|---|
PathIterator
|
パスから要素を取得するためのメソッドを定義しています。
|
Shape
(java.awt)
|
幾何学的なパスを持つオブジェクトを記述および検査するための共通メソッド群を提供しています。
GeneralPath クラスおよびほかの幾何学クラスで実装されています。
|
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 2D™ API では、構成領域ジオメトリをサポートする特別な種類の Shape
も提供されています。
構成領域ジオメトリ (CAG) は、既存のオブジェクトにブール演算を行なって新しい幾何学オブジェクトを作る処理です。Java 2D API では、Area
という名前の特別な種類の Shape
が、ブール演算をサポートしています。任意の Shape
から Area
を構成できます。
Area
では、次のブール演算を実行できます。
これらの演算を図 3-1 に示します。
「バウンディングボックス」は、Shape
の図形を完全に囲む矩形です。バウンディングボックスを使って、ユーザがオブジェクトを選択したかどうか、つまり「ヒット」したかどうかを判定します。
Shape
インタフェースでは、図形のバウンディングボックスを取得するメソッドとして、getBounds
と getBounds2D
の 2 つが定義されています。getBounds2D
からは Rectangle
ではなく Rectangle2D
が返されるので、図形のバウンディングボックスについてさらに高い精度の記述を取得できます。
Shape
では、次の判定を行うメソッドも提供されています。
contains
)contains
)intersects
)
Area
を使うと、円や正方形のような単純な図形から複雑な Shape
を簡単に作ることができます。次は、Area
を結合して新規に複雑な Shape
を作る手順です。
Shape
を使って、結合する Area
を作成するadd
、subtract
、intersect
、exclusiveOr
から適切なものを呼び出すたとえば、CAG を使うと、図 3-2 に示すような洋なし型を作ることができます。
洋なしの本体は、重なり合う円と楕円の 2 つの Area
に論理和演算を行なって作ります。 それぞれの葉は、重なる 2 つの円に論理積演算を行なって作り、それを論理和演算で 1 つの Shape
に結合しています。茎の部分も、重なり合う円に論理差演算を 2 回行なって作られています。
Shape
インタフェースを実装して、新しい種類の形状を定義するクラスを作成できます。Shape
インタフェースのメソッドを実装できるならば、内部的に図形をどのように表現してもかまいません。Shape
では、輪郭を指定するパスを生成しなければなりません。
たとえば、点の配列としてポリゴンを表す Shape
の簡単な実装を作成できます。このようにしてポリゴンを作成してあれば、draw
や setClip
など、引数として Shape
オブジェクトを受け取る任意のメソッドにポリゴンを渡すことができます。
PolygonPath
クラスでは、次の Shape
インタフェースメソッドを実装する必要があります。
contains
getBounds
getBounds2D
getPathIterator
intersects
目次 | 前の項目 | 次の項目 |
JavaTM 2D API プログラマーズガイド JavaTM 2 SDK, Standard Edition, 1.4 Version |
Copyright © 2003 Sun Microsystems, Inc. All rights reserved.