2010-08-02 16 views
8

Ho il codice seguente, che disegna una linea con un (molto) piccola freccia ...HowTo: traccia una linea con una freccia?

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(); 
    } 

voglio disegnare un grande freccia (cerchio, quadrato, triangolo ecc ...), mantenendo la stessa larghezza della linea.

È possibile?

risposta

13

Si desidera utilizzare uno CustomLineCap con un GraphicsPath. Ecco un esempio:

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); 
} 

si vuole "progettare" il berretto con una linea che va dall'alto verso il basso e da (0, 0) per ottenere le coordinate corrette.

EDIT: Volevo solo dire che è anche possibile utilizzare AdjustableArrowCap per disegnare una freccia di una dimensione specifica e riempirlo, ma perché lei ha citato l'esigenza di altre forme, ho usato un CustomLineCap.

+0

sì .. So di customcap ... l'inconveniente è che non cambierà con la larghezza della linea ... idealmente per me se il cap fosse una proprietà come "CapScale" o "CapSize" ... ma non esiste ... È anche un peccato che non esista un 'AdjustableCircleCap' o' AdjustableSquareCap' ... – serhio

+1

@serhio - Cosa vuoi dire che non cambierà con la larghezza della linea? Se si modifica la larghezza della penna, verrà disegnata una linea più spessa. Potresti spiegare di più cosa intendi? Puoi anche stampare il tuo * own * 'AdjustableCircleCap', non è difficile quando sai come usare correttamente il' GraphicsPath'. Se non sei sicuro, posso scriverne uno per te. – TheCloudlessSky

+3

+1 per 'AdjustableArrowCap' – SOUser

Problemi correlati