Реализация матричного преобразования для нового объекта

#c# #.net #methods #matrix #graphicspath

#c# #.net #методы #матрица #графический путь

Вопрос:

Мне нужно иметь возможность преобразовать один из моих собственных объектов вместе с некоторыми объектами GraphicsPath в .Net. Мне нужно, чтобы любые операции масштабирования, перевода, поворота, которые выполняются над объектами GraphicsPath, также выполнялись на моем собственном объекте.

Например, вот некоторый код масштабирования:

 using (Matrix ScaleTransform = new Matrix(1, 0, 0, 1, 0, 0)) // scale matrix
{
    ScaleTransform.Scale(ScaleX, ScaleY);
    moPath.Transform(ScaleTransform);
    moBoundingBox.Transform(ScaleTransform);

    MyObject.Transform(ScaleTranform);
}


//In "MyObject":
public void Transform(Matrix m)
{
    //How is this implemented?  Is there a built-in .Net method?
}
  

Вопрос в том:
Каков наилучший способ реализовать метод «Transform» в MyObject. Я немного поискал, но не смог найти никаких ссылок на лучший способ сделать это.

Спасибо!

Комментарии:

1. Да, GDI (в .Net). Система. Чертеж и система. Рисование. Drawing2D

Ответ №1:

Реализовать преобразование самостоятельно не очень сложно, взгляните на:

http://en.wikipedia.org/wiki/Transformation_matrix

Итак, ваш объект представляет собой растровое изображение или что-то в этомроде? Тогда это может быть отчасти способом:

http://en.csharp-online.net/GDIplus_Graphics_Transformation—Image_Transformation

Или вы могли бы оставить свой объект и перенести преобразование в стек и использовать его при преобразовании в графику.

Эй, похоже, класс Matrix может многое сделать для вас:

http://msdn.microsoft.com/en-us/library/system.drawing .drawing2d.matrix.aspx

Например

 TransformPoints(Point[]) or TransformVectors(Point[])
  

Комментарии:

1. Привет, Рун, я ценю ответ. Последний приведенный вами пример — это тот, который я фактически реализовал. Я просто преобразовал все свои координаты в «точки» и передал массив точек во встроенное матричное преобразование. Итак, отличная идея! 1 и принято.