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

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

Есть примерно такой код: <div> <pre class="prettyprint linenums">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);       } }</pre> </div>Нужно, чтобы объект DrawObject переносился в положение Location, масштабировался на ScaleX и ScaleY относительно Location и вращался на угол Rotation относительно RotationCenter, который тоже должен автоматически масштабироваться. Примерно так все и делается за исключением одного: когда объект начинает масштабироваться при ненулевом угле поворота, то он масштабируется не относительно Location, а как-то по осям. Если же меняется последовательность масштабирования и поворота (сначала поворот, потом масштабирование), то уже масштабирование происходит относительно Location, а вот поворот начинает происходить, что логично, относительно немасштабированного центра. В чем может быть моя ошибка, или необходимый мне вариант таким образом вообще нереализуем?
Попробуйте использовать параметр MatrixOrder.Append или MatrixOrder.Prepend.


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