2011-02-04 82 views
1

我有一個動態生成的路徑,其數據構成是:一個PathFigure組成PathGeometry的。這PathFigure包含一堆線段。所以整個路徑是連續的,由直線組成。將這條路徑分成許多不同的小路徑的好方法是什麼?如果你很好奇,我需要做的原因是,實現了「路漸行漸遠」的效果,而且似乎沒有成爲另一種方式來做到這一點。Progammatically分割路徑成多條路徑

所以我想要一條路徑,並將它分成許多不同的小路徑,然後我將第一個小路徑的不透明度設置爲0,並將最後一個小路徑設置爲1,並插入其間的所有內容。另外,我可以使用它來使路徑的尾部變小,並插入到路徑的頭部,這很大。有很多用途 - 我需要一種方法來爲我的應用程序執行此操作。

回答

2

請參閱GradientPath Charles Petzold它的實現方式類似於您的描述,如果您想添加對改變路徑寬度的支持,應該很容易進行調整。

0

不是分手了道路,這聽起來像你可以簡單地使用線性漸變畫筆的路徑的筆觸顏色來完成你的路徑衰減相同的效果。例如,嘗試在您的路徑上設置下面的畫筆。

在XAML:

 <Path.Stroke> 
      <LinearGradientBrush> 
       <GradientStop Color="#00000000" Offset="0.0"/> 
       <GradientStop Color="#FF000000" Offset="1.0"/> 
      </LinearGradientBrush> 
     </Path.Stroke> 

在C#:

 var brush = new LinearGradientBrush(); 
     brush.GradientStops.Add(new GradientStop(new Color { A = 0, R = 0, B = 0, G = 0 }, 0.0)); 
     brush.GradientStops.Add(new GradientStop(new Color { A = 255, R = 0, B = 0, G = 0 }, 1.0)); 
     this._path.Stroke = brush; 

此外,爲了解決原來的問題,上面的是否是你在找什麼,你有幾個選項來分割路徑。由於您知道Data是由PathFigures組成的PathGeometry,因此您可以通過編程方式訪問這些段並創建更多的Path對象。對於佈局,因爲每個路徑本身是一個新的UIElement的父具有測量,並安排它,你需要把所有的新路徑到版式面板,將讓他們在相同的相對位置。

我認爲有幾種方法可以解決這個問題,但將它們完全放在一起的一種方法是簡單地將它們放置在Canvas.Top和Canvas.Left(或.Right,.Bottom這取決於你如何鋪設出來)設置爲路徑中的每個段開始的相對偏移,並調整點,使它們相對於新路徑的新的左上角。例如,這

<Path Stroke="Black"> 
     <Path.Data> 
      <PathGeometry> 
       <PathFigure> 
        <LineSegment Point="10,10"/> 
        <LineSegment Point="20,60"/> 
        <LineSegment Point="70,60"/> 
       </PathFigure> 
      </PathGeometry> 
     </Path.Data> 
    </Path> 

能成爲像

<Path Stroke="Black"> 
     <Path.Data> 
      <PathGeometry> 
       <PathFigure> 
        <LineSegment Point="10,10"/> 
       </PathFigure> 
      </PathGeometry> 
     </Path.Data> 
    </Path> 
    <Path Stroke="Black" Canvas.Top="10" Canvas.Left="10"> 
     <Path.Data> 
      <PathGeometry> 
       <PathFigure> 
        <LineSegment Point="10,50"/> 
       </PathFigure> 
      </PathGeometry> 
     </Path.Data> 
    </Path> 
    <Path Stroke="Black" Canvas.Top="60" Canvas.Left="20"> 
     <Path.Data> 
      <PathGeometry> 
       <PathFigure> 
        <LineSegment Point="50,0"/> 
       </PathFigure> 
      </PathGeometry> 
     </Path.Data> 
    </Path> 

應該清楚,你怎麼可能通過構建幾個路徑的給定從C#中的PathGeometry對象以及做到這一點,因爲它聽起來像你可能不要在你的問題中在XAML中做這件事。讓我知道如果它不是,我可以詳細說明。

+0

我同意克里斯的回答以上。如果可以的話,該博客上的GradientPath絕對是更好的選擇。 – timmyl 2011-02-04 03:36:55

+0

感謝所有這些信息。線性漸變畫筆不起作用,因爲它基於路徑的邊界框應用漸變,如該漸變路徑鏈接中所示。我會試用GradientPath,看看它是如何工作的。否則,我會更加關注你對路徑分割的看法。 – Dalal 2011-02-05 00:05:46