Could someone explain me why code below which is called from Paint event doesn’t draw 7 blades (NumberOfBlades = 7 in this case). For other blade numbers (3-7) it also misses blades for some angles, only for 4 blades it does works. I’m almost sure that it is some kind of small & stupid mistake but i just can’t figure it out.
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);
}

Edit
I’ve found solution:
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();
}
So now my question is why it works this way?
It looks like you’re accumulating increasing rotations in your blade GraphicsPath (since you’re not resetting blade to the start position each iteration). Either Rotate incrementally, or reset blade to the start position.