将动画应用于情节提要中的ModelVisual3D

时间:2019-04-23 16:40:03

标签: c# wpf animation storyboard

我有一个ModelVisual3D。我想动画化其在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 :(得分:0)

我在this post中找到了答案,该答案也指向this post。原来,您必须为转换注册一个名称,并设置目标名称而不是目标。这是因为转换不是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的对象。

相关问题