创建可能具有关联事件,尤其是用户交互事件(如鼠标单击)的 TubeVisual3D 的正确方法是什么?
在 WPF C# 项目中使用 HelixToolKit。
谢谢
创建可能具有关联事件,尤其是用户交互事件(如鼠标单击)的 TubeVisual3D 的正确方法是什么?
在 WPF C# 项目中使用 HelixToolKit。
谢谢
下面我概述了一种对我有用的不同方法。我建议查看 UIElement3D 类。UIElement3D 类参考
开始了。
这是一个例子。
using System.Windows.Media;
using System.Windows.Media.Media3D;
public InteractiveTubeVisual3D : UIElement3D
{
public InteractiveTubeVisual3D( List<Point3D>paths, double tubeDiameter = 0.55)
{
int thetaDiv = 12;
Material material = MaterialHelper.CreateMaterial( Colors.Crimson );
MeshBuilder meshBuilder = new MeshBuilder();
meshBuilder.AddTube(paths, tubeDiameter, thetaDiv, false);
GeometryModel3D model = new GeometryModel3D( meshBuilder.ToMesh(), material);
Visual3DModel = model;
}
protected override void OnMouseDown( MouseButtonEventArgs Event )
{
base.OnMouseDown( Event );
//change the color of the tube when left mouse clicked, revert back on right mouse clicked
if ( Event.LeftButton == MouseButtonState.Pressed )
{
GeometryModel3D
tube = Visual3DModel as GeometryModel3D;
tube.Material = MaterialHelper.CreateMaterial( Colors.CornflowerBlue );
}
else if ( Event.RightButton == MouseButtonState.Pressed )
{
GeometryModel3D
tube = Visual3DModel as GeometryModel3D;
tube.Material = MaterialHelper.CreateMaterial( Colors.Crimson );
}
Event.Handled = true;
}
}
接下来的步骤说明了如何将其添加到您的场景中。
示例程序
using System.Windows.Media.Media3D;
public partial class MainWindow : Window
{
public MainWindow( )
{
InitializeComponent();
ContainerUIElement3D container = new ContainerUIElement3D();
List<Point3D> paths = CreatePath(); // pass in you tubes points.
InteractiveTubeVisual3D tube = new InteractiveTubeVisual3D(paths);
container.Children.Add(tube);
HelixViewPort.Children.Add(container);
}
}
HelixViewPort 是 XAML 中的 x:Name 引用
<h:HelixViewport3D x:Name="HelixViewPort" >
<h:DefaultLights/>
</h:HelixViewport3D>
希望能帮助到你 :)。祝你好运。
就在这里。您必须使用命中测试来确定鼠标单击是否在您的 TubeVisual3D 上,一旦您知道这一点,您就可以执行您想要的任何操作。这必须通过鼠标单击事件来完成...