Tienes razón, Size
de ArcSegment
no es el radio entre los puntos que definen el inicio y el final del arco. Esta propiedad describe qué tan grande debe ser la elipse que se dibujará entre esos puntos. Si desea tener un círculo en lugar de una elipse, debe recordar establecer siempre que los valores xey de tamaño sean los mismos. Si desea que siempre se dibuje la mitad del círculo, también debe asegurarse de que Size
sea la mitad de la distancia entre esos dos puntos.
Veamos por ejemplo el código de abajo:
<Canvas>
<Path Stroke="Black">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="100,100">
<ArcSegment IsLargeArc="True"
Size="50, 50"
Point="200, 100"
SweepDirection="Clockwise" />
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
Para ello se utilizará la mitad superior del círculo, que se inicia en el punto 100, 100
y termina en el punto 200, 100
. Como he configurado la propiedad Size
en 50, 50
(la distancia entre esos puntos es 100), esto creará exactamente la mitad del círculo. SweepDirection
indica que ese círculo debe dibujarse en el sentido de las agujas del reloj, y esa es la razón por la que dibujará la mitad superior. Echa un vistazo a la diferencia entre Clockwise
y Counterclockwise
en las pantallas a continuación:
IsLargeArc
elige si desea dibujar más grande parte de elipse o más pequeño. Como estoy dibujando la mitad del círculo, esto no tiene ningún significado, pero si dibujas una elipse con un tamaño diferente, esto cambiaría significativamente el aspecto de salida, solo juega con él para ver cómo funciona.
Así es como se ve cuando intentas poner el arco de tamaño 200, 200
, clockwise
usando su parte de arco grande. Como se puede ver - arco ni siquiera coincide con la ventana (esto se disparó desde el diseñador WPF, en aplicación de lo normal desbordante parte sería cortado)
Y esto es lo mismo, pero configurado para mostrar pequeño arco:
Cuando cambié la propiedad Size
a 200, 200
, el círculo dibujado es simplemente 4 veces más grande, pero aún se inicia y finaliza en los puntos exactos que usted definió. Size
no tiene nada que ver con los puntos, entre los cuales está dibujando su elipse/cricle, pero cambia la apariencia de la elipse.
Espero que le muestre cuál es el significado de Size
en , no dude en hacer preguntas más detalladas, si todavía está confundido.
Muchas gracias Pako. Acabo de volver a trabajar en esto nuevamente y debo decir que su respuesta es cien veces más lúcida que la documentación de MSDN. – NVM
@NVM Incluso si la documentación de MSDN estaba bien, el modelo geométrico utilizado para implementar la funcionalidad de arco está enfermo, viola el principio de menos sorpresa y es diferente de todas las demás API de dibujo de ... – heltonbiker