#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 и принято.