master
sunhonglei 5 months ago
parent 1756c08817
commit 5d0c9325a1
  1. 14
      ViewModel/Grading/GradingResultVM.cs
  2. 23
      Views/UserControl/Viewport3D.xaml.cs
  3. 1
      Views/UserControl/ViewportData/Helper/VideoHelper.cs
  4. 38
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
  5. 26
      Views/UserControl/ViewportData/Helper/ViewportManager.cs

@ -751,6 +751,11 @@ public class GradingResultVM : BaseViewModel
}
else
{
if (!File.Exists(getFilePath()))
{
new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists"));
return;
}
string fullPath = Path.Combine(getFilePath(), this.DiamondCode);
if (FileSaveEnabled("Txt"))
{
@ -805,7 +810,14 @@ public class GradingResultVM : BaseViewModel
}
else
{
Directory.CreateDirectory(defultFilePath);
try {
Directory.CreateDirectory(defultFilePath);
}
catch (Exception ex)
{
new MessageBox().Show(MultilingualHelper.getString("SavePathIsnotExists"));
Logger.Error($"全局异常捕获:{ex.Message}", ex);
}
return defultFilePath;
}
}

@ -175,8 +175,6 @@ public partial class Viewport3D
var directionName = ((Button)sender).Name.ToString();
var directionValue = (int) TbCustomizeRevolve.Value;
switch (directionName)
{
case "BtnFcuntion1View":
@ -189,17 +187,28 @@ public partial class Viewport3D
break;
case "BtnFcuntion3View":
//低
//var center = ViewportManager.ModelBounds.Center;
//var maxDimension = ViewportManager.ModelBounds.Size.Length();
//var distance = maxDimension *1.2; // 调整相机到模型的距离,保证视野范围内
//var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera;
//camera.Position = new Point3D(center.X, center.Y, center.Z); // 从前面看,Z轴正方向
//camera.Width = ViewportManager.calCameraWidth();
//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);
var center = ViewportManager.ModelBounds.Center;
ViewportManager.ClearMeshLines(ViewportRightMenuShowMeshLines);
var maxDimension = ViewportManager.ModelBounds.Size.Length();
var distance = maxDimension *1.2; // 调整相机到模型的距离,保证视野范围内
var distance = maxDimension * 1.2; // 调整相机到模型的距离,保证视野范围内
var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera;
camera.Position = new Point3D(center.X, center.Y, center.Z); // 从前面看,Z轴正方向
camera.Width = ViewportManager.calCameraWidth();
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);
camera.LookDirection = new Vector3D(center.X - camera.Position.X, center.Y - camera.Position.Y, center.Z - camera.Position.Z);
await Task.Delay(100);
ViewportHelperPro.RotateModel(new Vector3D(0,-1,0));
await Task.Delay(5000);
await Task.Delay(7000);
ViewportHelperPro.RotateModel(new Vector3D(-1,0,0));
await Task.Delay(7000);
ViewportManager.DoubleClickSelect = !false;
break;
}

@ -212,6 +212,7 @@ public class VideoHelper
{
ViewportHelperPro.RotateModel(new Vector3D(-1, 0, 0));
});
ViewportManager.DoubleClickSelect = !false;
}

