appendix> 2D> BasicStroke TOPUPPREVNEXT

BasicStroke

【主な機能】

線のひき方を表現します。以下の要素で表現されます。
線を描く方向に対して直角方向に測った線の幅。 float の数値。

エンドキャップ
線の両端に施す修飾。破線の場合は各々の線分の両端にも適用されます。

ラインジョイン
輪郭線の接合部に施す修飾

マイターリミット
輪郭線の接合部の MITER 修飾を、どの程度まで行うかの指定。

破線のパターン
破線をひく際の、線の長さと間隙の長さからなる float の配列。

破線の位相
破線のパターンのどの位置から書き始めるかを示す float の値。

【フィールド】

フィールド
CAP_BUTT エンドキャップ用の値。修飾をしません。
CAP_ROUND エンドキャップ用の値。幅の半分を半径とする半円を付加します。
CAP_SQUARE エンドキャップ用の値。幅の半分だけ、四角い形で延長します。
JOIN_BEVEL ラインジョインの値。面取りをします。
JOIN_MITER ラインジョインの値。外側の輪郭が重なるまで延長し、とがった角にします。
この規則だけだと、線の交わる角度が小さい場合、鋭くとがった長い角になります。 どのぐらい角がのびたら MITER をやめて BEVEL にするかを、 マイターリミットといいます。 マイターリミットは、 1.0 以上の値で、 1.0 のときはどんな角度でまじわっても、 MITER 修飾になりません。 ディフォルト値は 10.0F で、概ね11°より狭い角度で交わる場合に、 MITER 修飾をあきらめます。
JOIN_ROUND ラインジョインの値。線幅の半分の円で、丸く面取りをします。

【主なコンストラクタ】

コンストラクタ概要
BasicStroke ( ) BasicStroke(1.0F, CAP_SQARE, JOIN_MITER, 10.0F) で実線を描くための stroke を生成します。
BasicStroke ( float w ) BasicStroke( w , CAP_SQARE, JOIN_MITER, 10.0F) で実線を描くための stroke を生成します。
BasicStroke ( float w ,
int cap , int join )
BasicStroke( w , cap , join , 10.0F) で実線を描くための stroke を生成します。
BasicStroke ( float w ,
int cap , int join ,
float miterlimit )
実線を描くための stroke を生成します。
w
線幅を指定するfloat の定数
cap
エンドキャップを指定する定数値。
BasicStroke.CAP_BUTT
BasicStroke.CAP_ROUND
BasicStroke.CAP_SQUARE
のいずれか。
join
ラインジョインを指定する定数値。
BasicStroke.JOIN_BEVEL
BasicStroke.JOIN_MITER
BasicStroke.JOIN_ROUND
のいずれか。
miterlimit
マイターリミットの値。1.0 以上の float の定数。
BasicStroke ( float w ,
int cap , int join ,
float miterlimit ,
float[] dash ,
float dash_phase )
破線をひくための Stroke を生成します。
上記のパラメタに加えて、破線の線と間隔を指定する float の配列 dash と、dash で与えたパターンのどの位置から開始するかを指定する dash_phaseを指定します。

【例1】

プログラム Stroke1.java


ラインキャップ、ラインジョイン、マイターリミットの 様子を調べてみましょう。
プログラムのコンパイルと実行には、 プログラム StrokeBar.java が必要です。
BasicStroke のコンストラクタを呼び出しているのは、 プログラム StrokeBar.java の147行目です。 画面に表示されている値を取り出して数値に変換し コンストラクタに渡しています。
他の場所にはコンストラクタの呼び出しはありません。 また、BasicStroke のメソッドはひとつも使用していません。

左側の図形は直線を2本表示しただけです。 1本目の直線の終点の座標と、 2本目の始点の座標がいつも同じになるようにしてあります。

右側の図形は、GeneralPath を用いて、2直線をつなげたものです。 1本目の直線の終点が2本目の始点となるようにつなげた1つの図形です。

角の様子がわかりやすいように幅の初期値を 60.0 にしてあります。

実行例

 Stroke1-1.gif

 線幅: 60.0 実線(dash なし)

 エンドキャップ: BUTT
 ラインジョイン: MITER
 マイターリミット: 1.0

 Stroke1-2.gif

 エンドキャップ: ROUND
 ラインジョイン: MITER
 マイターリミット: 1.0

 Stroke1-3.gif

 エンドキャップ: BUTT
 ラインジョイン: ROUND
 マイターリミット: 1.0

 Stroke1-4.gif

 エンドキャップ: SQUARE
 ラインジョイン: ROUND
 マイターリミット: 1.0

 Stroke1-5.gif

 エンドキャップ: SQUARE
 ラインジョイン: MITER
 マイターリミット: 1.0

 Stroke1-6.gif

 エンドキャップ: BUTT
 ラインジョイン: MITER
 マイターリミット: 1.6

 MITER 修飾になりました。

 Stroke1-7.gif

 エンドキャップ: BUTT
 ラインジョイン: MITER
 マイターリミット: 1.0

 線が交わる角度をせまくしてゆくと、MITER 修飾でなくなります。

 Stroke1-8.gif

 エンドキャップ: BUTT
 ラインジョイン: MITER
 マイターリミット: 2.0

 マイターリミットをふやすと、 MITER 修飾に戻ります。

 Stroke1-9.gif

 エンドキャップ: BUTT
 ラインジョイン: MITER
 マイターリミット: 2.0

 さらに角度をせまくしてゆくと、また MITER 修飾でなくなります。

【例2】

  Stroke1-10.gif

プログラムは、例1と同じですが、 線を細くして(ここでは 3.0)、鎖線を描いて始点を動かしてみると、 左側の線は2本別々の線であり、右側は1本の線が曲がっている ということが判ります。

dash に指定した鎖線のパターン

{ 20.0, 20.0, 5.0, 5.0, 5.0, 5.0, 5.0, 20.0 } は、
実線長さ 20、間隙長さ 20、 実線長さ 5、間隙長さ 5、 実線長さ 5、間隙長さ 5、 実線長さ 5、間隙長さ 20 を繰り返すという意味です。 これをこのまま、float の配列にして、 BasicStroke のコンストラクタの5番目のパラメタとして使っています。

この欄を手入力するときには、半角で入力することと、前後に中カッコをつけること に注意してください。小数点は不要です。 プログラムをみれば判ると思いますが、

  1. この欄に入力した文字列の
  2. 中カッコの内側を、
  3. StringTokenizer でコンマの間の文字列を切り出し、
  4. Float.parseFloat で float の値にし、
  5. 個数分だけ配列につめこんでいます。

更新日:2005-12-09