Pregunta

Tengo una ruta generada dinámicamente cuyos datos están compuestos de un PathGeometry compuesto de un PathFigure. Este PathFigure Contiene un montón de segmentos de línea. Entonces, el camino general es continuo, compuesto de líneas rectas. ¿Cuál es un buen enfoque para dividir este camino en muchos pequeños caminos diferentes? Si tiene curiosidad, la razón por la que necesito hacer esto es lograr un efecto de "camino que se desvanece", y no parece haber otra forma de hacerlo.

Así que quiero tomar un camino, y dividirlo en muchos caminos diferentes, y luego estableceré la opacidad del primer pequeño camino a 0, y el último pequeño camino a 1, e interpolaré para todo lo demás. Además, podría usar esto para hacer que la cola del camino sea pequeña e interpolar hasta la cabeza del camino, lo cual es grande. Hay muchos usos: necesito una forma de hacer esto para mi aplicación.

¿Fue útil?

Solución

Ver Gradientpath Por Charles Petzold se implementa de manera similar a la forma en que describe y debe ser fácil de ajustar si desea agregar soporte para alterar el ancho de la ruta.

Otros consejos

En lugar de dividir el camino, parece que puede simplemente usar un cepillo de gradiente lineal para el color del trazo de la ruta para lograr el mismo efecto de su desvanecimiento de su camino. Por ejemplo, intente configurar el cepillo a continuación en su ruta.

En xaml:

        <Path.Stroke>
            <LinearGradientBrush>
                <GradientStop Color="#00000000" Offset="0.0"/>
                <GradientStop Color="#FF000000" Offset="1.0"/>
            </LinearGradientBrush>
        </Path.Stroke>

Cía#:

        var brush = new LinearGradientBrush();
        brush.GradientStops.Add(new GradientStop(new Color { A = 0, R = 0, B = 0, G = 0 }, 0.0));
        brush.GradientStops.Add(new GradientStop(new Color { A = 255, R = 0, B = 0, G = 0 }, 1.0));
        this._path.Stroke = brush;

Además, para abordar la pregunta original, si lo anterior es lo que está buscando o no, tiene un par de opciones para dividir el camino. Dado que sabe que los datos son una PathGeometry compuesta de PathFigues, simplemente puede acceder programáticamente a los segmentos y crear más objetos de ruta. Para el diseño, debido a que cada ruta en sí es un nuevo Uielement cuyo padre tiene que medirlo y organizarlo, debe poner todas las nuevas rutas en un panel de diseño que los mantendrá en la misma posición relativa.

Creo que hay varias formas en que podrías hacer esto, pero una forma de volver a colocarlos de nuevo es simplemente colocarlos en un lienzo con su lienzo. 'Revolándolos) establecido en las compensaciones relativas del comienzo de cada segmento en el camino, y ajuste los puntos para que sean relativos a la nueva esquina superior izquierda de la nueva ruta. Por ejemplo, esto

    <Path Stroke="Black">
        <Path.Data>
            <PathGeometry>
                <PathFigure>
                    <LineSegment Point="10,10"/>
                    <LineSegment Point="20,60"/>
                    <LineSegment Point="70,60"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>

puede convertirse en algo como

    <Path Stroke="Black">
        <Path.Data>
            <PathGeometry>
                <PathFigure>
                    <LineSegment Point="10,10"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path Stroke="Black" Canvas.Top="10" Canvas.Left="10">
        <Path.Data>
            <PathGeometry>
                <PathFigure>
                    <LineSegment Point="10,50"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path Stroke="Black" Canvas.Top="60" Canvas.Left="20">
        <Path.Data>
            <PathGeometry>
                <PathFigure>
                    <LineSegment Point="50,0"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>

Debe quedar claro cómo puede hacerlo construyendo varias rutas dado el objeto PathGeometry también de C#, ya que parece que no está haciendo esto en XAML a partir de su pregunta. Avísame si no es así y puedo elaborar más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top