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 属性。
我正在尝试 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 属性。