Helixtoolkit UWP TransformManipulator3D

Helixtoolkit UWP TransformManipulator3D

我正在尝试 move/rotate/scale 使用 UWP 中的 TransformManipulator3D 控件的模型。

我确实让它工作了,但是当我操纵模型时相机不会停止移动。因此,当我尝试 move/rotate/scale 模型时,相机也会移动,这种行为会导致实际 move/scale/rotate 非常不稳定,一点也不平滑或不符合预期。

我错过了什么,我怎样才能让这种行为停止发生?

谢谢。

我认为您需要将相机鼠标手势更改为不同的鼠标按钮。

我无需更改相机的鼠标手势就可以正常工作。

我做了以下事情:

private void viewer_OnMouse3DDown(object sender, MouseDown3DEventArgs e)
    {
        if(e.HitTestResult != null && e.HitTestResult.ModelHit is MeshGeometryModel3D model && GroupModel.Any(x => x == model))
        {
            if(ViewerContext.Selected == model)
            {
                ViewerContext.Selected.PostEffects = null;
                ViewerContext.Selected = null;

                return;
            }

            if(ViewerContext.Selected != null)
            {
                ViewerContext.Selected.PostEffects = null;
            }

            ViewerContext.Selected = model;

            ViewerContext.Selected.PostEffects = string.IsNullOrEmpty(ViewerContext.Selected.PostEffects) ? "border[color:#00FFDE]" : null;

            return;
        }

        if (e.HitTestResult != null && e.HitTestResult.ModelHit is MeshGeometryModel3D pointer && !GroupModel.Any(x => x == pointer))
        {
            ViewerContext.IsRotationEnabled = false;
            ViewerContext.IsMoveEnabled = false;
            ViewerContext.IsPanEnabled = false;

            return;
        }
    }

private void viewer_OnMouse3DUp(object sender, MouseUp3DEventArgs e)
    {
        ViewerContext.IsRotationEnabled = true;
        ViewerContext.IsMoveEnabled = true;
        ViewerContext.IsPanEnabled = true;
    }

指针变量检查 ModelHit 是否是 TransformManipulator3D 控件的一部分。

我遵循了 PostEffects 的 UWP 示例。

ViewerContext 是持有 Viewport3DX 属性的 ViewModel,用于了解相机何时可以再次旋转、移动或平移。

GroupModel 将所有模型保存为 MeshGeometryModel3D 对象。

TransformManipulator3D 控件绑定到同样属于 MeshGeometryModel3D 类型的 ViewerContext 上的 Selected 属性。