wpf3d矩形命中测试

时间:2010-12-13 12:33:48

标签: wpf 3d

我的应用程序包含驻留在Viewport3D中的3D对象,我希望用户能够通过在屏幕上拖动矩形来选择它们。

我尝试在Viewport3D上应用GeometryHitTestParameters(带有矩形几何体)以获得结果,但是我得到一个异常,告诉我它没有用于Viewport3D。只支持PointHitTestParameters。

有没有人知道任何优雅的方法,除了自己计算(例如 - 将所有3D对象投影到2D并用矩形做手动几何交叉)?

1 个答案:

答案 0 :(得分:0)

我怀疑除了迭代选定的矩形点之外还有更好的方法:

    private void view_PreviewMouseDown(object sender, MouseButtonEventArgs e) {
        const double offset = 3.0; // I will test in a square 7x7
        var mouse = e.GetPosition(this);
        var items = new HashSet<Model3D>();
        for (double x = mouse.X - offset; x <= mouse.X + offset; x++)
            for (double y = mouse.Y - offset; y <= mouse.Y + offset; y++) {
                PointHitTestParameters pointparams = new PointHitTestParameters(new Point(x, y));
                Model3D result = null;
                VisualTreeHelper.HitTest(view, null, rawresult => {
                    var rayResult = rawresult as RayMeshGeometry3DHitTestResult;
                    if (rayResult != null)
                        items.Add(rayResult.ModelHit);
                    return HitTestResultBehavior.Continue;
                }, pointparams);
            }
        // temporary ListBox to show items
        list.ItemsSource = items.Select(item => item as GeometryModel3D == null ? null : (item as GeometryModel3D).Material as object);
    }

请参阅MSDN How to: Hit Test in a Viewport3D