TranslateTransform не «сохраняется» при применении RotateTransform к текстовому блоку WPF на холстеC#

Место общения программистов C#
Ответить
Anonymous
 TranslateTransform не «сохраняется» при применении RotateTransform к текстовому блоку WPF на холсте

Сообщение Anonymous »

При отображении некоторых текстовых блоков вместе с другими фигурами на холсте я размещаю их с помощью TranslateTransform.
Я не делаю это в XAML, поскольку объекты буду генерировать во время выполнения.

Код: Выделить всё

Point origin, rotated;
origin.X = center.X;
origin.Y = center.Y + radius;
rotated.X = (Math.Cos(angle * Math.PI / 180) * (origin.X - center.X) - Math.Sin(angle * Math.PI / 180) * (origin.Y - center.Y) + center.X);
rotated.Y = (Math.Sin(angle * Math.PI / 180) * (origin.X - center.X) + Math.Cos(angle * Math.PI / 180) * (origin.Y - center.Y) + center.Y);

TranslateTransform translateTransf = new TranslateTransform() { X = rotated.X, Y = rotated.Y };
textBlock.RenderTransform = translateTransf;
plotCanvas.Children.Add(textBlock);
Изображение

А затем в другом событии я применяю вращение к объектам на холсте, при этом абсолютные значения холста передаются в CenterX и CenterY, чтобы определить центр всех вращений.

Код: Выделить всё

RotateTransform rotateTransf = new RotateTransform(angleRotation) { CenterX = plotCanvas.ActualHeight / 2, CenterY = plotCanvas.ActualWidth / 2 };
foreach (TextBlock childBlock in plotCanvas.Children.OfType())
childBlock.RenderTransform = rotateTransf;
// Other objects are rotated fine around the canvas center
Когда событие срабатывает, эффект ранее примененного TranslateTransform каким-то образом «теряется», и текстовые блоки помещаются в то, что кажется (0, 0) холста, а затем они повернут. Другие фигуры вращаются нормально, я использовал эллипсы и линии в качестве геометрических фигур и разместил их в нужных мне позициях, и на них не применялось TranslateTransform.
И обратите внимание, что к (сгруппированным) применяется «вторичное вращение». текст, хотя я ожидал, что он останется горизонтальным, а затем применил еще один поворот, чтобы он указывал на центр холста.
Изображение

Что я делаю неправильно или упускаю, чтобы «сохранить «начальное преобразование непосредственно перед вращением (или преобразованием накопления), и почему происходит это «вторичное вращение»?

Подробнее здесь: https://stackoverflow.com/questions/784 ... m-to-a-wpf
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»