Применить анимацию к ModelVisual3D в раскадровке - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть модель Visual3D.Я хотел бы оживить свою позицию в Viewport3D.Я получил код для работы с BoxVisual3D (от HelixToolkit), но код не работает для моего ModelVisual3D.ModelVisual3D должен транслироваться вдоль оси X, но вместо этого он просто неподвижен.

Я по сути скопировал рабочий код для моего BoxVisual3D в мой ModelVisual3D.Сейчас я просто делаю свойство OffsetX, но позже мне нужно будет иметь несколько свойств для нескольких анимированных ModelVisual3D одновременно, следовательно, раскадровка.

это код, который не работает:

Transform3DGroup modelTransformGroup = (Transform3DGroup)_myModel.Transform;
TranslateTransform3D curTransform = (TranslateTransform3D)modelTransformGroup.Children[1];
var moveX = new DoubleAnimation(0, 1000, TimeSpan.FromSeconds(5));
Storyboard.SetTarget(moveX, curTransform);
Storyboard.SetTargetProperty(moveX, new PropertyPath(TranslateTransform3D.OffsetXProperty));
var sb = new Storyboard();
sb.Children.Add(moveX);
sb.Begin();

Вот код, который работает, но его недостаточно, поскольку мне нужно синхронизировать множество анимаций одновременно с раскадровкой:

Transform3DGroup modelTransformGroup = (Transform3DGroup)_myModel.Transform;
TranslateTransform3D curTransform = (TranslateTransform3D)modelTransformGroup.Children[1];
var moveX = new DoubleAnimation(0, 1000, TimeSpan.FromSeconds(5));
curTransform.BeginAnimation(TranslateTransform3D.OffsetXProperty, moveX);

Спасибо за помощь!

Редактировать: я хотел добавить, что _myModel.Transform установлен в качестве Transform3DGroup ранее в коде, и что первый дочерний элемент - RotationTransform3D, а второй дочерний элемент - TranslateTransform3D.

1 Ответ

0 голосов
/ 25 апреля 2019

Я нашел ответ в этом посте , который также указал на этот пост . Оказывается, вы должны зарегистрировать имя для вашего преобразования и установить имя цели вместо цели. Это потому, что преобразования не являются частью FrameworkElement.

Ниже мой рабочий набор кода.

Transform3DGroup modelTransformGroup = (Transform3DGroup)_myModel.Transform;
TranslateTransform3D curTransform = (TranslateTransform3D)modelTransformGroup.Children[1];
var moveX = new DoubleAnimation(0, 1000, TimeSpan.FromSeconds(5));
RegisterName("Translate", translate);
Storyboard.SetTargetName(moveX, "Translate");
Storyboard.SetTargetProperty(moveX, new PropertyPath(TranslateTransform3D.OffsetXProperty));
var sb = new Storyboard();
sb.Children.Add(moveX);
sb.Begin(this);

Я протестировал пару разных типов моделей. Кажется, это будет работать для любого типа объекта, который наследует Visual3D.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...