2

キャンバスにたくさんのポリゴンを描画していますが、そのほとんどは、少なくとも 1 つの他のポリゴンとエッジを共有しています。ポリゴンが「特別」であることをアウトラインで示したいと思いますが、エッジが重なっているために、ポリゴンのストロークが別のポリゴンによって部分的に描画される傾向があり、ストロークが本来よりも薄く見えることがあります。さらに、描画順序によっては、Polygon の Stroke が周囲のものによってほぼ完全に覆われる場合があります。ポリゴンの間隔を空けることは、あまり魅力的なオプションではありません。ポリゴン間の目に見えるギャップは、この「細いストローク」の問題よりもはるかに好ましくないからです。

私が探している効果は、代わりに各ポリゴンをポリゴンのペアとして生成することで達成できると考えています.1つのポリゴンが他のポリゴン内に完全に含まれ、この小さなポリゴンのストロークが外側まで実行されます(ただし、重なりません)。ポリゴンのストローク。内側のポリゴンには常に透明な塗りつぶしがあり、現在のポリゴンのペアが「特別」であることを示したい場合にのみ、透明でないストロークがあります。

私の質問は次のとおりです。どうすればそのような内側の Polygon を外側の Polygon から派生させることができますか、または失敗すると、他にどのようにこの効果を達成できますか?

問題のポリゴンは、必要に応じて通常のポリゴンに制限できます。ストロークは、派手なマイターなどのない単純な太さ 1 の実線です。ある時点でストロークの太さを調整できるようにしたいのですが、それ以上のことはありません。

4

1 に答える 1

1

あなたが望むものを達成するために実際にはいくつかの方法があると思います。

最初に、元のポリゴン内に 2 番目の少し小さいポリゴンを描画するという元のアイデアに従います。それは悪い考えではありません。小さいポリゴンを生成する方法に関する元の質問に答えるには、各ポリゴンの重心を見つけ、ポリゴンのその重心点までの距離のパーセンテージで各頂点をオフセットして、より小さいポリゴンを取得できます。これにより、心地よい効果が得られるはずです。

別の方法として、z オーダーを使用し、「厚い」ポリゴンをわずかに負の z 距離だけオフセットすることもできます。

さらに別の方法は、描画順序を利用することです。太いポリゴンを最後に描画します。これにより、周囲のポリゴンによってオーバードローされるのを防ぎます。

必要に応じて機能する可能性のあるさらに別のアイデアは、ポリゴンをまったく描画するのではなく、一連の線を描画して、線の一部を太くすることです。

試すオプションはたくさんあります。うまく機能するものを見つけてください!

于 2009-06-25T04:20:06.460 に答える