@ -900,6 +900,8 @@ public class ViewportHelperPro
public static void RotateModel(Vector3D axis, bool hasLine = true, int speed = 7, int to = 360)
{
ViewportManager.ClearDicModels();
ViewportManager.DoubleClickSelect = false;
// 设置旋转的中心点和旋转轴
var rotateTransform = new RotateTransform3D();
var rotation = new AxisAngleRotation3D(axis, 0);
@ -1284,7 +1286,7 @@ public class ViewportHelperPro
/// <param name="entities"></param>
/// <param name="thickness"></param>
/// <returns></returns>
public static List<LineGeometryModel3D> ShowMeshLines(List<Viewport3DTriangleEntity> entities, bool isCrown = true, double thickness = 1.0)
public static List<LineGeometryModel3D> ShowMeshLines(bool isCrown = true, double thickness = 0.2)
{
if (isCrown)
{
@ -1298,7 +1300,7 @@ public class ViewportHelperPro
}
var center = ViewportManager.CenterVector;
center.Y = Y;
Viewport3DTriangleEntity firstPoint = entities.Where(x => x.PlaneType == PlaneType.TableFacet).FirstOrDefault();
Viewport3DTriangleEntity firstPoint = ViewportManager.ViewportTriangle.Where(x => x.PlaneType == PlaneType.TableFacet).FirstOrDefault();
//var b = ((center.Z * firstPoint.Point1.X) - (firstPoint.Point1.Z * center.X)) / (firstPoint.Point1.X - center.X);
//var a = (firstPoint.Point1.Z - b) / firstPoint.Point1.X;
@ -1321,27 +1323,27 @@ public class ViewportHelperPro
edgeLines = new List<Tuple<Vector3, Vector3>>();
var XLine = lineCal.calXline(r);
edgeLines.Add(XLine);
lines.Add(DisplayLineModel3D(edgeLines, XlineColor));
lines.Add(DisplayLineModel3D(edgeLines, XlineColor, thickness));
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, 2));
var lineA = DisplayLineModel3D(edgeLines, XlineColor);
var lineA = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineA);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, -2));
var lineB = DisplayLineModel3D(edgeLines, XlineColor);
var lineB = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineB);
bindingMoveLine(lineA, lineB);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, 4));
var lineE = DisplayLineModel3D(edgeLines, XlineColor);
var lineE = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineE);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, -4));
var lineF = DisplayLineModel3D(edgeLines, XlineColor);
var lineF = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineF);
bindingMoveLine(lineE, lineF);
@ -1358,31 +1360,32 @@ public class ViewportHelperPro
edgeLines = new List<Tuple<Vector3, Vector3>>();
var YLine = lineCal.calYline(r);
edgeLines.Add(YLine);
lines.Add(DisplayLineModel3D(edgeLines, YlineColor));
lines.Add(DisplayLineModel3D(edgeLines, YlineColor, thickness));
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, 2));
var lineC = DisplayLineModel3D(edgeLines, YlineColor);
var lineC = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineC);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, -2));
var lineD = DisplayLineModel3D(edgeLines, YlineColor);
var lineD = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineD);
bindingMoveLine(lineC, lineD);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, 4));
var lineG = DisplayLineModel3D(edgeLines, YlineColor);
var lineG = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineG);
edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, -4));
var lineH = DisplayLineModel3D(edgeLines, YlineColor);
var lineH = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineH);
bindingMoveLine(lineG, lineH);
return lines;
}
private static readonly double HitTestThickness = 5;
/// <summary>
/// 网状参考线 对向移动绑定
/// </summary>
@ -1390,10 +1393,12 @@ public class ViewportHelperPro
/// <param name="lineB"></param>
private static void bindingMoveLine(LineGeometryModel3D lineA, LineGeometryModel3D lineB)
{
lineA.HitTestThickness = HitTestThickness;
lineA.MouseDown3D += LineA_MouseDown3D;
lineA.MouseUp3D += LineA_MouseUp3D;
lineA.MouseMove3D += LineA_MouseMove3D;
moveLines.Add(lineA.GUID, lineB.GUID);
lineB.HitTestThickness = HitTestThickness;
lineB.MouseDown3D += LineA_MouseDown3D;
lineB.MouseUp3D += LineA_MouseUp3D;
lineB.MouseMove3D += LineA_MouseMove3D;
@ -1648,7 +1653,7 @@ public class ViewportHelperPro
/// <param name="radius"></param>
/// <param name="thickness"></param>
/// <returns></returns>
public static LineGeometryModel3D ShowCircleLine(bool isCrown = true, double radius = 1.0, double thickness = 1.0)
public static LineGeometryModel3D ShowCircleLine(bool isCrown = true, double radius = 1.0, double thickness = 0.2)
{
var Y = -0.01F;
if (!isCrown)
@ -1657,9 +1662,9 @@ public class ViewportHelperPro
}
var center = ViewportManager.CenterVector;
center.Y = Y;
return UpdateCircleGeometry(center, initialRadius);
return UpdateCircleGeometry(center, initialRadius, thickness);
}
private static LineGeometryModel3D UpdateCircleGeometry(Vector3 center, double radius = 1.0)
private static LineGeometryModel3D UpdateCircleGeometry(Vector3 center, double radius = 1.0, double thickness = 1.0)
{
// 生成圆形线的点
int segments = 100; // 圆的细分段数
@ -1677,7 +1682,8 @@ public class ViewportHelperPro
indices.Add(i);
indices.Add((i + 1) % segments);
}
var Circle = DisplayLineModel3D(positions, Color4.Black);
var Circle = DisplayLineModel3D(positions, Colors.Orange.ToColor4(),thickness);
Circle.HitTestThickness = HitTestThickness;
Circle.MouseDown3D += Circle_MouseDown3D;
Circle.MouseUp3D += Circle_MouseUp3D;
Circle.MouseMove3D += Circle_MouseMove3D;

@ -156,6 +156,15 @@ public class ViewportManager
ChooseAddModels.Clear();
}
public static void ResetMeshLines()
{
MainModelMeshLines_C.Clear();
MainModelMeshLines_C.AddRange(ViewportHelperPro.ShowMeshLines());
MainModelCircleLine_C = ViewportHelperPro.ShowCircleLine();
MainModelMeshLines_P.Clear();
MainModelMeshLines_P.AddRange(ViewportHelperPro.ShowMeshLines(false));
MainModelCircleLine_P = ViewportHelperPro.ShowCircleLine(false);
}
/// <summary>
/// 模拟面选中
/// </summary>
@ -289,12 +298,7 @@ public class ViewportManager
_viewport.Camera.UpDirection = new Vector3D(0, -1, 0);
_viewport.RenderHost.MSAA = MSAALevel.Maximum;
// TODO:
MainModelMeshLines_C.Clear();
MainModelMeshLines_C.AddRange(ViewportHelperPro.ShowMeshLines(entities));
MainModelCircleLine_C = ViewportHelperPro.ShowCircleLine();
MainModelMeshLines_P.Clear();
MainModelMeshLines_P.AddRange(ViewportHelperPro.ShowMeshLines(entities, false));
MainModelCircleLine_P = ViewportHelperPro.ShowCircleLine(false);
ResetMeshLines();
}
/// <summary>
@ -470,12 +474,20 @@ public class ViewportManager
_viewport.Items.Remove(MainModelCircleLine_C);
MainModelMeshLines_P.ForEach(e => _viewport.Items.Remove(e));
_viewport.Items.Remove(MainModelCircleLine_P);
ResetMeshLines();
}
}
public static void ClearMeshLines(MenuItem menuItem)
{
ViewportManager.ShowMeshLines(false, true);
ViewportManager.ShowMeshLines(false, false);
menuItem.IsChecked = false;
}
#endregion
#region 预制颜色
#region 预制颜色
/// <summary>
/// 材质:半透明蓝
/// </summary>

Loading…
Cancel
Save