2012-06-19 22 views
5

Tôi có hai đường cong trên sự kiểm soát ZedGraph, sau khi âm mưu cả các đường cong ...Làm thế nào để mang lại đường cong cụ thể trong mặt trận trong ZedGraph

PointPairList thresholdList = new PointPairList(); 
PointPairList powerList = new PointPairList(); 

private void plotPower() 
{ 
     // Create an object to access ZedGraph Pane 
     GraphPane pane = zedGraphControl1.GraphPane;    
     LineItem thresholdLine = new LineItem("thresholdLine"); 
     LineItem powerLine = new LineItem("powerLine"); 

     // Set the Threshold Limit 
     double thresoldLimit = Convert.ToDouble(numAnalysisThreshold2.Value); 

     // Points 
     double[] x = new double[]{0, pane.XAxis.Scale.Max}; 
     double[] y = new double[]{thresoldLimit, thresoldLimit}; 

     // Set the threshold line curve list 
     thresholdList.Add(x, y); 

     // Set the Power Line curve list 
     powerdList.Add(XData, YData); 

     // Add Curves 
     thresholdLine = pane.AddCurve("", thresholdList, Color.Red, SymbolType.None); 
     powerLine = pane.AddCurve("", powerList, Color.Red, SymbolType.None); 

     // Refresh Chart 
     this.Invalidate(); 
     zedGraphControl1.Refresh(); 
} 

từ mã ở trên, tôi quản lý để vẽ hai đường cong như đường cong đường điện trên đường cong ngưỡng.

Bây giờ câu hỏi của tôi là, nếu tôi muốn mang bất kỳ một trong những đường cong ở phía trước .... Có phương pháp nào có sẵn (ví dụ: bringittoFront() ....) ...?

Cảm ơn rất nhiều đã dành thời gian .... :)

+1

Rất dù vấn đề, giả sử rằng CurveItem có thể được sử dụng trên * một số * GraphPanes ... – Larry

Trả lời

8

Các GraphPane chứa một thuộc tính CurveList, và lớp CurveList là một lớp con của List<CurveItem>. Nếu bạn đặt thuộc tính CurveItem.Tag cho mỗi đường cong mà bạn vẽ, tôi tin rằng bạn có thể sắp xếp các mục cong bằng cách sử dụng phương pháp CurveList.Sort(IComparer<CurveItem>) và sử dụng Tag để trình bày thứ tự sắp xếp.

CẬP NHẬT 19 Tháng sáu

Ví dụ đơn giản: hai dòng, màu xanh line2 với line2.Tag = 2 và đỏ line1 với line1.Tag = 1. Trong lần khởi tạo, line2 được thêm trước vào ngăn biểu đồ, vì vậy nó sẽ được hiển thị ở trên cùng.

void GraphInit() 
{ 
    var line2 = _graph.GraphPane.AddCurve("Second", 
     new[] { 0.1, 0.5, 0.9 }, new[] { 0.1, 0.5, 0.1 }, Color.Blue); 
    line2.Tag = 2; 

    var line1 = _graph.GraphPane.AddCurve("First", 
     new[] { 0.1, 0.5, 0.9 }, new[] { 0.1, 0.5, 0.9 }, Color.Red); 
    line1.Tag = 1; 

    _graph.Refresh(); 
} 

Initial display before sorting

Để sắp xếp, đầu tiên thực hiện một lớp mà thực hiện IComparer<CurveItem>, và sắp xếp các mặt hàng đường cong thứ tự tăng dần dựa trên giá trị số của CurveItemTag tài sản:

class CurveItemTagComparer : IComparer<CurveItem> 
{ 
    public int Compare(CurveItem x, CurveItem y) 
    { 
     return ((int)x.Tag).CompareTo((int)y.Tag); 
    } 
} 

Để thực hiện sắp xếp lại và cập nhật biểu đồ, hãy triển khai trình xử lý sự kiện sau cho nút Sắp xếp:

void SortButtonClick(object sender, EventArgs e) 
{ 
    _graph.GraphPane.CurveList.Sort(new CurveItemTagComparer()); 
    _graph.Refresh(); 
} 

Bây giờ, khi nhấn vào nút Sắp xếp, các đường cong sẽ được sắp xếp như vậy mà các đường cong với giá trị thẻ thấp nhất, ví dụ: line1, sẽ thay được rút ra trên đầu trang. Ngoài ra, lưu ý rằng thứ tự đường cong trong chú giải được thay đổi cùng.

Graph after Sort button is clicked

+3

wow, bạn chỉ cần thực hiện ngày của tôi .... Tôi đấu tranh rất nhiều để thiết lập các tài sản thẻ của đường cong .... Bạn là * & Cảm ơn một triệu cho lời giải thích rõ ràng ... :) – SanVEE

+0

Điều này mang lại cho tôi một lỗi biên dịch trên dòng '_graph.GraphPane.CurveList.Sort()' - "Không có quá tải cho phương thức 'Sắp xếp' mất 1 đối số "- Các tham số có vẻ là' Sắp xếp (loại SortType, chỉ mục int) '. – colmde

3

Và, đối với những người cần nó, đây là mã cho lớp IComparer cho vb.net:

Public Class CurveItemTagComparer 
    Implements IComparer(Of CurveItem) 
    Function Compare(ByVal x As ZedGraph.CurveItem, ByVal y As ZedGraph.CurveItem) As Integer _ 
    Implements System.Collections.Generic.IComparer(Of CurveItem).Compare 
     Return CInt(x.Tag).CompareTo(CInt(y.Tag)) 
    End Function 
End Class 

Giovanni

5

Có một cách rất dễ dàng. Sử dụng phương thức Move() trong lớp CurveList. Ví dụ trong:

zedGraphControl1.GraphPane.CurveList.Move(index,relativePos)

thiết relativePos để -1 sẽ di chuyển vị trí đối tượng một trước đó trong danh sách, trong khi 1 sẽ di chuyển nó một vị trí sau này.Để di chuyển một mục vào đầu danh sách, hãy sử dụng giá trị âm lớn (chẳng hạn như -999). Để di chuyển nó đến cuối danh sách, hãy sử dụng một giá trị dương lớn.

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