2012-07-19 59 views
0

有人可以解釋爲什麼下面的代碼從繪圖事件調用不繪製7個刀片(在這種情況下爲NumberOfBlades = 7)。對於其他刀片編號(3-7),它也會在某些角度上錯過刀片,只有4個刀片才能起作用。我幾乎可以肯定,這是一種小的錯誤,但我無法弄清楚。使用RotateAt繪圖與GDI的圖形路徑+

Matrix transformMatrix = new Matrix(); 
PointF center = new PointF(x2, y); 

float angle = 360.0f/(float)pump.Calculations.NumberOfBlades; 

for (int i = 0; i < pump.Calculations.NumberOfBlades; i++) 
{ 
    transformMatrix.Reset(); 
    transformMatrix.RotateAt(angle * i, center); 
    blade.Transform(transformMatrix); 
    g.DrawPath(blackPen, blade); 
} 

Example

編輯

我找到了解決辦法:

for (int i = 0; i < pump.Calculations.NumberOfBlades; i++) 
{   
    transformMatrix.RotateAt(angle, center,MatrixOrder.Prepend); 
    g.Transform = transformMatrix; 
    //lopatka.Transform(transformMatrix); 
    g.DrawPath(blackPen, blade); 
    g.ResetTransform(); 
} 

所以現在我的問題是,爲什麼是這樣工作的?

+0

@holtavolt我試着用增量式旋轉它 - 每次用const角度調用旋轉,它仍然是一樣的,我打電話給transformMatrix.Reset();在每個循環的開始,所以它不應該工作? – Archibald 2012-07-19 03:12:50

+0

@holtavolt好吧你是對的,請張貼您的評論作爲答案,所以我可以接受它:)。 – Archibald 2012-07-19 03:18:24

回答

1

它看起來像是在刀片GraphicsPath中積累越來越多的旋轉(因爲您沒有將刀片重新設置到每次迭代的開始位置)。要麼增量旋轉,要麼將刀片重置到起始位置。