Re[3]: VBのハッチ塗つぶし


[コメントツリー表示を見る] [発言時刻順表示を見る]

Posted by Uz on 2000/08/19 03:04:34

In Reply to: Re[2]: VBのハッチ塗つぶし Posted by SATTO on 2000/08/19 00:15:45


    > > 単純な四角形なら自分で書けば線幅なんかも自由なんで、
    > > そういう解決法もありますよ。
    >
    > 実は多角形のハッチ塗つぶしをする必要があるのでハッチ線の
    > 間隔をかえる場合はやはりAPIを駆使してやるしかないので
    > しょうね。

    多角形でも内部塗りつぶしのアルゴリズムがあるから
    それを応用してハッチングの模様を書くこともできる
    と思いますよ。

    多角形の塗りつぶしのアルゴリズムを簡単なものですが
    紹介します。言葉だけなのでうまく伝わるか分かりませんが。

    イメージ的には紙に書いた図形(多角形)に水平にした定規を
    垂直方向にずらしていく。
    (コンピュータ上では1ドットずつずらいしていく)
    その時に図形の各辺と定規の交点に注目します。
    左端の交点と右端の交点の間を塗る。
    これを繰り返せばSetPolyFillModeでWINDINGを指定したのと
    同じ塗りつぶしになります。
    1−2−3−4−5−6
    また、交点間を塗るときに左から順に奇数個目の交点から
    次の偶数個目の交点までを塗るようにするとSetPolyFillModeで
    ALTERNATEを指定したのと同じ塗りつぶしになります。
    1−2 3−4 5−6

    案外簡単でしょう。ってわかったかなぁ?

    でハッチングの場合、このアルゴリズムで塗るときにハッチング
    の模様になるように追加の条件をつけます。
    縦線を5ドット間隔でつける場合、塗ろうとした座標のX座標を
    5で割ったあまりが0の時塗って、それ以外なら塗らない。
    これで縦縞模様のハッチングが出来ます。
    横も同様ですね。
    縦横組み合わせればクロスハッチングになるし、
    ここまでくれば、斜めのハッチングも少し考えればできるで
    しょう。

    うまく説明できていないので難しかったかもしれませんが、
    そんなに難しくないと思いますよ。

    #んーん、いつか絵入のアルゴリズム解説コーナ作りたいなぁー


記事スレッド一覧