我在 Helix Toolkit 上找到了一个例子,它被称为 ScatterPlot,它非常接近我真正需要的。但我找不到任何关于如何将 onclick 事件侦听器添加到创建的对象(在本例中为球体)的信息。这会将球体添加到“游乐场”。
scatterMeshBuilder.AddSphere(Points[i], SphereSize, 4, 4);
基本目标是为每个球体添加一个 onclick 事件侦听器,当用户选择一种颜色并单击其中一个球体时,它将更改为所选颜色。可以将 onclick 侦听器(或与之相同的东西)添加到球体中。
一年后......也许有人会发现这很有用。
对我有用的解决方案围绕扩展UIElement3D https://msdn.microsoft.com/en-us/library/system.windows.uielement3d(v=vs.110).aspx类,它有一堆您可以覆盖的标准事件。例如鼠标输入、鼠标单击等。
来源如下。
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Media3D;
using System.Windows.Controls.Primitives;
using System.Windows.Controls;
public class InteractivePoint : UIElement3D
{
public InteractivePoint(Point3D center, Material material, double sphereSize = 0.07)
{
MeshBuilder builder = new MeshBuilder();
builder.AddSphere( center, sphereSize , 4, 4 );
GeometryModel3D model = new GeometryModel3D( builder.ToMesh(), material );
Visual3DModel = model;
}
protected override void OnMouseEnter( MouseEventArgs event )
{
base.OnMouseEnter( event );
GeometryModel3D point = Visual3DModel as GeometryModel3D;
point.Material = Materials.Red; //change mat to red on mouse enter
Event.Handled = true;
}
protected override void OnMouseLeave( MouseEventArgs event )
{
base.OnMouseEnter( event );
GeometryModel3D point = Visual3DModel as GeometryModel3D;
point.Material = Materials.Blue; //change mat to blue on mouse leave
Event.Handled = true;
}
}
将它们添加到游乐场
Point3D[,] dataPoints = new Point3D[10,10]; // i will assume this has already been populated.
ContainerUIElement3D container;
Material defaultMaterial = Materaials.Blue;
for (int x = 0;x < 10; x++)
{
for(int y = 0; y < 10; y++)
{
Point3D position = dataPoints [x, y];
InteractivePoint interactivePoint = new InteractivePoint( position, defaultMaterial );
container.Children.Add( interactivePoint );
}
}
最后将容器作为子项添加到 ModelVisual3D 对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)