Merge remote-tracking branch 'origin/master'

master
handefeng 5 months ago
commit e7c3f500c4
  1. BIN
      Resource/Images/UserControl/03-8-3.png
  2. 2
      SparkClient.csproj
  3. 12
      ViewModel/Grading/GradingResultVM.cs
  4. 4
      Views/UserControl/Viewport3D.xaml
  5. 27
      Views/UserControl/Viewport3D.xaml.cs
  6. 18
      Views/UserControl/ViewportData/Helper/UnityHelper.cs
  7. 1
      Views/UserControl/ViewportData/Helper/VideoHelper.cs
  8. 39
      Views/UserControl/ViewportData/Helper/ViewportHelperPro.cs
  9. 47
      Views/UserControl/ViewportData/Helper/ViewportManager.cs

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

@ -190,6 +190,8 @@
<Resource Include="Resource\Images\UIResource\08-5.jpg" /> <Resource Include="Resource\Images\UIResource\08-5.jpg" />
<None Remove="Resource\Images\UIResource\03-0.jpg" /> <None Remove="Resource\Images\UIResource\03-0.jpg" />
<Resource Include="Resource\Images\UIResource\03-0.jpg" /> <Resource Include="Resource\Images\UIResource\03-0.jpg" />
<None Remove="Resource\Images\UserControl\03-8-3.png" />
<Resource Include="Resource\Images\UserControl\03-8-3.png" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

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

@ -45,6 +45,10 @@
x:Name="BtnFcuntion3View" Click="BtnFunction_OnClick"> x:Name="BtnFcuntion3View" Click="BtnFunction_OnClick">
<Image Source="pack://Application:,,,/Resource/Images/UserControl/03-8-2.png" Width="40" Height="40"></Image> <Image Source="pack://Application:,,,/Resource/Images/UserControl/03-8-2.png" Width="40" Height="40"></Image>
</Button> </Button>
<Button Grid.Column="5" Background="Transparent" BorderBrush="Transparent" Height="50" Padding="2"
x:Name="BtnShow3DView" Click="BtnFunction_OnClick">
<Image Source="pack://Application:,,,/Resource/Images/UserControl/03-8-3.png" Width="40" Height="40"></Image>
</Button>
</Grid> </Grid>
<Border Grid.Row="1" x:Name="MainBorder"> <Border Grid.Row="1" x:Name="MainBorder">
<Border.ContextMenu > <Border.ContextMenu >

@ -42,7 +42,12 @@ public partial class Viewport3D
private void Viewport3D_OnLoaded(object sender, RoutedEventArgs e) private void Viewport3D_OnLoaded(object sender, RoutedEventArgs e)
{ {
ViewportManager.SetViewport3D(Viewport3Dx); ViewportManager.SetViewport3D(Viewport3Dx);
ViewportManager.SetViewport(this);
ViewportManager.LoadModelByEntities(new List<Viewport3DTriangleEntity>()); ViewportManager.LoadModelByEntities(new List<Viewport3DTriangleEntity>());
#if DEBUG
#else
BtnShow3DView.Visibility = Visibility.Hidden;
#endif
//选项初始化 显示-后端-管理类 一致 //选项初始化 显示-后端-管理类 一致
ViewportRightMenuSelectFaceFrame.IsEnabled = ViewportRightMenuSelectFace.IsChecked ; ViewportRightMenuSelectFaceFrame.IsEnabled = ViewportRightMenuSelectFace.IsChecked ;
@ -189,17 +194,31 @@ public partial class Viewport3D
break; break;
case "BtnFcuntion3View": 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; var center = ViewportManager.ModelBounds.Center;
ViewportManager.ClearMeshLines(ViewportRightMenuShowMeshLines);
var maxDimension = ViewportManager.ModelBounds.Size.Length(); 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; var camera = Viewport3Dx.Camera as HelixToolkit.Wpf.SharpDX.OrthographicCamera;
camera.Position = new Point3D(center.X, center.Y, center.Z); // 从前面看,Z轴正方向 camera.Position = new Point3D(center.X, center.Y, center.Z + distance); // 从前面看,Z轴正方向
camera.Width = ViewportManager.calCameraWidth();
camera.UpDirection = new Vector3D(0, -1, 0); 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)); ViewportHelperPro.RotateModel(new Vector3D(0,-1,0));
await Task.Delay(5000); await Task.Delay(7000);
ViewportHelperPro.RotateModel(new Vector3D(-1,0,0)); ViewportHelperPro.RotateModel(new Vector3D(-1,0,0));
await Task.Delay(7000);
ViewportManager.DoubleClickSelect = !false;
break;
case "BtnShow3DView":
break; break;
} }

