Animation Helix Toolkit圆环示例

时间:2019-03-25 21:11:42

标签: helix-3d-toolkit

我慢慢地习惯了WPF和Helix Toolkit。我真的非常喜欢Helix。尽管我学习缓慢(几年前从学术界退休),但我取得了很大进步。我已经重新创建了几个Helix示例,以逐步学习主要功能。我想我已经学到了我需要的所有知识,除了如何制作动画。 对于动画,我的意思是。我将基于一些数值计算来绘制变形管道的纹理。我想逐步绘制变形的形状,因为管道基于每个时间步的结果弯曲。 我首先使用WPF滑块控件模拟此过程。我正在尝试在滑块的每个(整数)步骤移动对象。我现在正在尝试通过移动环面对象(来自环面示例)来实现这一点。我在MainWindow中添加了一个新的“ Translation”属性。我将此属性连接到滑块。绑定在我通过消息框和TextBlock显示器(我要发布的代码)对其进行测试时起作用。我可以看到文本块内容发生了变化,当我启用MessageBox时,我看到“ RaiseTranslationChanged”方法已激活,因此“ trans”变量已更新。应该使用整数“ trans”变量来转换每一侧的两个圆环对象。不幸的是,圆环物体不会移动。 我怀疑这可能与“ viewmodel”或“ dependencyproperty”或两者有关,因为我可以看到管直径与滑块很好地结合在一起。我对Windows消息传递系统和WPF“数据上下文”有基本的了解,但我似乎并不了解它们如何相互作用。如果有人可以发布该问题的解决方案,以及如何用相对简单的解释使循环中的环面对象动画化,我将不胜感激。 任何帮助将不胜感激。最后,我还将分享我的作品,并与提供意见的任何人分享任何学分。我同时发布了修改后的cs和xalm文件。

i.konuk

mainwindow.xaml:

<Window x:Class="TorusDemo.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:ht="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf"
    Title="TubeDemo" Height="800" Width="800">


    <Grid ShowGridLines="True" >

        <Grid.RowDefinitions>
            <RowDefinition Height="4*" />
            <RowDefinition Height="1" />
            <RowDefinition Height="1*" />
        </Grid.RowDefinitions>

        <ht:HelixViewport3D x:Name="viewPort" ZoomExtentsWhenLoaded="True">
            <ht:SunLight/>
            <ht:TorusVisual3D x:Name="torus1" TorusDiameter="{Binding Value, ElementName=torusDiameterSlider}" TubeDiameter="{Binding Value, ElementName=tubeDiameterSlider}"
                              ThetaDiv="{Binding Value, ElementName=thetaDivSlider}" PhiDiv="{Binding Value, ElementName=phiDivSlider}" Fill="Red" />
            <ht:TorusVisual3D x:Name="torus2" TorusDiameter="{Binding Value, ElementName=torusDiameterSlider}" TubeDiameter="{Binding Value, ElementName=tubeDiameterSlider}"
                              ThetaDiv="{Binding Value, ElementName=thetaDivSlider}" PhiDiv="{Binding Value, ElementName=phiDivSlider}" Fill="Green"/>
            <ht:TorusVisual3D x:Name="torus3" TorusDiameter="{Binding Value, ElementName=torusDiameterSlider}" TubeDiameter="{Binding Value, ElementName=tubeDiameterSlider}"
                              ThetaDiv="{Binding Value, ElementName=thetaDivSlider}" PhiDiv="{Binding Value, ElementName=phiDivSlider}" Fill="Blue" />
        </ht:HelixViewport3D>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Bottom" Opacity="0.9" >
            <Slider x:Name="torusDiameterSlider" Value="3" Minimum="0.1" Maximum="10" Width="150" Margin="10"/>
            <Slider x:Name="tubeDiameterSlider" Value="1" Minimum="0.1" Maximum="5" Width="150" Margin="10"/>
            <Slider x:Name="thetaDivSlider" Value="36" Minimum="3" Maximum="256" Width="150" Margin="10"/>
            <Slider x:Name="phiDivSlider" Value="24" Minimum="3" Maximum="256" Width="150" Margin="10"/>
        </StackPanel>
        <StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Bottom" Opacity="0.9" >
            <Slider x:Name="TranslationSlider" Minimum="1" Maximum="8" Width="150" Margin="10"
                    Value="{Binding Path=Translation, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            <TextBlock Text="{Binding UpdateSourceTrigger=PropertyChanged, Path=Translation, Mode=TwoWay}" />
        </StackPanel>
    </Grid>
</Window>

mainwindow.xaml.cs文件:

// --------------------------------------------------------------------------------------------------------------------
// <copyright file="MainWindow.xaml.cs" company="Helix Toolkit">
//   Copyright (c) 2016 Helix Toolkit contributors
// </copyright>
// <summary>
//   Interaction logic for MainWindow.xaml
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace TorusDemo
{
    using System;
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Media.Media3D;
    using HelixToolkit.Wpf;

    // using ExampleBrowser;

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    // [Example(null, "Shows three torus objects using the TorusVisual3D.")]
    public partial class MainWindow : Window
    {
        public static int trans = 4;

        // Static event to create change notification
        public static event EventHandler TranslationChanged;

        // Event invocator
        private static void RaiseTranslationChanged()
        {
            EventHandler handler = TranslationChanged;
            if (handler != null)
            {
                handler(null, EventArgs.Empty);
            }
            // MessageBox.Show("TranslationChanged", "MainWindow");
        }

        // Static property to bind to
        public static int Translation
        {
            get { return trans; }
            set
            {
                trans = value;
                RaiseTranslationChanged();
            }
        }

        public MainWindow()
        {
            InitializeComponent();
            DataContext = this;
            this.DataContext = this;

            torus1.Transform = settransformvectors(-trans);
            torus3.Transform = settransformvectors(trans);
            viewPort.Camera.Position = new Point3D(0, 0, 10);
        }

        public Transform3D settransformvectors(int trans)
        {
            Transform3D Transform = new TranslateTransform3D(new Vector3D(trans, 0, 0));
            return Transform;
        }
    }
}

0 个答案:

没有答案