> > 単純な四角形なら自分で書けば線幅なんかも自由なんで、 > > そういう解決法もありますよ。 > > 実は多角形のハッチ塗つぶしをする必要があるのでハッチ線の > 間隔をかえる場合はやはりAPIを駆使してやるしかないので > しょうね。
多角形でも内部塗りつぶしのアルゴリズムがあるから それを応用してハッチングの模様を書くこともできる と思いますよ。
多角形の塗りつぶしのアルゴリズムを簡単なものですが 紹介します。言葉だけなのでうまく伝わるか分かりませんが。
イメージ的には紙に書いた図形(多角形)に水平にした定規を 垂直方向にずらしていく。 (コンピュータ上では1ドットずつずらいしていく) その時に図形の各辺と定規の交点に注目します。 左端の交点と右端の交点の間を塗る。 これを繰り返せばSetPolyFillModeでWINDINGを指定したのと 同じ塗りつぶしになります。 1−2−3−4−5−6 また、交点間を塗るときに左から順に奇数個目の交点から 次の偶数個目の交点までを塗るようにするとSetPolyFillModeで ALTERNATEを指定したのと同じ塗りつぶしになります。 1−2 3−4 5−6
案外簡単でしょう。ってわかったかなぁ?
でハッチングの場合、このアルゴリズムで塗るときにハッチング の模様になるように追加の条件をつけます。 縦線を5ドット間隔でつける場合、塗ろうとした座標のX座標を 5で割ったあまりが0の時塗って、それ以外なら塗らない。 これで縦縞模様のハッチングが出来ます。 横も同様ですね。 縦横組み合わせればクロスハッチングになるし、 ここまでくれば、斜めのハッチングも少し考えればできるで しょう。
うまく説明できていないので難しかったかもしれませんが、 そんなに難しくないと思いますよ。
#んーん、いつか絵入のアルゴリズム解説コーナ作りたいなぁー
|