Pregunta

Tengo un poco de trayectoria PathGeometry definir como la siguiente:

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

Este es un ejemplo simplificado. En realidad se puede tener segmentos de cualquier tipo (línea, un arco de curva).

Ahora tengo que cortar un agujero de algún tipo y tamaño (cuadrado, círculo, etc.) en los puntos de conjuntos de segmentos por lo que el resultado final es como la siguiente:

con agujeros http://devblog.ailon.org/devblog/_stuff /wpfpathgeoquestion/with_holes.gif

Mi idea inicial era combinar la PathGeometry original con otras plazas de geometría que contiene (o lo que sea) en los puntos de unión utilizando GeometryCombineMode.Exclude. Desafortunadamente esto produce geometría vacía si la ruta está vacío. Y si se llena produce resultado incorrecto.

Así que estoy atascado. En ejemplo sencillo con segmentos de línea que podría haber calculado los puntos fronterizos por adelantado y hecho mis segmentos de línea terminan allí, pero con arcos y Beziers esto sería una especie de exageración.

¿Alguien tiene una idea de cómo lograr esto?

Nota: Necesito estos agujeros borradas (transparente) a fin de colocar un cuadrado blanco por encima de ella no hará.

¿Fue útil?

Solución

Oh. Lo hizo. La idea es crear un OpacityMask fuera de sus agujeros con DrawingBrush hasta que quede en el contexto de dibujo antes de dibujar el PathGeometry. Algo como esto.

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top