为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
斯蒂芬大帝 2022-12-24 14:34:55
我有一个 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);谢谢你的帮助!
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

不好意思在这里提问。我真的很想知道为什么代码会出现一些错误,例如:无法输入“System.Windows.Media.Media3D.MatrixTransform3D”对象强制转换为类型“System.Windows.Media.Media3D.Transform3DGroup。

Transform3DGroup modelTransformGroup = (Transform3DGroup)_myModel.Transform;
TranslateTransform3D curTransform (TranslateTransform3D)modelTransformGroup.Children[1];



查看完整回答
反对 回复 2022-12-24
?
手掌心

TA贡献1942条经验 获得超3个赞

我在这篇文章中找到了答案,它也指向了这篇文章。原来你必须为你的转换注册一个名称并设置目标名称而不是目标。这是因为转换不是 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 的任何类型的对象。


查看完整回答
反对 回复 2022-12-24
  • 2 回答
  • 0 关注
  • 44 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信