2010-08-02 16 views
8

Mam następujący kod, który rysuje linię z (bardzo) małą strzałkę ...HowTo: Narysuj linię ze strzałką?

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

Chcę narysować duży strzałkę (koło, kwadrat, trójkąt etc ...), o tej samej szerokości linii.

Czy to możliwe?

Odpowiedz

13

Chciałbyś użyć CustomLineCap z GraphicsPath. Oto przykład:

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

Chcesz „zaprojektować” czapkę z linią idąc od góry do dołu i od (0, 0), aby uzyskać odpowiednie współrzędne.

EDIT: Chciałem tylko wspomnieć, że można również użyć AdjustableArrowCap narysować strzałkę określonej wielkości i wypełnić go, ale dlatego, że wymienione wymagania dla innych kształtów, Użyłem CustomLineCap.

+0

tak .. Wiem o niestandardowej oprawie ... niewygodne jest to, że nie zmieni się z linią szerokości ... idealnie dla mnie, jeśli czapeczka była własnością typu "CapScale" lub "CapSize" ... ale to nie istnieje ... Szkoda, że ​​nie istnieje 'AdjustableCircleCap' lub' AdjustableSquareCap' ... – serhio

+1

@serhio - Co masz na myśli, że nie zmieni się wraz z szerokością linii? Jeśli zmienisz szerokość pisaka, narysuje on grubszą linię. Czy możesz wyjaśnić, co masz na myśli? Możesz również rzucić własną * 'AdjustableCircleCap', nie jest to trudne, gdy wiesz, jak poprawnie korzystać z' GraphicsPath'. Jeśli nie jesteś pewien, mogę napisać dla ciebie jeden. – TheCloudlessSky

+3

+1 dla "AdjustableArrowCap" – SOUser

Powiązane problemy