Compartilhar via


Modos de Preenchimento de Caminho

Os dois modos de preenchimento definidos para caminhos são alternativos esinuosos. Ambos os modos de preenchimento usam uma regra par-ímpar para determinar como preencher um caminho fechado.

FP_ALTERNATEMODE aplica a regra par-ímpar da seguinte maneira: desenhe uma linha de qualquer ponto inicial arbitrário no caminho fechado até algum ponto obviamente fora do caminho fechado. Se a linha cruza um número ímpar de segmentos de caminho, o ponto inicial está dentro da região fechada e, portanto, faz parte da área de preenchimento. Um número par de cruzamentos significa que o ponto não está em uma área a ser preenchida.

FP_WINDINGMODE considera não apenas o número de vezes que o vetor cruza segmentos do caminho, mas também considera a direção de cada segmento. O caminho é considerado desenhado do início ao fim, com a direção de cada segmento implícita pela ordem de seus pontos especificados: o primeiro vértice de um segmento é o ponto "de" e o segundo vértice é o ponto "para". Agora desenhe a mesma linha arbitrária descrita no modo alternativo. A partir de zero, adicione um para cada segmento de direção "para frente" que a linha cruza e subtraia um para cada segmento de direção "inverso" cruzado. (Avançar e inverter são baseados no produto de ponto do segmento e na linha arbitrária.) Se o resultado da contagem for diferente de zero, o ponto inicial estará dentro da área de preenchimento; uma contagem zero significa que o ponto está fora da área de preenchimento.

A figura a seguir mostra como aplicar ambas as regras à situação mais complexa de um caminho de interseção automática.

Diagrama ilustrando a diferença entre modos de preenchimento alternativos e sinuosos para caminhos.

No modo de preenchimento alternativo, o ponto A está dentro porque o raio 1 passa por um número ímpar de segmentos de linha, enquanto os pontos B e C estão fora, pois os raios 2 e 3 passam por um número par de segmentos. No modo de preenchimento sinuoso, os pontos A e C estão dentro, pois a soma dos segmentos de linha (positivo) e reverso (negativo) cruzados por seus raios, 1 e 3, respectivamente, não é zero, enquanto o ponto B está fora, porque a soma dos segmentos de linha de frente e inversa que ray 2 cruza é zero.