wpf3d矩形命中测试

wpf3d矩形命中测试,wpf,3d,Wpf,3d,我有一个包含驻留在Viewport3D中的3D对象的应用程序,我希望用户能够通过在屏幕上拖动矩形来选择它们 我尝试在Viewport3D上应用GeometryHitTestParameters(带矩形几何体)以获得结果,但我遇到一个异常,告诉我Viewport3D不支持它。仅支持PointHitTestParameters 除了自己计算(例如,将所有3D对象投影到2D,并与矩形进行手动几何相交)之外,有人知道任何优雅的方法吗?我怀疑还有比迭代选定矩形点更好的方法: private voi

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

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


除了自己计算(例如,将所有3D对象投影到2D,并与矩形进行手动几何相交)之外,有人知道任何优雅的方法吗?

我怀疑还有比迭代选定矩形点更好的方法:

    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);
    }
private void view\u PreviewMouseDown(对象发送器,鼠标按钮ventargs e){
const double offset=3.0;//我将在一个正方形中7x7进行测试
var mouse=e.GetPosition(这个);
var items=newhashset();
对于(双x=mouse.x-offset;x项作为GeometryModel3D==null?null:(项作为GeometryModel3D.Material作为对象);
}

当然有。例如,使用相机参数手动计算观察平截头体,然后手动遍历视觉树并执行模型对平截头体包容测试。使用边界框可以实现高速。但这是在重塑车轮。他们已经在WPF内部使用基于光线的命中测试来实现这一点。唯一的区别是相交测试是光线模型,而不是平截头体模型。我在网上找不到这个场景的有效代码,我想这里有人知道我在哪里可以找到有效的代码来完成这个任务。你试过这个链接的方法吗?当然这是已知的点/射线命中测试方法。我正在寻找矩形击中测试。它不是框架的一个组成部分,但也许有人知道我如何使用框架优雅地完成我的任务。无论如何,GeometryHitTestParameters在Viewport3D上不起作用。因此,我不能将其用于矩形命中测试。