2010-08-02 16 views
8

Tengo el siguiente código, que dibuja una línea con un (muy) pequeña flecha ...HowTo: Dibuja una línea con una flecha?

private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     Pen p = new Pen(Color.Black); 
     p.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; 

     e.Graphics.DrawLine(p, 10, 10, 100, 100); 
     p.Dispose(); 
    } 

quiero dibujar un gran flecha (círculo, cuadrado, triángulo etc ...), manteniendo el mismo ancho de línea.

¿Es posible?

Respuesta

13

Desea utilizar un CustomLineCap con un GraphicsPath. He aquí un ejemplo:

using(Pen p = new Pen(Color.Black)) 
using(GraphicsPath capPath = new GraphicsPath()) 
{ 
    // A triangle 
    capPath.AddLine(-20, 0, 20, 0); 
    capPath.AddLine(-20, 0, 0, 20); 
    capPath.AddLine(0, 20, 20, 0); 

    p.CustomEndCap = new System.Drawing.Drawing2D.CustomLineCap(null, capPath); 

    e.Graphics.DrawLine(p, 0, 50, 100, 50); 
} 

usted quiere "diseñar" su tapa con una línea que va de arriba a abajo y de (0, 0) para obtener las coordenadas correctas.

EDITAR: Sólo quería mencionar que también se puede utilizar AdjustableArrowCap para dibujar una flecha de un tamaño específico y llenarlo sino porque usted ha mencionado la necesidad de otras formas, he utilizado un CustomLineCap.

+0

sí ... Sé sobre customcap ... el inconveniente es que no cambiará con el ancho de línea ... idealmente para mí si el límite fuera una propiedad como "CapScale" o "CapSize" ... pero no existe ... También es una lástima que no exista un 'AdjustableCircleCap' o' AdjustableSquareCap' ... – serhio

+1

@serhio - ¿Qué quiere decir que no cambiará con el ancho de línea? Si cambia el ancho del lápiz, dibujará una línea más gruesa. ¿Podrías explicar más a qué te refieres? También puede hacer rodar su * own * 'AdjustableCircleCap', no es difícil cuando sabe cómo usar' GraphicsPath' correctamente. Si no está seguro, puedo escribir uno para usted. – TheCloudlessSky

+3

+1 para 'AdjustableArrowCap' – SOUser

Cuestiones relacionadas