2014-07-25 74 views
1

我想從自定義的點列表中構建一個簡單的多邊形PathGeometry。我在msdn website上找到了下面的代碼,它看起來工作正常,對循環進行了一個簡單的修改並添加了LineSegments,但看起來像是一堆不合理的混亂,看起來是一個相對簡單的任務。有沒有更好的辦法?從沒有其他類創建噸的點列表構建PathGeometry

PathFigure myPathFigure = new PathFigure(); 
myPathFigure.StartPoint = new Point(10, 50); 

LineSegment myLineSegment = new LineSegment(); 
myLineSegment.Point = new Point(200, 70); 

PathSegmentCollection myPathSegmentCollection = new PathSegmentCollection(); 
myPathSegmentCollection.Add(myLineSegment); 

myPathFigure.Segments = myPathSegmentCollection; 

PathFigureCollection myPathFigureCollection = new PathFigureCollection(); 
myPathFigureCollection.Add(myPathFigure); 

PathGeometry myPathGeometry = new PathGeometry(); 
myPathGeometry.Figures = myPathFigureCollection; 

Path myPath = new Path(); 
myPath.Stroke = Brushes.Black; 
myPath.StrokeThickness = 1; 
myPath.Data = myPathGeometry; 
+0

我不相信有一個更好的辦法,但你可以在一個函數把它包裝(如'路徑makePath(點[ ]點)')。 – Jashaszun

回答

1

您可以將其封裝在函數中,也可以合併一些語句。

Path makePath(params Point[] points) 
{ 
    Path path = new Path() 
    { 
     Stroke = Brushes.Black, 
     StrokeThickness = 1 
    }; 
    if (points.Length == 0) 
     return path; 

    PathSegmentCollection pathSegments = new PathSegmentCollection(); 
    for (int i = 1; i < points.Length; i++) 
     pathSegments.Add(new LineSegment(points[i], true)); 

    path.Data = new PathGeometry() 
    { 
     Figures = new PathFigureCollection() 
     { 
      new PathFigure() 
      { 
       StartPoint = points[0], 
       Segments = pathSegments 
      } 
     } 
    }; 
    return path; 
} 

然後,你可以這樣調用:

Path myPath = makePath(new Point(10, 50), new Point(200, 70)); 
+0

謝謝,這工作非常好!我稍微修改它以將一個段添加回起始點,但只有在您使用某些功能繪製它時才重要,因爲其他人似乎並不在意。 (當然,我不認爲包裝它的功能,我顯然需要更多的咖啡因>>)。 – fexam