中抜きのポリゴンを塗りつぶす

1つのリングを持つポリゴンの中を塗りつぶすのは Graphics::fillPolygon を使えばいいだけで、非常に簡単。
二重リングになっていて中抜きされているものの場合のことを考えてみると、ちょっと困った。外から前景色で塗りつぶし、背景色で塗りつぶし、と続けていくといいかもと思いましたが、中抜きされる領域が「背景色」で塗りつぶされて、そのポリゴンを描く前に描かれていたものが消されるおそれがあるので、パス。
次に考えたのは三角分割していけないかと。でも三角分割するのは面倒というか、アルゴリズムを実装していないので、最後に回すことにする。
その次に考えたのは、もしかしたら、経路積分特異点を避ける模式図のように、外のリングを一周して閉じて、内のリングに移動して一周して閉じて外のリングの始点に戻ると中抜きができるかも知れないので、2リング1組でやっていくといいのかも、と思いました。
で、ちょっと実験してみたところ、一応成功したけれども、外のリングを閉じ忘れたのを描いてしまったところ、若干様子が違うように見えました。
どうも、塗りつぶし領域が二重になる領域では塗りつぶしが行われないみたい。
じゃあ2リング1組とか深く考えずに、全てのリングのポイントをシリアルに並べてひとつのポリゴンに見立てて塗りつぶしを実行すると、塗りつぶしが偶数回行われるところは描かれずに思った通りの絵ができるのではないかと考えてやってみたら、うまくいきました。
縁取りするとりきには、リングごとに Graphics::DrawPolygon を実行する必要があります。でないと、リングからリングへ移動するラインが見えてしまいます。