diff --git a/Resource/Images/UserControl/03-8-3.png b/Resource/Images/UserControl/03-8-3.png
new file mode 100644
index 0000000..b2c78f5
Binary files /dev/null and b/Resource/Images/UserControl/03-8-3.png differ
diff --git a/SparkClient.csproj b/SparkClient.csproj
index 76c0cdc..dfac916 100644
--- a/SparkClient.csproj
+++ b/SparkClient.csproj
@@ -190,6 +190,8 @@
+
+
diff --git a/ViewModel/Grading/GradingResultVM.cs b/ViewModel/Grading/GradingResultVM.cs
index f3cd760..7531fa6 100644
--- a/ViewModel/Grading/GradingResultVM.cs
+++ b/ViewModel/Grading/GradingResultVM.cs
@@ -749,6 +749,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"))
{
@@ -803,7 +808,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;
}
}
diff --git a/Views/UserControl/Viewport3D.xaml b/Views/UserControl/Viewport3D.xaml
index 2c2ccfc..532b5eb 100644
--- a/Views/UserControl/Viewport3D.xaml
+++ b/Views/UserControl/Viewport3D.xaml
@@ -45,6 +45,10 @@
x:Name="BtnFcuntion3View" Click="BtnFunction_OnClick">
+
diff --git a/Views/UserControl/Viewport3D.xaml.cs b/Views/UserControl/Viewport3D.xaml.cs
index 7ec18d9..797a4f2 100644
--- a/Views/UserControl/Viewport3D.xaml.cs
+++ b/Views/UserControl/Viewport3D.xaml.cs
@@ -42,7 +42,12 @@ public partial class Viewport3D
private void Viewport3D_OnLoaded(object sender, RoutedEventArgs e)
{
ViewportManager.SetViewport3D(Viewport3Dx);
+ ViewportManager.SetViewport(this);
ViewportManager.LoadModelByEntities(new List());
+ #if DEBUG
+ #else
+ BtnShow3DView.Visibility = Visibility.Hidden;
+ #endif
//选项初始化 显示-后端-管理类 一致
ViewportRightMenuSelectFaceFrame.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
@@ -189,17 +194,31 @@ 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.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.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);
+ 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;
+ case "BtnShow3DView":
+
break;
}
diff --git a/Views/UserControl/ViewportData/Helper/UnityHelper.cs b/Views/UserControl/ViewportData/Helper/UnityHelper.cs
new file mode 100644
index 0000000..10dc8fd
--- /dev/null
+++ b/Views/UserControl/ViewportData/Helper/UnityHelper.cs
@@ -0,0 +1,18 @@
+namespace SparkClient.Views.UserControl.ViewportData.Helper;
+
+public class UnityHelper
+{
+ private static string _image_path = AppDomain.CurrentDomain.BaseDirectory + "/temp/image/";
+
+ /***
+ * 1、根据模型信息和钻石编码生成签名作为stl文件名(导出:ViewportHelperPro.ExportModelsToStl(null, path+filename))
+ * 2、判断同名STL文件是否存在 存在跳到 7
+ * 3、 清理temp下,image、stl两个目录
+ * 4、导出模型stl文件,记录完整的路径paramA
+ * 5、执行导出命令 xx.exe --model=_stl_path+paramA --output=_image_path --type=0/1 0:心图(0.png) 1:箭图(1.png)
+ * 6、等待命令结束
+ * 7、判断图片文件是否存在 --->>不存在:提示生成失败,请重试, --->>不存在并且从2过来的,跳到1
+ * 8、展示图片弹窗,并注以说明:心箭图为模拟渲染,实际请以切工镜观测为准。
+ * 9、关闭
+ */
+}
\ No newline at end of file
diff --git a/Views/UserControl/ViewportData/Helper/VideoHelper.cs b/Views/UserControl/ViewportData/Helper/VideoHelper.cs
index 645e1b3..9696ecd 100644
--- a/Views/UserControl/ViewportData/Helper/VideoHelper.cs
+++ b/Views/UserControl/ViewportData/Helper/VideoHelper.cs
@@ -212,7 +212,8 @@ public class VideoHelper
{
ViewportHelperPro.RotateModel(new Vector3D(-1, 0, 0));
});
-
+ ViewportManager.DoubleClickSelect = !false;
+
}
public static PngBitmapEncoder CutPng(Viewport3DX viewport)
diff --git a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
index e742caf..5984b47 100644
--- a/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
+++ b/Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
@@ -178,7 +178,7 @@ public class ViewportHelperPro
{
if (viewport == null)
viewport = ViewportManager.GetViewport3D();
-
+
var generationTask = VideoHelper.StartGenerationAndRotation(viewport);
List pngList = await generationTask;
@@ -899,7 +899,10 @@ public class ViewportHelperPro
/// 旋转时间 秒
public static void RotateModel(Vector3D axis, bool hasLine = true, int speed = 7, int to = 360)
{
+ ViewportManager.GetViewport().ViewportRightMenuShowModelFaceByType.IsChecked = false;
ViewportManager.ClearDicModels();
+ ViewportManager.DoubleClickSelect = false;
+
// 设置旋转的中心点和旋转轴
var rotateTransform = new RotateTransform3D();
var rotation = new AxisAngleRotation3D(axis, 0);
@@ -1284,7 +1287,7 @@ public class ViewportHelperPro
///
///
///
- public static List ShowMeshLines(List entities, bool isCrown = true, double thickness = 1.0)
+ public static List ShowMeshLines(bool isCrown = true, double thickness = 0.2)
{
if (isCrown)
{
@@ -1298,7 +1301,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 +1324,27 @@ public class ViewportHelperPro
edgeLines = new List>();
var XLine = lineCal.calXline(r);
edgeLines.Add(XLine);
- lines.Add(DisplayLineModel3D(edgeLines, XlineColor));
+ lines.Add(DisplayLineModel3D(edgeLines, XlineColor, thickness));
edgeLines = new List>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, 2));
- var lineA = DisplayLineModel3D(edgeLines, XlineColor);
+ var lineA = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineA);
edgeLines = new List>();
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>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, 4));
- var lineE = DisplayLineModel3D(edgeLines, XlineColor);
+ var lineE = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineE);
edgeLines = new List>();
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 +1361,32 @@ public class ViewportHelperPro
edgeLines = new List>();
var YLine = lineCal.calYline(r);
edgeLines.Add(YLine);
- lines.Add(DisplayLineModel3D(edgeLines, YlineColor));
+ lines.Add(DisplayLineModel3D(edgeLines, YlineColor, thickness));
edgeLines = new List>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, 2));
- var lineC = DisplayLineModel3D(edgeLines, YlineColor);
+ var lineC = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineC);
edgeLines = new List>();
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>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, 4));
- var lineG = DisplayLineModel3D(edgeLines, YlineColor);
+ var lineG = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineG);
edgeLines = new List>();
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;
///
/// 网状参考线 对向移动绑定
///
@@ -1390,10 +1394,12 @@ public class ViewportHelperPro
///
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 +1654,7 @@ public class ViewportHelperPro
///
///
///
- 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 +1663,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 +1683,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;
diff --git a/Views/UserControl/ViewportData/Helper/ViewportManager.cs b/Views/UserControl/ViewportData/Helper/ViewportManager.cs
index e8280c9..d9ac7b4 100644
--- a/Views/UserControl/ViewportData/Helper/ViewportManager.cs
+++ b/Views/UserControl/ViewportData/Helper/ViewportManager.cs
@@ -63,6 +63,8 @@ public class ViewportManager
/// 网格线(圈)
///
public static LineGeometryModel3D MainModelCircleLine_P = new LineGeometryModel3D();
+
+
///
/// 腰垂直线
///
@@ -88,6 +90,9 @@ public class ViewportManager
/// 模型控件对象映射
///
private static Viewport3DX _viewport;
+
+ //模型
+ private static Viewport3D _viewport3D = null;
public static void SetViewport3D(Viewport3DX viewport3D)
{
if (_viewport != null)
@@ -105,6 +110,24 @@ public class ViewportManager
throw new Exception("Viewport is not set");
return _viewport;
+ }
+ public static void SetViewport(Viewport3D viewport3D)
+ {
+ if (_viewport != null)
+ {
+ ClearDicModels();
+ _viewport.Items.Clear();
+
+ }
+
+ _viewport3D = viewport3D;
+ }
+ public static Viewport3D GetViewport()
+ {
+ if (_viewport3D == null)
+ throw new Exception("Viewport is not set");
+ return _viewport3D;
+
}
#region 模型选中交互管理
//是否双击选中
@@ -156,6 +179,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);
+ }
///
/// 模拟面选中
///
@@ -289,12 +321,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();
}
///
@@ -470,12 +497,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 预制颜色
///
/// 材质:半透明蓝
///