2010-05-15 36 views
3

有沒有辦法改變GraphicsPath對象中某些點的座標,而將其他點放在原來的位置?如何更改GraphicsPath內某個點的座標?

傳入我的方法的GraphicsPath對象將包含多邊形和線的混合。我的方法要看起來像:

void UpdateGraphicsPath(GraphicsPath gPath, RectangleF regionToBeChanged, PointF delta) 
{ 
    // Find the points in gPath that are inside regionToBeChanged 
    // and move them by delta. 
    // gPath.PathPoints[i].X += delta.X; // Compiles but doesn't work 
} 

GraphicsPath.PathPoints似乎是隻讀的,所以不GraphicsPath.PathData.Points。所以我想知道這是否可能。

也許用一組更新的點生成一個新的GraphicsPath對象?我怎樣才能知道一個點是線或多邊形的一部分?

如果有人有任何建議,那麼我將不勝感激。

回答

0

感謝您的建議漢斯,這裏是我的實現您的建議使用的GraphicsPath(的PointF [],字節[])構造的:

GraphicsPath UpdateGraphicsPath(GraphicsPath gP, RectangleF rF, PointF delta) 
{ 
    // Find the points in gP that are inside rF and move them by delta. 

    PointF[] updatePoints = gP.PathData.Points; 
    byte[] updateTypes = gP.PathData.Types; 
    for (int i = 0; i < gP.PointCount; i++) 
    { 
     if (rF.Contains(updatePoints[i])) 
     { 
      updatePoints[i].X += delta.X; 
      updatePoints[i].Y += delta.Y; 
     } 
    } 

    return new GraphicsPath(updatePoints, updateTypes); 
} 

似乎是工作的罰款。謝謝您的幫助。