Преобразования над объектом Graphics

Сообщение было отмечено автором темы, экспертом или модератором как решение
2 ответа

Есть примерно такой код:
class Form1 : Form
{
      DrawObject drawObj;
      ...
      protected override void OnPaint(PaintEventArgs e)
      {
            Matrix matrix = new Matrix();
            matrix.Translate(drawObj.Location.X,            
                             drawObj.Location.Y);
            matrix.Scale(drawObj.ScaleX,  
                         drawObj.ScaleY);                            
            matrix.RotateAt(drawObj.Rotation, 
                            drawObj.RotationCenter);
            e.Graphics.Transform = matrix;
            drawObj.Draw(e.Graphics);
      }
}
Нужно, чтобы объект DrawObject переносился в положение Location, масштабировался на ScaleX и ScaleY относительно Location и вращался на угол Rotation относительно RotationCenter, который тоже должен автоматически масштабироваться. Примерно так все и делается за исключением одного: когда объект начинает масштабироваться при ненулевом угле поворота, то он масштабируется не относительно Location, а как-то по осям. Если же меняется последовательность масштабирования и поворота (сначала поворот, потом масштабирование), то уже масштабирование происходит относительно Location, а вот поворот начинает происходить, что логично, относительно немасштабированного центра. В чем может быть моя ошибка, или необходимый мне вариант таким образом вообще нереализуем?
Попробуйте использовать параметр MatrixOrder.Append или MatrixOrder.Prepend.


Попробуйте использовать параметр MatrixOrder.Append или MatrixOrder.Prepend.
А чем это будет отличаться от простой перестановки порядка действий? Я так понимаю, что мне необходимо не выбрать одну из систем преобразований, а слить обе в одну, но вот как это сделать...