2010-08-02 70 views
8

Tôi có đoạn code sau, vẽ hình một dòng với một (rất) mũi tên nhỏ ...HowTo: Vẽ một đường thẳng với một mũi tên?

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

Tôi muốn vẽ một lớn mũi tên (vòng tròn, hình vuông, hình tam giác vv ...), giữ cùng chiều rộng dòng.

Có thể không?

Trả lời

13

Bạn muốn sử dụng CustomLineCap với GraphicsPath. Dưới đây là ví dụ:

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

Bạn muốn "thiết kế" nắp của bạn với đường thẳng từ trên xuống dưới và từ (0, 0) để nhận tọa độ chính xác.

EDIT: Tôi chỉ muốn đề cập rằng bạn cũng có thể sử dụng AdjustableArrowCap để vẽ một mũi tên của một kích thước cụ thể và điền nó nhưng vì bạn đề cập đến các yêu cầu về hình dạng khác, tôi đã sử dụng một CustomLineCap.

+0

vâng .. Tôi biết về customcap ... bất tiện là nó sẽ không thay đổi với chiều rộng dòng ... lý tưởng cho tôi nếu nắp là một tài sản như "CapScale" hoặc "CapSize" ... nhưng nó không tồn tại ... Nó cũng là một điều đáng tiếc mà không tồn tại một 'AdjustCircleCap' hoặc' AdjustableSquareCap' ... – serhio

+1

@ serhio - Điều gì làm bạn có nghĩa là nó sẽ không thay đổi với chiều rộng dòng? Nếu bạn thay đổi chiều rộng bút, nó sẽ vẽ một đường dày hơn. Bạn có thể giải thích thêm ý của bạn? Bạn cũng có thể cuộn * của riêng bạn * AdjustCircleCap', nó không khó khi bạn biết cách sử dụng 'GraphicsPath' đúng cách. Nếu bạn không chắc chắn, tôi có thể viết một cái cho bạn. – TheCloudlessSky

+3

+1 cho 'AdjustArrowCap' – SOUser

Các vấn đề liên quan