【问题标题】:How to add Mouse.MouseEnter event to Helix Toolkit objects like LinesVisual3D?如何将 Mouse.MouseEnter 事件添加到 LinesVisual3D 等 Helix Toolkit 对象?
【发布时间】:2020-06-12 19:45:01
【问题描述】:

我想在 WPF 项目(建筑框架)中使用 helixtoolkit 可视化线框 3d 模型。这些元素应该是可点击的,以便用户可以与它们进行交互。同样,当鼠标悬停在对象上方时,它们的颜色应该会改变。所以基本上我需要鼠标进入/离开和鼠标按下事件。我不知道图书馆没有实现事件。有什么方法可以通过继承 LinesVisual3D 类将这些事件添加到自定义类中?

附:我在想也许写我自己的路由事件,有可能吗? 我也很欣赏关于如何使用其他工具而不是 helix 来实现这一点的任何想法。

【问题讨论】:

  • 这个问题的范围似乎相当广泛。我还没有遇到过自动实现鼠标事件(例如悬停或选择)的图形工具包,因为没有一个解决方案足够灵活。你看过这些例子了吗?有一个似乎实现了一种基本的选择机制github.com/helix-toolkit/helix-toolkit/tree/develop/Source/…。我自己没有尝试过,因为我倾向于使用不兼容的 SharpDX 版本的库。
  • @MattBreckon 感谢您的链接,我检查了一些示例,但没有看到那个。希望它有一些我可以添加到我的项目中的功能。尽管我设法解决了将 UIElement3D 派生对象作为子对象添加到 HelixViewport3D 的问题。也许我在这里为有同样问题的人粘贴了一些代码。
  • 添加清晰的描述作为您自己问题的答案是在 StackOverflow 上非常有效的做法,并且会添加到工具包的可用文档中(如您所见,Helix Toolkit 需要一些帮助)区域!)。我不是维护者,但我会尽力而为。

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


【解决方案1】:

我找到了答案,所以我把它贴在这里。 所以基本上如果你想在你的对象上使用鼠标事件,你应该从 UIElement3D 类继承,它有许多内置事件。 使用 MeshBuilder 创建 3D 实体,将其添加到 GeometryModel3D 类型的 Geometry 属性中。然后将类的 Visual3DModel 属性设置为 GeometryModel3D 对象。

   public class Structural3D : UIElement3D
{
    public Structural3D()
    {
        var modelMesh = new MeshBuilder();
        modelMesh.AddBox(new Point3D(1, 1, 1), 0.5, 0.5, 2);
        var geometryModel3D = new GeometryModel3D();
        geometryModel3D.Geometry = modelMesh.ToMesh();
        geometryModel3D.Material = Material;
        Visual3DModel = geometryModel3D;
    }       
}

现在您可以覆盖鼠标处理程序

protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
    {
        //do something here, change color, etc
        base.OnMouseLeftButtonDown(e);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多