Нарисуйте круг на холсте wpf в соответствии с его RenderTransform - PullRequest
0 голосов
/ 14 мая 2018

Итак, я пытался установить масштаб и значения перевода для преобразования визуализации холста wpf, а затем нарисовать несколько кругов в соответствии с этой новой матрицей преобразования.

У меня есть такой код.

Настройка рендера холста, масштабирования и свойств перевода.

window.canvas.RenderTransform.Value.Scale(xScale, yScale);
window.canvas.RenderTransform.Value.Translate(offsetX, offsetY);

и добавление круга, подобного этому.

Ellipse circle = new Ellipse()
{
    Width = 5,
    Height = 5,
    Stroke = Brushes.Red,
    StrokeThickness = 8
};
circle.SetValue(Canvas.LeftProperty, (double) x);
circle.SetValue(Canvas.TopProperty,  (double) y);
window.canvas.Children.Add(circle);

Но холст не применяет матрицу преобразования к точкам окружности, что мне делать?

1 Ответ

0 голосов
/ 14 мая 2018

Выражение

window.canvas.RenderTransform.Value

возвращает копию матрицы преобразования, поскольку struct Matrix является типом значения, а не ссылочным типом. Любая операция, выполняемая с копией, будет потеряна.

Используйте

var matrix = new Matrix();
matrix.Scale(xScale, yScale);
matrix.Translate(offsetX, offsetY);
window.canvas.RenderTransform = new MatrixTransform(matrix);

или просто

window.canvas.RenderTransform =
    new MatrixTransform(xScale, 0, 0, yScale, offsetX, offsetY);

Если MatrixTransform ранее был назначен свойству RenderTransform, вы также можете просто установить его значение Matrix:

var matrix = new Matrix();
matrix.Scale(xScale, yScale);
matrix.Translate(offsetX, offsetY);
((MatrixTransform)window.canvas.RenderTransform).Matrix = matrix;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...