@ -0,0 +1,18 @@
namespace SparkClient.Views.UserControl.ViewportData.Helper;
public class UnityHelper
{
private static string _image_path = AppDomain.CurrentDomain.BaseDirectory + "/temp/image/";
/***
* 1stl文件名ViewportHelperPro.ExportModelsToStl(null, path+filename)
* 2STL文件是否存在 7
* 3 temp下imagestl两个目录
* 4stl文件paramA
* 5 xx.exe --model=_stl_path+paramA --output=_image_path --type=0/1 00.png 11.png
* 6
* 7 --->> --->>21
* 8
* 9
*/
}

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

@ -899,7 +899,10 @@ public class ViewportHelperPro
/// <param name="speed">旋转时间 秒</param> /// <param name="speed">旋转时间 秒</param>
public static void RotateModel(Vector3D axis, bool hasLine = true, int speed = 7, int to = 360) public static void RotateModel(Vector3D axis, bool hasLine = true, int speed = 7, int to = 360)
{ {
ViewportManager.GetViewport().ViewportRightMenuShowModelFaceByType.IsChecked = false;
ViewportManager.ClearDicModels(); ViewportManager.ClearDicModels();
ViewportManager.DoubleClickSelect = false;
// 设置旋转的中心点和旋转轴 // 设置旋转的中心点和旋转轴
var rotateTransform = new RotateTransform3D(); var rotateTransform = new RotateTransform3D();
var rotation = new AxisAngleRotation3D(axis, 0); var rotation = new AxisAngleRotation3D(axis, 0);
@ -1284,7 +1287,7 @@ public class ViewportHelperPro
/// <param name="entities"></param> /// <param name="entities"></param>
/// <param name="thickness"></param> /// <param name="thickness"></param>
/// <returns></returns> /// <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) if (isCrown)
{ {
@ -1298,7 +1301,7 @@ public class ViewportHelperPro
} }
var center = ViewportManager.CenterVector; var center = ViewportManager.CenterVector;
center.Y = Y; 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 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; //var a = (firstPoint.Point1.Z - b) / firstPoint.Point1.X;
@ -1321,27 +1324,27 @@ public class ViewportHelperPro
edgeLines = new List<Tuple<Vector3, Vector3>>(); edgeLines = new List<Tuple<Vector3, Vector3>>();
var XLine = lineCal.calXline(r); var XLine = lineCal.calXline(r);
edgeLines.Add(XLine); edgeLines.Add(XLine);
lines.Add(DisplayLineModel3D(edgeLines, XlineColor)); lines.Add(DisplayLineModel3D(edgeLines, XlineColor, thickness));
edgeLines = new List<Tuple<Vector3, Vector3>>(); edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, 2)); edgeLines.Add(lineCal.calLineOfOffset(XLine, 2));
var lineA = DisplayLineModel3D(edgeLines, XlineColor); var lineA = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineA); lines.Add(lineA);
edgeLines = new List<Tuple<Vector3, Vector3>>(); edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, -2)); edgeLines.Add(lineCal.calLineOfOffset(XLine, -2));
var lineB = DisplayLineModel3D(edgeLines, XlineColor); var lineB = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineB); lines.Add(lineB);
bindingMoveLine(lineA, lineB); bindingMoveLine(lineA, lineB);
edgeLines = new List<Tuple<Vector3, Vector3>>(); edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, 4)); edgeLines.Add(lineCal.calLineOfOffset(XLine, 4));
var lineE = DisplayLineModel3D(edgeLines, XlineColor); var lineE = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineE); lines.Add(lineE);
edgeLines = new List<Tuple<Vector3, Vector3>>(); edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(XLine, -4)); edgeLines.Add(lineCal.calLineOfOffset(XLine, -4));
var lineF = DisplayLineModel3D(edgeLines, XlineColor); var lineF = DisplayLineModel3D(edgeLines, XlineColor, thickness);
lines.Add(lineF); lines.Add(lineF);
bindingMoveLine(lineE, lineF); bindingMoveLine(lineE, lineF);
@ -1358,31 +1361,32 @@ public class ViewportHelperPro
edgeLines = new List<Tuple<Vector3, Vector3>>(); edgeLines = new List<Tuple<Vector3, Vector3>>();
var YLine = lineCal.calYline(r); var YLine = lineCal.calYline(r);
edgeLines.Add(YLine); edgeLines.Add(YLine);
lines.Add(DisplayLineModel3D(edgeLines, YlineColor)); lines.Add(DisplayLineModel3D(edgeLines, YlineColor, thickness));
edgeLines = new List<Tuple<Vector3, Vector3>>(); edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, 2)); edgeLines.Add(lineCal.calLineOfOffset(YLine, 2));
var lineC = DisplayLineModel3D(edgeLines, YlineColor); var lineC = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineC); lines.Add(lineC);
edgeLines = new List<Tuple<Vector3, Vector3>>(); edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, -2)); edgeLines.Add(lineCal.calLineOfOffset(YLine, -2));
var lineD = DisplayLineModel3D(edgeLines, YlineColor); var lineD = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineD); lines.Add(lineD);
bindingMoveLine(lineC, lineD); bindingMoveLine(lineC, lineD);
edgeLines = new List<Tuple<Vector3, Vector3>>(); edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, 4)); edgeLines.Add(lineCal.calLineOfOffset(YLine, 4));
var lineG = DisplayLineModel3D(edgeLines, YlineColor); var lineG = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineG); lines.Add(lineG);
edgeLines = new List<Tuple<Vector3, Vector3>>(); edgeLines = new List<Tuple<Vector3, Vector3>>();
edgeLines.Add(lineCal.calLineOfOffset(YLine, -4)); edgeLines.Add(lineCal.calLineOfOffset(YLine, -4));
var lineH = DisplayLineModel3D(edgeLines, YlineColor); var lineH = DisplayLineModel3D(edgeLines, YlineColor, thickness);
lines.Add(lineH); lines.Add(lineH);
bindingMoveLine(lineG, lineH); bindingMoveLine(lineG, lineH);
return lines; return lines;
} }
private static readonly double HitTestThickness = 5;
/// <summary> /// <summary>
/// 网状参考线 对向移动绑定 /// 网状参考线 对向移动绑定
/// </summary> /// </summary>
@ -1390,10 +1394,12 @@ public class ViewportHelperPro
/// <param name="lineB"></param> /// <param name="lineB"></param>
private static void bindingMoveLine(LineGeometryModel3D lineA, LineGeometryModel3D lineB) private static void bindingMoveLine(LineGeometryModel3D lineA, LineGeometryModel3D lineB)
{ {
lineA.HitTestThickness = HitTestThickness;
lineA.MouseDown3D += LineA_MouseDown3D; lineA.MouseDown3D += LineA_MouseDown3D;
lineA.MouseUp3D += LineA_MouseUp3D; lineA.MouseUp3D += LineA_MouseUp3D;
lineA.MouseMove3D += LineA_MouseMove3D; lineA.MouseMove3D += LineA_MouseMove3D;
moveLines.Add(lineA.GUID, lineB.GUID); moveLines.Add(lineA.GUID, lineB.GUID);
lineB.HitTestThickness = HitTestThickness;
lineB.MouseDown3D += LineA_MouseDown3D; lineB.MouseDown3D += LineA_MouseDown3D;
lineB.MouseUp3D += LineA_MouseUp3D; lineB.MouseUp3D += LineA_MouseUp3D;
lineB.MouseMove3D += LineA_MouseMove3D; lineB.MouseMove3D += LineA_MouseMove3D;
@ -1648,7 +1654,7 @@ public class ViewportHelperPro
/// <param name="radius"></param> /// <param name="radius"></param>
/// <param name="thickness"></param> /// <param name="thickness"></param>
/// <returns></returns> /// <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; var Y = -0.01F;
if (!isCrown) if (!isCrown)
@ -1657,9 +1663,9 @@ public class ViewportHelperPro
} }
var center = ViewportManager.CenterVector; var center = ViewportManager.CenterVector;
center.Y = Y; 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; // 圆的细分段数 int segments = 100; // 圆的细分段数
@ -1677,7 +1683,8 @@ public class ViewportHelperPro
indices.Add(i); indices.Add(i);
indices.Add((i + 1) % segments); 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.MouseDown3D += Circle_MouseDown3D;
Circle.MouseUp3D += Circle_MouseUp3D; Circle.MouseUp3D += Circle_MouseUp3D;
Circle.MouseMove3D += Circle_MouseMove3D; Circle.MouseMove3D += Circle_MouseMove3D;

