【问题标题】:Create clickable objects with helix toolkit使用 helix 工具包创建可点击对象
【发布时间】:2016-03-17 23:57:37
【问题描述】:

我在 Helix Toolkit 上找到了一个名为 ScatterPlot 的示例,它非常接近我真正需要的。但是我找不到任何关于如何将一些 onclick 事件侦听器添加到创建的对象(在本例中为球体)的信息。这会将球体添加到“游乐场”。

scatterMeshBuilder.AddSphere(Points[i], SphereSize, 4, 4);

基本目标是为每个球体添加一个 onclick 事件侦听器,当用户选择一种颜色并单击其中一个球体时,它将变为所选颜色。可以将 onclick 侦听器(或与之相同的东西)添加到球体中。

【问题讨论】:

    标签: c# wpf helix-3d-toolkit


    【解决方案1】:

    一年后...也许有人会发现这很有用。

    一个对我有用的解决方案是围绕扩展 UIElement3D 类展开的,它有一堆可以覆盖的标准事件。例如 MouseEnter、MouseClick 等。 来源如下。

    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 对象中。

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 2015-06-10
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多