Pergunta

Eu tenho um PathGeometry definir algum caminho como este:

caminho original http://devblog.ailon.org/devblog/_stuff /wpfpathgeoquestion/original.gif

Este é um exemplo simplificado. Na realidade, pode ter segmentos de qualquer tipo (linha, arco Bezier).

Agora eu preciso cortar um buraco de algum tipo e tamanho (quadrado, círculo, etc.) no segmento de pontos comuns de modo que o resultado parece final de algo como isto:

com furos http://devblog.ailon.org/devblog/_stuff /wpfpathgeoquestion/with_holes.gif

A minha ideia inicial era combinar o PathGeometry original com outra geometria contendo quadrados (ou qualquer outro) nos pontos comuns usando GeometryCombineMode.Exclude. Infelizmente, isso produz geometria vazia se o caminho não foi preenchido. E se ela está cheia produz resultado incorreto.

Então, eu estou preso. No exemplo simples com segmentos de linha que eu poderia ter calculado a fronteira pontos iniciais e fez meus segmentos de linha termina aí, mas com arcos e Beziers esta seria uma espécie de exagero.

Alguém tem uma idéia de como conseguir isso?

Nota: eu preciso desses buracos apagados (transparente), colocando assim um quadrado branco acima ele costuma fazer.

Foi útil?

Solução

Oh. Fez isso. A ideia é criar um OpacityMask fora de seus furos com DrawingBrush e empurre-o no contexto do desenho antes de desenhar o PathGeometry. Algo parecido com isto.

RectangleGeometry r = new RectangleGeometry(graphVisual.Bounds);
GeometryDrawing dr = new GeometryDrawing(Brushes.Black, null, Geometry.Combine(r, bulletHoles, GeometryCombineMode.Exclude, null));
DrawingBrush br = new DrawingBrush(dr);
drawingContext.PushOpacityMask(br);

drawingContext.DrawGeometry(null, new Pen(Brushes.Green, 2), graphVisual);

drawingContext.Pop();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top