我正在尝试使用UWP中的TransformManipulator3D控件移动/旋转/缩放模型。
我确实让它工作,但是当我操纵模型时,相机并没有停止移动。所以当我尝试移动/旋转/缩放模型时,相机也会移动,这种行为会导致实际的移动/缩放/旋转非常不稳定,一点也不平滑或不符合预期。
我错过了什么,我怎么能让这种行为停止发生?
谢谢。
我认为你需要改变你的相机鼠标手势到一个不同的鼠标按钮。
我不需要改变相机的鼠标手势就能让它工作。
我做了以下操作:
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控件的一部分。
我遵循UWP示例的PostEffects。
ViewerContext是持有Viewport3DX属性的ViewModel,用来知道相机何时可以再次旋转、移动或平移。
GroupModel将所有模型保存为MeshGeometryModel3D对象。
TransformManipulator3D控件绑定到ViewerContext的Selected属性,该属性的类型也是MeshGeometryModel3D。