@ -63,6 +63,8 @@ public class ViewportManager
/// 网格线(圈) /// 网格线(圈)
/// </summary> /// </summary>
public static LineGeometryModel3D MainModelCircleLine_P = new LineGeometryModel3D(); public static LineGeometryModel3D MainModelCircleLine_P = new LineGeometryModel3D();
/// <summary> /// <summary>
/// 腰垂直线 /// 腰垂直线
/// </summary> /// </summary>
@ -88,6 +90,9 @@ public class ViewportManager
/// 模型控件对象映射 /// 模型控件对象映射
/// </summary> /// </summary>
private static Viewport3DX _viewport; private static Viewport3DX _viewport;
//模型
private static Viewport3D _viewport3D = null;
public static void SetViewport3D(Viewport3DX viewport3D) public static void SetViewport3D(Viewport3DX viewport3D)
{ {
if (_viewport != null) if (_viewport != null)
@ -105,6 +110,24 @@ public class ViewportManager
throw new Exception("Viewport is not set"); throw new Exception("Viewport is not set");
return _viewport; 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 模型选中交互管理 #region 模型选中交互管理
//是否双击选中 //是否双击选中
@ -156,6 +179,15 @@ public class ViewportManager
ChooseAddModels.Clear(); 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>
/// 模拟面选中 /// 模拟面选中
/// </summary> /// </summary>
@ -289,12 +321,7 @@ public class ViewportManager
_viewport.Camera.UpDirection = new Vector3D(0, -1, 0); _viewport.Camera.UpDirection = new Vector3D(0, -1, 0);
_viewport.RenderHost.MSAA = MSAALevel.Maximum; _viewport.RenderHost.MSAA = MSAALevel.Maximum;
// TODO: // TODO:
MainModelMeshLines_C.Clear(); ResetMeshLines();
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);
} }
/// <summary> /// <summary>
@ -470,8 +497,16 @@ public class ViewportManager
_viewport.Items.Remove(MainModelCircleLine_C); _viewport.Items.Remove(MainModelCircleLine_C);
MainModelMeshLines_P.ForEach(e => _viewport.Items.Remove(e)); MainModelMeshLines_P.ForEach(e => _viewport.Items.Remove(e));
_viewport.Items.Remove(MainModelCircleLine_P); _viewport.Items.Remove(MainModelCircleLine_P);
ResetMeshLines();
} }
} }
public static void ClearMeshLines(MenuItem menuItem)
{
ViewportManager.ShowMeshLines(false, true);
ViewportManager.ShowMeshLines(false, false);
menuItem.IsChecked = false;
}
#endregion #endregion

Loading…
Cancel
Save