diff --git a/Views/UserControl/Viewport3D.xaml.cs b/Views/UserControl/Viewport3D.xaml.cs index 3e6dc03..426c962 100644 --- a/Views/UserControl/Viewport3D.xaml.cs +++ b/Views/UserControl/Viewport3D.xaml.cs @@ -32,6 +32,7 @@ public partial class Viewport3D Viewport3Dx.ShowViewCube = false; Viewport3Dx.ShowCoordinateSystem = false; ViewportManager.SetViewport3D(Viewport3Dx); + } /// @@ -129,7 +130,7 @@ public partial class Viewport3D var maxDimension = ViewportManager.ModelBounds.Size.Length(); var distance = maxDimension *1.2; // 调整相机到模型的距离,保证视野范围内 // 获取当前相机 - var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.PerspectiveCamera; + var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera; switch (directionName) { @@ -187,7 +188,7 @@ public partial class Viewport3D var center = ViewportManager.ModelBounds.Center; var maxDimension = ViewportManager.ModelBounds.Size.Length(); var distance = maxDimension *1.2; // 调整相机到模型的距离,保证视野范围内 - var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.PerspectiveCamera; + var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera; camera.Position = new Point3D(center.X, center.Y, center.Z + distance); // 从前面看,Z轴正方向 camera.UpDirection = new Vector3D(0, -1, 0); camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z); @@ -211,7 +212,7 @@ public partial class Viewport3D var directionValue = (int)TbCustomizeRevolve.Value; // 旋转角度(单位:度) // 获取当前相机和模型中心 - var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.PerspectiveCamera; + var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera; if (camera == null) return; var modelCenter = ViewportManager.CenterVector; // 模型中心 @@ -417,7 +418,7 @@ public partial class Viewport3D var maxDimension = ViewportManager.ModelBounds.Size.Length(); var distance = maxDimension * 1.2; // 调整相机到模型的距离,保证视野范围内 // 获取当前相机 - var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.PerspectiveCamera; + var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera; camera.Position = new Point3D(center.X, center.Y - distance, center.Z); // 从底部看,Y轴负方向 camera.UpDirection = new Vector3D(0, 0, -1); camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z); diff --git a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs index 48d063d..6f196ca 100644 --- a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs +++ b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs @@ -19,6 +19,7 @@ using PerspectiveCamera = HelixToolkit.Wpf.SharpDX.PerspectiveCamera; using System.Windows.Controls; using HelixToolkit.Wpf; using MeshBuilder = HelixToolkit.Wpf.SharpDX.MeshBuilder; +using OrthographicCamera = HelixToolkit.Wpf.SharpDX.OrthographicCamera; namespace SparkClient.Views.UserControl.ViewportData.Helper; @@ -1010,7 +1011,7 @@ public class ViewportHelperPro /// /// /// - public static HelixToolkit.Wpf.SharpDX.PerspectiveCamera CalculateCamera(Vector3 positiveDirection, BoundingBox boundingBox, double fieldOfView = 45, double aspectRatio = 16.0 / 9.0) + public static HelixToolkit.Wpf.SharpDX.OrthographicCamera CalculateCamera(Vector3 positiveDirection, BoundingBox boundingBox, double fieldOfView = 45, double aspectRatio = 16.0 / 9.0) { // 单位化正方向 var normalizedDirection = Vector3.Normalize(positiveDirection); @@ -1028,15 +1029,16 @@ public class ViewportHelperPro // 相机位置和朝向 var cameraPosition = center - normalizedDirection * (float)distance; // 沿正方向放置相机 var lookDirection = center - cameraPosition; // 朝向模型中心 - + // 创建并返回相机 - return new HelixToolkit.Wpf.SharpDX.PerspectiveCamera + return new HelixToolkit.Wpf.SharpDX.OrthographicCamera { Position = cameraPosition.ToPoint3D(), LookDirection = lookDirection.ToVector3D(), UpDirection = new Vector3D(0, 1, 0), // 默认全局 Y 轴为上方向 - FieldOfView = fieldOfView, + NearPlaneDistance = 0.1f, + FarPlaneDistance=1000 }; } @@ -1446,7 +1448,7 @@ public class ViewportHelperPro { // 使用 HelixToolkit 的 Ray3D 和 Plane3D var Viewport = ViewportManager.GetViewport3D(); - var camera = Viewport.Camera as PerspectiveCamera; + var camera = Viewport.Camera as OrthographicCamera; // 创建射线 var ray = new Ray3D(