3

Helix Toolkit で、ScatterPlot に呼び出される例を見つけました。これは、私が本当に必要としているものに非常に近いものです。しかし、作成されたオブジェクト (この場合は球体) に onclick イベントリスナーを追加する方法については何も見つかりません。これにより、球体が「遊び場」に追加されます。

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

基本的な目標は、すべての球体に onclick イベント リスナーを追加することです。ユーザーが色を選択してこれらの球体の 1 つをクリックすると、選択した色に変わります。球体に onclick リスナー (またはそれに相当するもの) を追加することができます。

4

1 に答える 1

6

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 オブジェクトに追加します。

于 2016-03-17T15:57:37.513 に答える